Node.js 网络套接字:无法连接到多个 IP
Posted
技术标签:
【中文标题】Node.js 网络套接字:无法连接到多个 IP【英文标题】:Node.js Net Sockets: Can't connect to multiple IP's 【发布时间】:2017-09-19 15:07:52 【问题描述】:我想从 2 个不同的 IP 地址读取数据。但我总是收到“EALREADY”错误。 这意味着套接字“已经在使用”,尽管我在收到数据后正在销毁套接字。
如果我删除 for 循环并且只读取 1 个地址,它就可以正常工作...
如果我添加超时,它们不会触发......我也不知道为什么。
var socket = new net.Socket();
var test = [];
test[0] = '10.5.0.5';
test[1] = '10.5.0.11';
for(var i=0;i<test.length;i++)
socket.connect('2711', test[i], function()
socket.write('d\n');
console.log("1");
console.log(test[i]);
socket.on('data', function(data)
data = data.toString();
console.log(data);
socket.destroy();
console.log("2");
);
);
高度赞赏的帮助。 提前致谢。
【问题讨论】:
【参考方案1】:“For 循环”是同步的,但“.connect”和“.on('data'”是异步的,因此 for 循环在第一次连接发生之前完成。第二次连接尝试发生在第一次连接仍在进行中时,这就是你得到连接错误的原因。
您应该尝试递归函数,逐步推进。例如,我创建了一个接收数组的函数,并迭代数组的第一个元素,连接,并在数据上关闭它,如果数组仍有更多项,则再次调用该函数。
var socket = new net.Socket();
var test = [];
test[0] = '10.5.0.5';
test[1] = '10.5.0.11';
function testIP(test)
socket.connect('2711', test.shift(), function()
socket.write('d\n');
console.log("1");
socket.on('data', function(data)
data = data.toString();
console.log(data);
socket.destroy();
console.log("2");
if( test.length > 0 )
testIP(test);
);
testIP(test);
奖励:有libraries in Node.js 可以处理异步任务
【讨论】:
有效!非常感谢你。我什至从未听说过 .shift(),我应该看看。我也很难处理所有异步/同步的东西。像我这样的初学者很难。以上是关于Node.js 网络套接字:无法连接到多个 IP的主要内容,如果未能解决你的问题,请参考以下文章