简体   繁体   English

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

[英]Can't connect to remote Node.js Socket.IO server from Win Forms C# app

I have created C# application that connects to Socket.IO server and send/receive some data. 我创建了连接到Socket.IO服务器并发送/接收一些数据的C#应用​​程序。 I'm using SocketIoClientDotNet which works when Socket.IO server is on my localhost (windows) . 我正在使用SocketIoClientDotNet ,当Socket.IO服务器位于我的本地主机(windows)上时,它可以工作。 But for production, Socket.IO server is on remote Debian Linux server and my app won't connect to it. 但是对于生产而言,Socket.IO服务器位于远程Debian Linux服务器上,而我的应用程序将无法连接到它。 However I know that remote Socket.IO server is working since I'm also using Express module to run web server which also connects to same Socket.IO only different namespace, and it connects just fine. 但是我知道远程Socket.IO服务器正在工作,因为我还使用Express模块​​来运行Web服务器,该Web服务器还连接到同一Socket.IO仅不同的命名空间,并且连接正常。

I'm using this code to connect to Socket.IO server 我正在使用此代码连接到Socket.IO服务器

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

On both servers (local and remote) Socket.IO version is 2.0.4. 在两个服务器(本地和远程)上,Socket.IO版本均为2.0.4。

EDIT 编辑

In node.js code is like this, so i know when somebody is connected: 在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");
}

There is also debug function which is not relevant. 也有不相关的调试功能。

in C# Win Forms app it looks something like this 在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");
            });
        }

So on my local server I can see debug messages: 因此,在本地服务器上,我可以看到调试消息:

06.03.2018. 06.03.2018。 11:40:12: Client connected; 11:40:12:客户端已连接; Client connected with ID SknUAgkyMg61QtfUAAAA 客户端与ID SknUAgkyMg61QtfUAAAA连接

But on remote server nothing is happening. 但是在远程服务器上什么也没有发生。 Also there is none C# exceptions except few of my debug messages. 除少数调试消息外,没有C#异常。

After long time debugging I found that it is a problem in socket.io packet installed using npm. 经过长时间调试后,我发现使用npm安装的socket.io数据包存在问题。

It appears that some socket.io dependency (not sure which one) is updated and broken since I have installed socket.io packet on my PC a month ago. 由于一个月前我在PC上安装了socket.io数据包,因此似乎某些socket.io依赖关系(不确定哪个)已更新和损坏。

Solution was to copy whole socket.io folder from node_modules folder from my PC to the server. 解决方案是将整个socket.io文件夹从我的PC的node_modules文件夹复制到服务器。

After that everything worked as it should. 之后,一切都按预期进行。 However many people wont have this issue since it is revealed only on C# to Node.JS socekt.io relation but it is good to know. 但是,许多人不会遇到此问题,因为它仅在C#与Node.JS的socekt.io关系中公开,但很高兴知道。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM