如何在NAT上打开TCP / UDP端口来配置P2P应用程序?

时间:2014-05-13 00:18:59

标签: delphi tcp udp p2p nat

我正在Delphi XE5中开发一个P2P应用程序,它使用PHP远程服务器作为跟踪器来制作客户端套接字列表。如果客户端的NAT决定关闭/阻止它在发送到PHP远程服务器的第一条消息中创建的随机端口,我担心使用 UDP Hole Punching 会在某些时候失败。

所以我要知道如何使用来自客户端的NAT(用Delphi编写)进行更长时间的持久端口配置。我不希望我的用户需要知道如何访问路由器并自己配置端口转发。

我可以这样做并使用服务器来存储没有PHP-P-H的套接字,并确保至少在Delphi的应用程序运行端口时仍将保持打开状态吗?

如果我决定从远程服务器使用UDP打孔,如果没有其他用户可以很快直接连接到用户的本地PC,那么NAT会保持打开端口吗?

如果我用UDP打开该端口,我可以在之后使用TCP吗?

Obs:Delphi XE5编译到Windows 32和Android,所以我需要一个非Windows的解决方案。

1 个答案:

答案 0 :(得分:2)

Microsoft有一个用于通过uPNP处理NAT的API,特别是用于分配端口映射。查看IUPnPNAT接口及其StaticPortMappingCollection属性。使用IStaticPortMappingCollection.Add分配NAT中的端口。

当然,这仅适用于打开uPNP的路由器。并非所有路由器都支持uPNP,或者启用了uPNP。