Я хочу установить UDP-соединение для голосовых вызовов между двумя приложениями. Чтобы уменьшить количество транзакций через сервер, мне нужно отправить UDP-пакет напрямую от одного клиента другому, не отправляя пакеты через сервер. Но я столкнулся со следующей ситуацией:
Когда пакет отправляется на сервер, сервер получает его с IP-адреса маршрутизатора и случайного порта.
Я попытался отправить ответ с сервера клиенту через IP-адрес и порт маршрутизатора, открыв новое соединение сокета UDP, но клиент не получил ответа.
Я делаю то же самое, отправляя свой ответ через сокет, который уже получил сообщение клиента, и на этот раз он получил сообщение клиента.
Мне не удалось отправить пакеты UDP из других сокетов UDP (как на сервере, так и на других клиентах) моему первому клиенту, даже через IP-адрес маршрутизатора и открытый порт на нем.
Мне любопытно узнать, можно ли установить UDP-соединение между клиентом или нет?
Приведенный ниже код является правильной моделью для возврата ответа клиенту:
const dgram = require('dgram');
const server = dgram.createSocket('udp4');
server.on('message', (msg, rinfo) => {
console.log(`* server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
const message = Buffer.from('Some bytes to '+rinfo.address+":"+rinfo.port);
//////↓///////////This is the receiver socket
server.send(message, rinfo.port, rinfo.address);
//////↑///////////
});
server.bind(8090);
По приведенному ниже коду клиент не получит никакого ответа даже от сервера, который получил сообщение клиента прямо сейчас!
const dgram = require('dgram');
const server = dgram.createSocket('udp4');
const serverResponse = dgram.createSocket('udp4');
server.on('message', (msg, rinfo) => {
console.log(`* server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
const message = Buffer.from('Some bytes to '+rinfo.address+":"+rinfo.port);
///////↓///////// This is the different socket instance
serverResponse .send(message, rinfo.port, rinfo.address);
///////↑//////////
});
server.bind(8090);