如何在python中建立对等连接? (UDP)[duplicate]

问题描述 投票:-1回答:1

嗨,我想开发一个从对等文件传输到一台计算机到另一台计算机的项目,这些计算机具有不同的nat或不同的ISP,而没有中间服务器(仅允许使用Stun Server)。即使我们必须使用Tcp进行文件传输,我也只想在UDP中尝试它。

我研究了本文[[http://brynosaurus.com/pub/net/p2pnat/以获得对等连接基本视图,并通过使用aws ec2免费层尝试了UDP连接中的一些实际操作。

案例1 :(使用python的aws中的套接字tcp服务器)

[在本地计算机的端口1234中打开tcp连接,也在同一计算机的相同端口中打开UDP连接。通过建立与aws服务器的tcp连接并保持连接来获得公共ip和端口。然后通过使用sendTo函数从aws的终端复制外部地址(Ssh连接)。我从本地计算机向远程计算机的公共地址发送了UDP数据包

下面是发送udp数据包的代码:

sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) sock.sendTo(b'Message',('publicIp',PublicPort))

结果:失败,可以接受]]

案例2 :(套接字UDP服务器使用python在AWS的1234端口上绑定)

aws中的服务器代码将维护已建立连接的列表,因此,如果存在两个以上的连接,它将向已建立连接列表中的所有客户端发送已建立连接的列表。

所以我在每个连接控制台中都收到已建立连接的列表。

之后,我使用udp连接的公共地址使用sendTo函数将数据发送到连接。以下是发送udp数据包的代码:

sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) sock.sendTo(b'Message',('publicIp',PublicPort))

但是我在这种情况下也失败了。 

此后,我认为udp连接超时,因此我向服务器发送了新的UDP数据,但是我在所有连接中都收到了已建立连接的列表。

所以没有发生Nat超时,我在技术上一定是错误的,因为服务器可以将udp数据发送到客户端,而且udp的连接较少。

因此逻辑必须为,如果我知道与AWS服务器建立的udp连接的公共地址我可以将udp数据发送到该公共地址。

[请帮助我理解这种逻辑,我尝试搜索google,但我不知道要在google中搜索的关键字。

我曾经在Google中搜索过的关键字:

Udp打孔TCP打孔使用pyp2p进行udp打孔

但是我找不到解决方案。

嗨,我想开发一个从对等文件传输到一台计算机到另一台计算机的项目,这些计算机具有不同的nat或不同的ISP,而没有中间服务器(仅允许使用Stun Server)。甚至...

python sockets udp p2p stun
1个回答
0
投票
问题是因为您不了解NAT的工作方式。现在有四种类型的NAT]
© www.soinside.com 2019 - 2024. All rights reserved.