无法在 node.js 的 2 台本地计算机之间发送 UDP 消息
Cannot send UDP message between 2 local computers with node.js
我在一台机器上有一个 UDP 服务器,在另一台机器上有一个客户端。我无法通过本地网络或互联网接收服务器计算机上的客户端发送的消息。我的最终目标是让服务器在我的内部网络上,而客户端在云中的托管虚拟服务器上。
当我 运行 同一台机器上的同一台服务器和客户端时,它们可以完美地交谈。托管 UDP 服务器的 ubuntu 服务器上的防火墙处于非活动状态。
sudo ufw status
Status: inactive
端口 (31091) 似乎正在侦听 UDP 服务器
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp6 0 0 :::21 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
udp 0 0 127.0.0.53:53 0.0.0.0:* -
udp 0 0 192.168.10.23:68 0.0.0.0:* -
udp 0 0 127.0.0.1:31091 0.0.0.0:* 2351/node /home/ubu
udp6 0 0 fe80::ba27:ebff:fea:546 :::* -
是否需要绑定机器内部ip而不是127.0.0.1?
这是我用来发送测试的代码...同样,如果服务器在同一台机器上,只需将地址更改为本地主机,该程序就可以完美运行。
var dgram = require('dgram');
var s = dgram.createSocket('udp4');
s.send(Buffer.from('this is a test'), 31091, '192.168.10.23');
在服务器端程序比较大,但我认为这都是相对于 UDP 服务器的所有代码
//UDP Server
var PORT = 31091;
var HOST = '127.0.0.1';
var dgram = require('dgram');
var server = dgram.createSocket('udp4');
server.on('listening', function() {
var address = server.address();
console.log('UDP Server listening on ' + address.address + ':' + address.port);
});
server.bind(PORT, HOST);
//END UDP Server
我觉得我缺少一些简单的东西,但我仍在学习这一切是如何协同工作的。非常感谢任何帮助。
将 UDP 服务器地址更改为 0.0.0.0 而不是 127.0.0.1 就成功了。
//UDP Server
var PORT = 31091;
var HOST = '0.0.0.0';
var dgram = require('dgram');
var server = dgram.createSocket('udp4');
server.on('listening', function() {
var address = server.address();
console.log('UDP Server listening on ' + address.address + ':' + address.port);
});
server.bind(PORT, HOST);
//END UDP Server
我在一台机器上有一个 UDP 服务器,在另一台机器上有一个客户端。我无法通过本地网络或互联网接收服务器计算机上的客户端发送的消息。我的最终目标是让服务器在我的内部网络上,而客户端在云中的托管虚拟服务器上。
当我 运行 同一台机器上的同一台服务器和客户端时,它们可以完美地交谈。托管 UDP 服务器的 ubuntu 服务器上的防火墙处于非活动状态。
sudo ufw status
Status: inactive
端口 (31091) 似乎正在侦听 UDP 服务器
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp6 0 0 :::21 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
udp 0 0 127.0.0.53:53 0.0.0.0:* -
udp 0 0 192.168.10.23:68 0.0.0.0:* -
udp 0 0 127.0.0.1:31091 0.0.0.0:* 2351/node /home/ubu
udp6 0 0 fe80::ba27:ebff:fea:546 :::* -
是否需要绑定机器内部ip而不是127.0.0.1?
这是我用来发送测试的代码...同样,如果服务器在同一台机器上,只需将地址更改为本地主机,该程序就可以完美运行。
var dgram = require('dgram');
var s = dgram.createSocket('udp4');
s.send(Buffer.from('this is a test'), 31091, '192.168.10.23');
在服务器端程序比较大,但我认为这都是相对于 UDP 服务器的所有代码
//UDP Server
var PORT = 31091;
var HOST = '127.0.0.1';
var dgram = require('dgram');
var server = dgram.createSocket('udp4');
server.on('listening', function() {
var address = server.address();
console.log('UDP Server listening on ' + address.address + ':' + address.port);
});
server.bind(PORT, HOST);
//END UDP Server
我觉得我缺少一些简单的东西,但我仍在学习这一切是如何协同工作的。非常感谢任何帮助。
将 UDP 服务器地址更改为 0.0.0.0 而不是 127.0.0.1 就成功了。
//UDP Server
var PORT = 31091;
var HOST = '0.0.0.0';
var dgram = require('dgram');
var server = dgram.createSocket('udp4');
server.on('listening', function() {
var address = server.address();
console.log('UDP Server listening on ' + address.address + ':' + address.port);
});
server.bind(PORT, HOST);
//END UDP Server