p2p通信的大牛请进来?
用UDP穿越NAT遇到了一些问题如下:
主机1和主机2在两个不同cone型的NAT后面(主机1和2本机地址都是192.168.1.100,绑定端口都是8001),服务器server在公网上(IP为202.201.13.106,绑定的port为8000),用UDP穿越NAT,程序运行不稳定,主机1和2给对方发送消息有时候发送成功,有时候失败,具体是:
我现在做的效果是这样的:
消息传递成功有两种情况:
1. 主机1直接发送消息到主机2公网上,主机2直接受到消息(没有经服务器发送打动命令,对方未发送打洞包)
2. 主机1请求server发送打动命令给主机2,主机2发送打洞包后,主机1收到主机2的打洞包后忽略,主机1再给主机2发送消息成功。
发送消息失败的情况也有两种:
1. 主机1请求server发动打动命令给主机2,主机2收到命令发送打洞包给主机1,主机1收到了打洞包并忽略,主机1再发送消息给主机2但是发送失败;
2. 主机1请求server发送打动命令给主机2,server发送了打动命令,主机2上抓包为接收到打动命令
请问各位大侠是什么原因导致这种有时成功有时失败,哪位给分析分析呀
[解决办法]
成功的情况一:这种估计是adsl上网的才这么容易实现吧
二:这种是很容易打洞的网关,或是端口是很有规律累加的那种实现的吧
失败一:估计是对称性的吧,比较难实现,按照端口变化一些算法,猜测下一个端口可能范围