Node.js DGRAM模块:无法向远程计算机发送UDP消息,但可以向本地计算机发送UDP消息

时间:2016-08-23 18:53:21

标签: node.js udp

我正在使用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进程机。我不能。有趣的是,远程机器中的send函数的回调也没有返回错误。

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

1 个答案:

答案 0 :(得分:1)

address的{​​{1}}参数是可选的,您可以尝试通过省略它来侦听所有本地地址(bind())但仍指定端口。例如:

0.0.0.0

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