我正在使用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上。
答案 0 :(得分:1)
address
的{{1}}参数是可选的,您可以尝试通过省略它来侦听所有本地地址(bind()
)但仍指定端口。例如:
0.0.0.0
关于丢失的错误UDP默认情况下是一种不可靠的协议,当它在线路上发送时,传输将被视为成功。 UDP不发回和确认包,如果需要可靠的通道,可以使用TCP。