我正在使用 UDP 套接字,我遇到了一个问题,当代码第一次运行时它可以工作,但是当它第二次运行时它会出现以下错误:
at _handle.lookup (dgram.js:266:18)
at _combinedTickCallback (internal/process/next_tick.js:142:11)
at process._tickCallback (internal/process/next_tick.js:181:9)
我推断出此错误是因为该端口仍在使用中,因此我尝试编写一个示例代码来检查套接字是否在某个端口上运行,如果是,则关闭它,然后在同一端口上再次创建套接字。
这里是示例代码:
var PORT = 7777;
var HOST = '10.0.1.10';
var dgram = require('dgram');
var server = dgram.createSocket('udp4');
gener(server, PORT, HOST);
function gener(sock, prt, hst){
sock.close();
sock.bind(prt, hst);
}
server.on('listening', function () {
var address = server.address();
console.log('UDP Server listening on ' + address.address + ":" + address.port);
});
server.on('message', function (message, remote) {
console.log(remote.address + ':' + remote.port +' - ' + message);
});
当我运行它时,它给出以下错误:
dgram.js:638
throw new errors.Error('ERR_SOCKET_DGRAM_NOT_RUNNING');
^
Error [ERR_SOCKET_DGRAM_NOT_RUNNING]: Not running
at Socket._healthCheck (dgram.js:638:11)
at Socket.bind (dgram.js:186:8)
at gener (/home/caracall/Desktop/server.js:11:18)
at Object.<anonymous> (/home/caracall/Desktop/server.js:7:1)
at Module._compile (module.js:653:30)
at Object.Module._extensions..js (module.js:664:10)
at Module.load (module.js:566:32)
at tryModuleLoad (module.js:506:12)
at Function.Module._load (module.js:498:3)
at Function.Module.runMain (module.js:694:10)
最佳答案
这就是问题:
function gener(sock, prt, hst){
sock.close();
sock.bind(prt, hst);
}
你绝对不能关闭一个套接字,然后期望“绑定(bind)”立即成功。您需要创建新的套接字。您可能想要更接近此的东西:
function gener(sock, prt, hst){
if (sock) {
sock.close();
sock = null;
}
sock = dgram.createSocket('udp4');
sock.bind(prt, hst);
}
关于javascript - 检查UDP套接字是否在某个端口上运行,关闭它,然后再次运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56003679/