【问题标题】:Multiple socket clients多个套接字客户端
【发布时间】:2018-09-25 19:10:25
【问题描述】:

我尝试创建 socket.io 的多个客户端,每个客户端都连接到不同的服务器,但到目前为止,第二个服务器被拒绝连接,第一个服务器断开连接,我认为是因为当我在数组中只留下一个客户端时,everythink没问题。

与两个客户的消息

Uncaught Error: connect ECONNREFUSED 127.0.0.1:10002

function connections() {
    var data = {
    "clients": [{
        "10000": "127.0.0.1",
    },
{
        "10002": "127.0.0.1",
    }]
};

data.clients.forEach(function(client_port, index) {
    console.log(client_port + index);
    Object.keys(client_port).forEach(function(client_ip) {    
        console.log(client_ip + " = " + client_port[client_ip]);
        var port = client_ip;
        var ip = client_port[client_ip];
        socket = net.connect(port, ip, function () {
            socket.on('data', function (data) {
                var dataHex = data.toString('hex');
                var dataString = data.toString('utf8');
                util.log('get data:' + dataString);
                $('response').value += dataString;
                arrayparadox = dataString.split(' ');
                console.log(arrayparadox[1]);
            });
                util.log('connected to server ' + client_ip + ':' + client_port);
            });
    });
});
    }

如果我只在数组中留下一个客户,请使用everythink is okai。

【问题讨论】:

  • 您是否尝试过设置 CORS 或关闭防火墙?
  • 另外,看起来你没有在循环中声明套接字,所以它可能被覆盖了?尝试将 var 放在 socket = net.connect 前面...
  • ECONNREFUSED - 连接时服务器拒绝连接 - 但不应应用 CORS (blog.securityevaluators.com/…)。有服务器端的信息吗?

标签: javascript sockets connection


【解决方案1】:

我发现您的代码有两个问题。

  1. 在 JSON 对象中,键不是按插入顺序排列的。所以你不能声称哪个是第一个或第二个,因为没有顺序。

  2. 您正在做的是对所有套接字使用相同的变量socket。所以很有可能在第二次迭代中socket 对象正在更新,而前一个对象被垃圾收集。您可以做的是创建一个套接字对象数组:

    socket[index++] = net.connect();

  3. 现在您可以附加 socket[index].on(data,function(){}) 等事件

【讨论】:

    猜你喜欢
    • 2016-01-05
    • 1970-01-01
    • 2018-02-04
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 2018-03-26
    • 1970-01-01
    相关资源
    最近更新 更多