我正在编写一个简单的P2P应用程序来测试在更大的项目中使用UDP穿孔的可行性.
我昨天在家尝试了我的测试应用程序并且他们工作了.
但是,我现在正在工作,相同的代码不再起作用.发送方在这里发送到我们路由器的外部IP地址上的相应端口,但接收方没有得到它们中的任何一个.
在呼叫之前UdpClient.Receive(),接收应用程序将一个数据包发送到它将监听的IP:端口.同样,这适用于我的家庭设置,但不是这里.无论Windows防火墙是打开还是关闭,结果都是相同的,所以这不是问题.
可能是路由器以不同的方式处理这种情况吗?
EDIT1:两个应用程序都在同一台机器上运行.
回答我自己的问题:
路由器确实表现出了不同的行为。
我的家庭路由器仅连接到我的笔记本电脑。我认为这就是为什么当我从端口 n发出 UDP 数据包时,它也会在端口 n上离开路由器。
然而,我的工作网络由多台计算机组成,路由器随机化其一端的端口,这意味着从端口 y发送的数据包将在端口 x上离开路由器。
我已经成功地让我的家庭和工作机器通过 NAT 进行通信,而无需使用端口转发,方法如下:
H - 将数据包从端口 a 发送到 W:b,从而为传入连接打开端口 a
W - 将数据包发送到 H:a 并切换到接收模式。它现在也有一个开放的端口。
H - 从 W 接收数据包,而不是假设知道要回复哪个端口,而是检查数据包的源端口并使用它。
H - 发送数据包到 W:源端口
W - 接收数据包。
瞧。
实际上,H 和 W 会联系服务器来交换连接详细信息,这简化了事情,因为服务器确切地知道 H 和 W 从哪个端口发送。
| 归档时间: |
|
| 查看次数: |
1322 次 |
| 最近记录: |