Node.js DGRAM模块:不能将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 

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

我也想使用来自远程机器的客户端代码。 所以,当我使用server.bind(10022,'192.168.7.171')代替server.bind(10022,'127.0.0.1')时,我希望能够将消息发送到远程的UDP进程机。 我不能。 有趣的是,远程机器上的send函数的callback也不会返回错误。

如何获得远程机器上的客户端代码发送消息到UDP服务器。 所有的防火墙都被closures进行testing,因为我最初怀疑是防火墙问题。 无论如何,这两台机器在testing期间都在本地的内部网上。

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

 server.bind(10022); 

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