Xamarin Socket.IO客户端不断创建多个套接字

时间:2016-08-10 15:04:04

标签: .net xamarin socket.io client

我一直在使用Xamarin-Android,我正在尝试创建一个Socket.IO客户端,通过按下按钮与Node.js中的Socket.IO服务器进行通信。我正在使用.Net https://github.com/Quobject/SocketIoClientDotNet的这个Socket.IO客户端库。

然而,当我运行以下代码时,它不是打开一个套接字,而是不断创建越来越多的套接字并连接到服务器("传入连接"在服务器代码中不断写入控制台连续)。当我运行与Windows Blank Project相同的代码时,它似乎工作正常,只创建一个插槽。过去这里已经解决了这个问题Xamarin socket.io connect on button press,但似乎在该线程中似乎没有任何解决方案。我现在一直试图让这个工作很长时间。任何帮助将不胜感激。提前谢谢!

编辑1:为了清晰起见,将URL从localhost更改为实际服务器的URL并添加了Node.JS服务器代码

编辑2:节点JS服务器在具有桥接适配器的VM上运行(因此它具有唯一的IP地址,并且不共享主机的IP)。模拟器正在主机上运行。我认为NodeJS服务器正在尝试响应模拟器的请求,但响应实际上已发送到主机,因此模拟器会继续重试连接到服务器。所以我认为我需要设置从主机到仿真器的某种转发。任何关于此的帮助或指导都会很棒。谢谢!

Socet.IO客户代码

button.Click += delegate {
    var socket = IO.Socket("http://193.61.190.46:9000/ingestintoDB");
    socket.On(Socket.EVENT_CONNECT, () =>
    {
        socket.Emit("hello", "new connection");
    });
}

Node.JS服务器代码

var ingestintoDB = io.of('/ingestintoDB');
ingestintoDB.on('connection', function (socket) {
   console.log("incoming connection");
   socket.on('hi', function(data){
       console.log(data);
   });
});

1 个答案:

答案 0 :(得分:0)

您正在尝试连接到设备/模拟器本身,因为您正在使用localhost(127.0.0.1),它最终失败,因此Socket.IO客户端正在重复连接,因为您不处理连接的失败情况。

更改您的连接以使用您的node.js服务器的IP地址(或DNS解析时的主机名)(假设您是自托管的)。

http://192.168.1.2:9000/ingestintoDB

您还可以使用模拟器可以访问的PC的自动分配环回地址,具体取决于您使用的模拟器:

http://10.0.2.2:9000/ingestintoDB

或者

http://10.0.3.2:9000/ingestintoDB