【问题标题】:How to connect two mobile clients via UDP sockets如何通过 UDP 套接字连接两个移动客户端
【发布时间】:2020-09-06 16:36:56
【问题描述】:

我想为两个应用程序之间的语音呼叫建立 UDP 连接。为了减少服务器上的事务,我需要将 UDP 数据包直接从一个客户端发送到另一个客户端,而不是通过服务器发送数据包。但是我遇到了以下情况:

  • 当一个数据包被发送到服务器时,服务器会从路由器IP和一个随机端口接收它。

  • 我尝试通过打开一个新的 UDP 套接字连接,通过路由器 IP 和端口向客户端发送响应,但客户端没有收到响应。

  • 我通过已经收到客户端消息的套接字发送我的响应来做同样的事情,这次它收到了客户端。

我无法从其他 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.js sockets udp udpclient dgrams


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-09-08
    • 2016-05-09
    • 1970-01-01
    • 2019-06-08
    • 2011-03-16
    • 2017-11-23
    • 2018-02-04
    • 2019-11-19
    • 2015-02-08
    相关资源
    最近更新 更多