我创建了连接到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年6月3日。 11:40:12:客户连接;与ID SknUAgkyMg61QtfUAAAA
连接的客户
但是在远程服务器上什么也没发生。 除了我的调试消息之外,没有C#异常。
答案 0 :(得分:0)
经过长时间的调试后,我发现在使用npm安装的socket.io数据包中存在问题。
由于我在一个月前在我的电脑上安装了socket.io数据包,因此一些socket.io依赖(不确定哪一个)的更新和破坏似乎。
解决方法是将整个 socket.io文件夹从node_modules 文件夹从我的PC复制到服务器。
之后一切正常。然而,许多人不会遇到这个问题,因为它仅在C#到Node.JS socekt.io关系中被揭示,但是很高兴知道。