2015-12-14 2 views
2

У меня есть сервер Node.js, используя socket.io и приложение для Android. Я хочу, чтобы мое приложение подключилось к серверу. (Я работаю на местном уровне)Android Node.js Socket.io не подключен

Итак, сначала я запустить сервер: command prompt

Вот код этого:

var express = require('express');  // call express 
var app  = express(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
var port = process.env.PORT || 1234; 


app.get('/',function(req,res){ 
    res.send("Welcome to my socket"); 
}); 


io.on('connection', function (socket) { 

    console.log('one user connected : '+socket.id); 

    // when the client emits 'new message', this listens and executes 
    socket.on('new message', function (data) { 
     // we tell the client to execute 'new message' 
     console.log('this is message :',data); 
    }); 

}); 


http.listen(port, function() { 
    console.log('Server listening at port %d', port); 
}); 

И тогда я пытаюсь соединиться от моей деятельности здесь:

public class AvisActivity extends AppCompatActivity { 

    private Socket mSocket; 
    { 
     try { 
      mSocket = IO.socket("http://172.21.191.234:1234"); 
     } catch (URISyntaxException e) { Log.v("AvisActivity", "error connecting to socket");} 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_avis); 


     Log.v("AvisActivity", "try to connect"); 
     mSocket.connect(); 
     Log.v("AvisActivity", "connection sucessful"); 

    } 
} 

Моя проблема в том, что я никогда не вижу журнал «один пользователь подключен» на сервере, но я всегда вижу «попытаться подключиться» и «соединение успешно», в журнале Android.

Может кто-нибудь решить эту тайну для моего просьбы?

UPDATE

Мой код работает отлично, но я сталкиваюсь некоторые конфигурации Wi-Fi, который блокирует веб-сокеты (и на самом деле моя школа сделала, вот где мои проблемы пришли)

ответ

0

UPDATE

Мой код работает отлично, но я сталкиваюсь некоторые конфигурации Wi-Fi, который блокирует веб-сокет (и на самом деле моя школа сделала, это где мои проблемы возникли). Но я действительно не знаю, как они заблокировали его.

Также, в моем проекте, когда я развертываю сервер OVH, у меня возникают проблемы с использованием порта 1234. Обязательно используйте порт, доступный/разблокированный вашим провайдером.

0

Поместите гнездо инициализации коды ваш onCreate метод, как показано ниже:

public class AvisActivity extends AppCompatActivity { 

    private Socket mSocket; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_avis); 

     try { 
      mSocket = IO.socket("http://172.21.191.234:1234"); 
     } 
     catch (URISyntaxException e) { 
      Log.v("AvisActivity", "error connecting to socket"); 
     } 

     Log.v("AvisActivity", "try to connect"); 
     mSocket.connect(); 
     Log.v("AvisActivity", "connection sucessful"); 

    } 
} 
+0

Все еще не видели это на сервере:/ –

+0

Вы попробовали из браузера? –

+0

Да, из Google Chrome. Когда я перехожу на http: localhost: 1234, возникает та же проблема: в журнале сервера нет события. Но дисплей страницы «Добро пожаловать в мой сокет», как указано. –

2

вы код отлично он работает правильно, вам нужно только подтвердить IP-адрес, который вы подключаетесь это право, а также я Разрешение добавлено это интернет в Manifest.xml

<uses-permission android:name="android.permission.INTERNET"/> 

enter image description here

+0

Я забыл это разрешение, и я потерял часы. Благодаря :) –

0

Для тех, кто еще здесь прибегая к помощи, это помогло мне получить журнал информацию о проблеме:

Log.v("AvisActivity", "try to connect"); 
mSocket.connect(); 

mSocket.io().on(Manager.EVENT_TRANSPORT, new Emitter.Listener() { 
    @Override 
    public void call(Object... args) { 
     Transport transport = (Transport) args[0]; 
     transport.on(Transport.EVENT_ERROR, new Emitter.Listener() { 
      @Override 
      public void call(Object... args) { 
       Exception e = (Exception) args[0]; 
       Log.e(TAG, "Transport error " + e); 
       e.printStackTrace(); 
       e.getCause().printStackTrace(); 
      } 
     }); 
    } 
}); 

Для меня проблема в том, что клиент не будет использовать TLSv1.1 или 1.2. Я не разобрался с этим письмом. Поддержка моего сервера TLSv1.0 является моим текущим решением проблемы.

Смежные вопросы