Node.js DGRAM 模块:无法将 UDP 消息发送到远程机器,但可以发送到本地机器

Node.js DGRAM module: Cannot send UDP message to remote machine but can to local machine

我是运行一个使用Nodejs的dgram模块的简单UDP服务器。 相关代码很简单:

     server = dgram.createSocket('udp4');
     server.bind(10022,'127.0.0.1');

当我在本地机器上 netstat 时,使用这个:

 sudo netstat -l

我看到这个条目:

 Proto Recv-Q Send-Q Local Address     Foreign Address         State
 udp        0      0 localhost:10022     *:*  

当我使用接口的 IP 地址从远程计算机执行 nmap 时:

sudo nmap -sU -p 10022 192.168.7.171

我看到了这个:

  Nmap scan report for 192.168.7.171
  Host is up (0.00032s latency).
  PORT      STATE  SERVICE
  10022/udp closed unknown

我在同一台机器上有 UDP 客户端代码 运行,当我使用 server.bind(10022,'127.0.0.1') 时工作​​正常,如上所述。当我使用分配给接口的真实 IP 地址时,它不会。

我也想使用来自远程机器的客户端代码。因此,当我使用 server.bind(10022, '192.168.7.171') 代替 server.bind(10022,'127.0.0.1') 时,我希望能够将消息发送到 UDP从远程机器处理。我不能。有趣的是,在远程机器中,发送函数的回调也没有 return 错误。

如何让远程机器上的客户端代码向 UDP 服务器发送消息。所有防火墙都关闭进行测试,因为我最初怀疑这是防火墙问题。无论如何,测试期间两台机器都在本地 Intranet 上。

bind()address参数是可选的,您可以省略它但仍然指定端口来尝试监听所有本地地址(0.0.0.0)。例如:

server.bind(10022);

关于丢失的错误 UDP默认是一个不可靠的协议,当它在线上发送时,传输将被视为成功。 UDP不发回和确认包,如果你需要一个可靠的通道你可以使用TCP。