Я настраиваю два компьютера, один - клиент в локальной сети за NAT, другой - сервер в общедоступной сети.
Шаги теста: 1) клиент прослушивает udp на порту 33333 2) сервер прослушивает udp на порту 22222 1) клиент отправляет UDP на сервер 2) сервер получил данные и отправил обратно
Когда я тестирую код в своей тестовой сети, все в порядке.
Если поместить сервер в реальный Интернет, сервер может получить сообщение от клиента, клиент не может получить ответ от сервера. Что случилось?
Вот тестовый код с помощью nodejs.
сервер var dgram = require ('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);
клиент 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");