相关疑难解决方法(0)

编程P2P应用程序

我正在编写一个在端口4900上运行的自定义p2p程序.在某些情况下,当人员在路由器后面时,无法从Internet访问此端口.

是否有自动方式从互联网访问端口.我不太确定其他p2p应用程序是如何工作的.

任何人都可以对此有所了解吗?

.net c# sockets networking p2p

37
推荐指数
2
解决办法
2万
查看次数

在3G上没有经过UDP打孔

我正试图在软件中实现一个打孔功能.问题是,我正在使用已经建立的TCP服务器与用户进行通信.

这是我到目前为止所拥有的:

  • "A"向UDP服务器"US"发送消息(在端口9333上)
  • "US"将已连接的端口发送回"A"(端口31000 - localport 31005)
  • "A"向TCP服务器"TS"发送消息,说他想要连接到B(并给端口31000)
  • "TS"向"B"发送消息,给他"A"的端口(31000)和ip
  • "B"向"US"发送消息(在端口9333上)
  • "US"向"B"发送消息,告诉他他的端口45000(localport 45005)
  • "B"向"TS"发送消息给出是udp端口(45000)
  • "TS"向"A"发送消息,给出B的udp端口(45000)和ip
  • "A"开始在端口45000上向B的ip发送udp消息,并在localport 31005上收听
  • "B"开始向端口31000上的A的IP发送udp消息,并在localport 45005上收听

当然,例如端口31000,31005,45000和45005,每个端口改变的新连接,只有9333是静态的.

我知道有很多来回,比实际情况还要多.事实上,我必然会使用TCP服务器与两个用户进行通信,udp服务器只是将用户的端口返回给自己,因此它可以将其发送回TCP服务器.

但是,任何人都不会收到用户之间的消息......任何人都会知道为什么?


编辑:

我用http://nattest.net.in.tum.de/test.php测试了我的路由器,并且udp打孔工作正常,所以问题不是来自我的路由器,而是来自我的协议......

当用户在同一个NAT后面时,一切正常,当然它使用了private ip,但这意味着代码也在工作,所以每一个都会导致协议问题......


编辑2:

实际上,我做了一半的工作(问题实际上来自我的代码,而不是协议......我已经连接了2个用户,一个用3G连接iPhone,一个连接在Wifi上我的NAT.

有趣的(不是那么多)事情是,只有一个套接字能够在两个用户之间接收和发送数据.(由iphone发起的套接字)根据协议,我应该有2个连接良好的套接字,我错了吗?

所以我设法在我的NAT中打了一个洞,但实际上并没有在蜂窝NAT中.

当然,我立即测试了2台连接在3G上的iphone.没有人得到另一个人的信息.

我错过了有关手机NAT的内容吗?

PS:很抱歉更新我的问题,但由于我没有得到答案,我试图自己找...

PS 2:因为我设法在我的NAT中打了一个洞,我改变了标题,加上"在3G上"


编辑3:我再次运行http://nattest.net.in.tum.de/test.php测试,我的电脑通过我的iphone的3G连接连接到互联网.

这是结果: UDP HOLE PUNCHING RESULT

显然所有的udp打孔测试都是在第9次测试中成功的.

似乎还有更多:

UDP绑定测试(?):端点独立绑定,端口预测很容易

因此,通过3G连接连接2个对等设备应该不会有任何问题(远远不及"家庭"NAT背后)......我是对的吗?


编辑4:

为了确定,我现在向两个不同的UDP服务器发送消息,以检查3G上的端口和本地端口是否相同.

长话短说,端口(本地和公共)在两台服务器上连接时都是一样的.所以在EDIT 2上完成的测试是正确的,udp是端点独立的,所以我不应该在进行打孔时遇到任何问题......(至少我的ISP)

udp 3g hole-punching 3g-network

33
推荐指数
2
解决办法
1万
查看次数

如何在两台具有公共IP但都位于LAN后面的机器之间进行通信(python解决方案)?

正在寻找一个简单的 python 解决方案:

假设机器A的本地IP是192.168.1.5,公共IP是111.11.111.11,机器B的本地IP是10.0.0.5,公共IP是222.22.222.22,现在我需要在这两台机器之间进行通信,你该怎么做?

我见过很多服务器和客户端都在同一网络上的套接字编程示例,但是如何在不更改路由器配置(端口转发等)的情况下连接不同网络后面的机器?

编辑:

如果机器 A 在 LAN 后面怎么办:本地 IP 192.168.1.5,公共 IP 111.11.111.11;机器B是一个HTTP服务器,公共IP为222.22.222.22;现在您可以通过 HTTP 请求轻松地从 A 到达 B,但是从机器 B 到达机器 A 的最佳解决方案是什么?

python sockets networking

5
推荐指数
1
解决办法
2126
查看次数

标签 统计

networking ×2

sockets ×2

.net ×1

3g ×1

3g-network ×1

c# ×1

hole-punching ×1

p2p ×1

python ×1

udp ×1