javascript - 检查UDP套接字是否在某个端口上运行,关闭它,然后再次运行

标签 javascript node.js sockets

我正在使用 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/

相关文章:

检查 UDP 端口是否已在 C 中打开

java套接字等于方法

javascript - 当正文具有使用 Fullpage.js 的类时隐藏或显示元素

php - 防止多次执行 JavaScript 函数

javascript - php 中的分页。 AJAX、PHP、MYSQL

windows - Node.js 无法在 Windows 上安装全局 npm 包(不是路径)

javascript - NodeJS 模块初始化

node.js - “w”不被识别为内部或外部命令、可操作程序或批处理文件

node.js - 我如何访问 mongodb 文档的数组? (mongodb、nodejs)

sockets - Golang UDP 和 TCP 并排