首页 > 解决方案 > 如何通过 UDP 套接字连接两个移动客户端

问题描述

图片

我想为两个应用程序之间的语音呼叫建立 UDP 连接。为了减少服务器上的事务,我需要将 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);

标签: node.jssocketsudpudpclientdgrams

解决方案


这是真的?“您从客户端发送消息,服务器收到它,但是当您向客户端发送响应时,客户端没有收到响应”。

如果这是真的,那么我认为您需要使用相同的套接字对象进行发送和接收,因为您不能在设备上的同一端口上创建两个套接字对象。


推荐阅读