微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过UDP套接字连接两个移动客户端

如何解决如何通过UDP套接字连接两个移动客户端

image

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

  • 将数据包发送到服务器时,服务器将从路由器IP和随机端口接收数据包。

  • 我尝试通过打开新的UDP套接字连接,通过路由器IP和端口从服务器向客户端发送响应,但是客户端未收到响应。

  • 我通过在已经接收到客户端消息的套接字上发送我的响应来执行相同的操作,这次是它接收了客户端。

即使从路由器IP和打开的端口上,我也无法从其他UDP套接字(在服务器和其他客户端上)向我的第一个客户端发送UDP数据包。

我很好奇,是否可以建立客户端到客户端的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',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.address);
 ///////↑//////////
});

server.bind(8090);

解决方法

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。