5

我正在编写一个简单的 P2P 应用程序来测试在更大的项目中使用 UDP 打孔的可行性。

我昨天在家尝试了我的测试应用程序,它们工作正常。

但是,我现在在工作,相同的代码不再起作用。发送者在这里发送到我们路由器的外部 IP 地址上的适当端口,但接收者没有收到任何一个。

在调用之前UdpClient.Receive(),接收应用程序将数据包发送到它将监听的 IP:port。同样,这适用于我的家庭设置,但不适用于这里。无论 Windows 防火墙是打开还是关闭,结果都是一样的,所以这不是问题。

可能是路由器处理这种情况的方式不同吗?

EDIT1:两个应用程序在同一台机器上运行。

4

1 回答 1

2

回答我自己的问题:

路由器确实表现出不同的行为。

我的家用路由器只连接到我的笔记本电脑。我认为这就是为什么当我从端口 n发送 UDP 数据包时,它也会将路由器留在端口 n上。

但是,我的工作网络由几台计算机组成,路由器在其末端随机化端口,这意味着从端口 y发送的数据包将在端口 x上离开路由器。

我已经成功地让我的家庭和工作机器通过 NAT 进行通信,而无需通过以下方式使用端口转发:

H - 将数据包从端口 a 发送到 W:b,从而为传入连接打开端口 a

W - 将数据包发送到 H:a 并切换到接收模式。它现在也有一个开放的端口。

H - 从 W 接收数据包,而不是假定知道要回复哪个端口,而是检查数据包的源端口并使用它。

H - 将数据包发送到 W:源端口

W - 接收数据包。

瞧。

在实践中,H 和 W 会联系服务器以交换连接细节,这简化了事情,因为服务器确切地知道 H 和 W 从哪个端口发送。

于 2010-12-21T11:33:04.630 回答