日期:2014-05-17  浏览次数:21609 次

UDP通讯,外网向内网发消息,内网无法收到
疯了啊。。。先发了个帖子也是这个问题。。后来又看了些文章,说内网一台电脑上先向外网发送一个UDP包。。外网收到了这个包。。并从中得到内网中该电脑的公网IpEndPoint,通过这个IpEndPoint就可以与之通讯。
现在我得到了IpEndPoint,为什么内网里的电脑还是收不到消息呢。

------解决方案--------------------
外网是不能够主动发送UDP数据包给内网机器的.因为NAT里没有映射,包来到路由器就进不去了.要想内网能够接收到数据,必须的是内网先发一个包给外网.外网收到此包,获得IP与端口,(注意:获得的端口是NAT自动分配的,并不是内网自定义启动的监听端口).有关闭时间限制.记得好像是一般是45秒以内.要确保内网能接收到外网的数据.最好是在收到内网发的包30秒内发送此包.
------解决方案--------------------
过ipe获得对方的IPENDPOINT没问题啊,服务器发送消息时就使用这个ipe的IP与端口发送,就能够把消息发到.
------解决方案--------------------
要想长期保持NAT分配的端口一直存在,我以前的做法是每隔30秒左右给对方发一个在线通知包.这样,NAT分配的端口就能一直保持下来.