【问题标题】:Can't connect to remote Node.js Socket.IO server from Win Forms C# app无法从 Win Forms C# 应用程序连接到远程 Node.js Socket.IO 服务器
【发布时间】:2018-03-07 05:34:28
【问题描述】:

我创建了连接到 Socket.IO 服务器并发送/接收一些数据的 C# 应用程序。我正在使用SocketIoClientDotNet,它在 Socket.IO 服务器位于我的 localhost (windows) 上时有效。但是对于生产,Socket.IO 服务器位于远程 Debian Linux 服务器,我的应用程序无法连接到它。但是我知道远程 Socket.IO 服务器正在工作,因为我还使用 Express 模块来运行 Web 服务器,该服务器也连接到相同的 Socket.IO,只是不同的命名空间,并且连接得很好。

我正在使用此代码连接到 Socket.IO 服务器

Socket socket = IO.Socket("http://someurl:9910/client");

在两台服务器(本地和远程)上,Socket.IO 版本都是 2.0.4。

编辑

在 node.js 中的代码是这样的,所以我知道何时有人连接:

var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server, {log: false, serveClient: true});

app.use('/', express.static(__dirname + '/html'));
server.listen(9910);

var ioClient = io.of('/client');
var ioManager = io.of('/manager');

ioClient.on('connection', function (socket) {
    debug("Client connected", "Client connected with ID \x1b[36m"+socket.client.id+"\x1b[0m");
}

ioManager.on('connection', function (socket) {
    debug("Manager connected", "Manager connected with ID \x1b[36m"+socket.client.id+"\x1b[0m");
}

还有不相关的调试功能。

在 C# Win Forms 应用程序中,它看起来像这样

using Newtonsoft.Json;
using Quobject.SocketIoClientDotNet.Client;

Socket socket;

private void frmMain_Load(object sender, EventArgs e)
        {
            socketConnect();
        }

private void socketConnect()
        {
            socket = IO.Socket("http://someurl:9910/client");
        }

        private void socketDisconnect()
        {
            socket.Disconnect();
        }

        private void initListeners()
        {
            socket.On(Socket.EVENT_CONNECT, () =>
            {
                Console.WriteLine("SOCKET CONNECTED");
            });
        }

所以在我的本地服务器上我可以看到调试消息:

06.03.2018。 11:40:12:客户端连接;使用 ID SknUAgkyMg61QtfUAAAA 连接的客户端

但是在远程服务器上什么都没有发生。 除了我的一些调试消息之外,没有 C# 异常。

【问题讨论】:

    标签: c# node.js socket.io


    【解决方案1】:

    经过长时间调试,发现是使用npm安装的socket.io包有问题。

    自从我一个月前在我的 PC 上安装了 socket.io 数据包后,似乎一些 socket.io 依赖项(不确定是哪一个)被更新和破坏了。

    解决方案是将整个 socket.io 文件夹从 node_modules 文件夹从我的 PC 复制到服务器。

    之后,一切都按原样进行。但是很多人不会有这个问题,因为它仅在 C# 与 Node.JS socekt.io 关系中显示,但很高兴知道。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-20
      • 1970-01-01
      • 1970-01-01
      • 2021-08-19
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多