双方都在Port-Restricted Cone NAT后的客户端,udp穿透,打洞时发生的郁闷问题 本帖最后由 xtaxa 于 2012-06-16 04:09:38 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个问题还有40分在这里 http://topic.csdn.net/u/20120616/03/5aacbde3-7327-4230-af54-1fdee55f9c00.html?7652 看了你的描述 问题很复杂 还是没看明白 但是我们尝试下由原点出发 重新想这问题……问题就是NAT穿透?那么就得先由Server通过TCP告知Client对方的IP和端口 然后再有Client之间的UDP连接…… 进过多次测试,发现果然是路由器的问题,gg和百度,都没有人说明如何解决这个问题,只搜索到一个帖子,轻描淡写说IMCP是杀手,想办法避免用你的扫描穷举的思路,偶尔能成功,但不100%成功。哎,再等等,看有高人出现没有,如果没有,分就全给你。我简单再说明下我的问题,应为上面说得太多,大家反而没有看明白。我现在遇到的问题是(假如现在位于路由器后的A要发消息给B):1.A用控件winsock1发消息给服务器,服务器得到A外网端口假如为11112.A用控件winsock1发消息给B,B路由器得到A外网端口也为1111(但此时路由器会丢弃这个包)为了B路由器不丢弃这个包,我就要打洞,于是我这样做:1.A用控件winsock1发消息给服务器,服务器得到A外网端口假如为11112.B从服务器得到A的外网IP和端口(1111),B给A的外网IP和端口(1111)发送打洞包3.A用控件winsock1发消息给B,此时,B路由器得到A外网端口将不再是1111了,问题就出在这里了,我估计就是第2步中的B向A打洞导致路由器A将重新映射A向B的端口 确实,,TCP P2P也碰到过这个问题,,想不明白为什么端口变了 我编了两个程序,一个是SERVER,运行在公网上,作为UDP包协调服务器,用以记录各客户端的上线状况;另一个就是CLIENT,可以运行在公网上,也可以运行在内网中.如果一个客户在公网,另一个客户在内网,可以实现UDP打洞,穿透NAT. 但如何两台机器均在内网(即在NAT之后),则无法打洞.因为,客户端出NAT时的端口发生了变化.我现在遇到这样的问题,不知楼主的打洞是否成功? 关于显示链接的问题 关于串口的问题(好低级我就是不会) ATL中在主窗口里创建的子窗口的消息路由不到主窗口消息处理程序,是什么原因呢??? cprogressctrl如何加入一个根据进度条长度而对应的text? slider控件的问题 编译通过,但运行时报非法访问出错!!!! 高分虚心求教,线程问题!!! listview的tooltip问题? MFC中 GetFieldValue()如何获取缓冲池内的long类型数据 调查:你在写软件时需要查资料吗?查的频lu高吗?如果要查查哪些资料?(msdn除外) 28日18点前参与有分:如何更改ppt播放时默认光标? ListCtrl拖动
问题就是NAT穿透?
那么就得先由Server通过TCP告知Client对方的IP和端口 然后再有Client之间的UDP连接……
进过多次测试,发现果然是路由器的问题,gg和百度,都没有人说明如何解决这个问题,只搜索到一个帖子,轻描淡写说IMCP是杀手,想办法避免用你的扫描穷举的思路,偶尔能成功,但不100%成功。哎,再等等,看有高人出现没有,如果没有,分就全给你。我简单再说明下我的问题,应为上面说得太多,大家反而没有看明白。我现在遇到的问题是(假如现在位于路由器后的A要发消息给B):
1.A用控件winsock1发消息给服务器,服务器得到A外网端口假如为1111
2.A用控件winsock1发消息给B,B路由器得到A外网端口也为1111(但此时路由器会丢弃这个包)为了B路由器不丢弃这个包,我就要打洞,于是我这样做:
1.A用控件winsock1发消息给服务器,服务器得到A外网端口假如为1111
2.B从服务器得到A的外网IP和端口(1111),B给A的外网IP和端口(1111)发送打洞包
3.A用控件winsock1发消息给B,此时,B路由器得到A外网端口将不再是1111了,问题就出在这里了,我估计就是第2步中的B向A打洞导致路由器A将重新映射A向B的端口
如果一个客户在公网,另一个客户在内网,可以实现UDP打洞,穿透NAT. 但如何两台机器均在内网(即在NAT之后),则无法打洞.因为,客户端出NAT时的端口发生了变化.
我现在遇到这样的问题,不知楼主的打洞是否成功?