服务器如何在qt中通过udp向nat后面的客户端发送数据?

2024-06-25 22:42:37 发布

您现在位置:Python中文网/ 问答频道 /正文

服务器有一个公共IP,客户机在nat后面。在

客户端如何在qt中通过udp与服务器通信?在

客户端会先向服务器发送一些数据,然后服务器如何回复客户端?在

目前的代码是:

服务器:

self.udpSocketGet = QtNetwork.QUdpSocket()
self.udpSocketGet.bind(QtNetwork.QHostAddress.LocalHost, serverPort)
self.udpSocketGet.readyRead.connect(self.receive)

def receive(self):
    while self.udpSocketGet.hasPendingDatagrams():
        size = self.udpSocketGet.pendingDatagramSize()
        if size > 0:
            data, senderAddr, senderPort = self.udpSocketGet.readDatagram(size)

客户:

^{pr2}$

Tags: 数据代码selfip服务器客户端size客户机
1条回答
网友
1楼 · 发布于 2024-06-25 22:42:37

你的问题的答案超出了qt。签出http://en.m.wikipedia.org/wiki/UDP_hole_punching和{a2}

我正在编辑这个答案后,我回头看,发现服务器有一个公共IP地址。在这种情况下,服务器只需响应请求来自的任何IP地址。如果客户端通过NAT进行通信,服务器将看到路由器的公共地址,并且完全不知道实际的客户端在路由器后面。在

Receiving a response through UDP 底线是您要么必须使用端口映射,要么使用UPNP。在

另请参见https://superuser.com/questions/456812/nat-and-udp-replies 同样,服务器代码不应该与NAT遍历有关。客户端使用UPNP,路由器启用UPNP。或者路由器被配置成转发或记住来自客户端的包的源和目的地IP地址和端口,并正确地向后返回服务器发送的包。在

相关问题 更多 >