无法从Win Forms C#app连接到远程Node.js Socket.IO服务器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法从Win Forms C#app连接到远程Node.js Socket.IO服务器相关的知识,希望对你有一定的参考价值。

我创建了连接到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");
            });
        }

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

2018年3月6日。 11:40:12:客户连接;客户端与ID SknUAgkyMg61QtfUAAAA连接

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

答案

经过长时间的调试后,我发现在使用npm安装的socket.io数据包中存在问题。

由于我在一个月前在PC上安装了socket.io数据包,因此似乎有一些socket.io依赖(不确定哪一个)更新和损坏。

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

之后,一切都按预期工作。然而,许多人不会遇到这个问题,因为它仅在C#到Node.JS socekt.io关系中被揭示,但是很高兴知道。

以上是关于无法从Win Forms C#app连接到远程Node.js Socket.IO服务器的主要内容,如果未能解决你的问题,请参考以下文章

win7/win10-远程桌面 "由于安全设置错误, 客户端无法连接到远程计算机”

Linux无法远程连接Redis?

win8电脑无法连接到远程桌面,显示“凭证不工作”的解救方法

Play Framework 2.3 - 无法连接到远程数据库 Linux (Play) -> Win 7 (MySQL)

win10远程连接linux samba,如何从Win10连接到Linux Samba共享

您的凭据不工作 之前用于连接到**的凭据无法工作。请输入新凭据。