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。
我是运行一个使用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。