我在一台计算机上有一台UDP服务器,而另一台计算机上有一台客户端。我无法通过本地网络或Internet接收服务器计算机上的客户端发送的消息。我的最终目标是将服务器放在我的内部网络上,并将客户端放在云上托管的虚拟服务器上。
当我在同一台计算机上运行相同的服务器和客户端时,它们会完美地对话。托管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?
这是我用来发送测试的代码...同样,如果服务器位于同一台计算机上,则只需将地址更改为localhost,该程序就可以完美运行。
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
我感觉自己缺少一些简单的东西,但是我仍在学习所有这些东西如何协同工作。非常感谢您的帮助。
答案 0 :(得分:0)
将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