我設置了兩臺PC, 一個是客戶端在本地網絡中的NAT, 另一個是公網上的服務器。不能發回UDP給內部PC behide NAT
測試步驟 - 1)客戶端監聽udp,端口33333 2)服務器監聽端口UDP 22222 1)客戶端發送UDP到服務器 2)服務器接收的數據,併發送回
當我在我的測試網絡上測試代碼時,沒關係。
如果把服務器真正的互聯網上,服務器可以從客戶端的消息, 客戶端無法從服務器獲取響應。 有什麼問題?
以下是使用nodejs測試代碼。
服務器 變種DGRAM =要求( 'DGRAM');
var socket = dgram.createSocket('udp4');
socket.on('message', function (message, remote) {
console.log('client ip:' + remote.address + ', port:' + remote.port +', message:' + message);
//send response to client
var message = new Buffer("hello, client!");
socket.send(message, 0, message.length, remote.port, remote.address);
});
//listening port
socket.bind(22222);
client var dgram = require('dgram');
var socket = dgram.createSocket('udp4');
socket.on('message', function (message, remote) {
//display message from server
console.log('server ip:' + remote.address + ', port:' + remote.port +', message:' + message);
});
//listening port
socket.bind(33333);
//send message to server
function send(server){
var message = new Buffer("hello, server!");
socket.send(message, 0, message.length, 22222, server, function(){
//send again after 1 seconds
setTimeout(function(){
send(server);
}, 1000);
});
};
//suppose that server address is public.server.com
send("public.server.com");