Android Node.js Socket.io不能连接

我有一个Node.js服务器使用socket.io和一个Android应用程序。 我想我的应用程序连接到服务器。 (我在当地工作)

所以首先我启动服务器: 命令提示符

这是它的代码:

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

我的代码工作正常,但我遇到一些Wificonfiguration阻止networking套接字(实际上我的学校,这就是我的问题来自哪里)

你的代码是好的,它工作正常,你只需要确认你正在连接的IP地址是正确的,并且在manifest.xml中添加了INTERNET权限

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

在这里输入图像描述

把你的套接字初始化代码放在你的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"); } } 

UPDATE

我的代码工作正常,但我遇到一些Wificonfiguration阻止networking套接字(实际上我的学校,这就是我的问题来自哪里)。 但我真的不知道他们是如何阻止它的。

此外,在我的项目中,当我部署到OVH服务器时,我使用1234端口出现问题。 确保使用供应商提供/解锁的端口。

对于任何其他人在这里search,这帮助我得到了一些关于这个问题的日志信息:

 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是我目前的解决方法。