CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  网络编程

关于UDP的NAT打洞

楼主hlt(入门小弟弟)2006-01-21 15:30:01 在 VC/MFC / 网络编程 提问

1.   我上网看到CONE方式打洞是通过服务端转发打洞消息到对方客户端,再由对方客户端返回消息到源客户端的洞.以完成双方打洞过程.但我想了另一种方法,但不知可不可行,我的方法是客户端到服务端通过心跳维持一个洞,而P2P时不用另打洞了.如C1向服务端心跳,服务端记录C1的洞.C2也是一样.当C2与C1通讯时,只要向服务端请求C1的打洞信息,就住C1的洞发消息,C1要发消息,也向服务端请求C2的洞的信息.这种方式不知可不可行,请大家给点意见.  
   
  2.我是做一个点对点对聊程序,用来学习P2P的.用UDP,客户端用重叠模式接收的.我有一个全局的SOCKET变量,用来保存监听的SOCKET,因为要定时向服务端打洞.所以我必需要用这SOCKET向服务端打洞.因为我UDP监听是通过循环WSARECVFROM阻塞来达到监听的目的,我尝试在另一线程通过该SOCKET向服务端打洞.但每次都在SENDTO时被阻塞.若我不用监听,则可以顺利发送.请问有什么方法可以使该SOCKET可以双工运行?(不过我的发送是用SENDTO而不是WSASENDTO,而SOCKET是用WSASOCKET建立的.请问这样有问题吗?) 问题点数:50、回复次数:10Top

1 楼nuaawenlin(飘人)回复于 2006-01-21 20:02:40 得分 6

我的方法是客户端到服务端通过心跳维持一个洞,而P2P时不用另打洞了  
  ////////////////////////////////////////////////////////////////////  
   
  不行,因为这个洞是p2p双方的事情,与服务器没有关系,需要p2p两端向各自的NAT设备申请Top

2 楼nuaawenlin(飘人)回复于 2006-01-21 20:03:51 得分 6

用UDP,客户端用重叠模式接收的.我有一个全局的SOCKET变量,用来保存监听的SOCKET  
   
  //////////////////////////////////////////  
   
  udp没有侦听的功能呀,不知道你指的侦听是什么Top

3 楼striking(庸人自扰)回复于 2006-01-22 14:03:14 得分 7

1.   基本不可行.  
   
  c1   要和   c2   通信,   c1在向服务器请求c2的洞的信息的同时,   服务器告诉c2   ,   c1   欲联系你,   c1得到c2的信息后,   先往c2方向发个消息.   c2得到服务器的信息后,   也会往c1方向打个洞.  
  c2   和   c1   的联系   就通过了.Top

4 楼striking(庸人自扰)回复于 2006-01-22 14:03:41 得分 6

另,   http://community.csdn.net/Expert/topic/4522/4522838.xml?temp=.8980371Top

5 楼Kid4you(Kid4you)回复于 2006-01-22 14:32:40 得分 5

服务器通知双方打洞,然后可以直接通信Top

6 楼sakurako(看晨雾散开,你就是我一生的最爱...)回复于 2006-01-22 15:41:06 得分 6

服务器是打洞时的中转站,两面洞打好后就不需要了。Top

7 楼hlt(入门小弟弟)回复于 2006-01-22 20:01:45 得分 0

因为我的设想是C1通过S转发C2打洞消息是,C2也是向C1与S打好的洞发消息的,所以我就想既然双发已打好洞,就双方通过这个洞通讯.Top

8 楼hktl(風)回复于 2006-01-23 10:06:54 得分 7

不能这样子做的,  
  只要是C1和S你所谓心跳的洞,C2突然向C1的这个洞发消息,C1的网关是不接收的,  
  所以C2要想能成功发送,就必须C1先向C2发消息,所谓打洞就是C1和C2两个之间不断的向对方的端口发通讯消息,直到对方收到为止。  
   
  所以你的做法基本上是没什么作用,只是先知道了对方的端口,但C1和C2之间的通讯还是要依靠他们双方去打洞的,Top

9 楼alen_ghl(东方求*)回复于 2006-01-23 11:14:15 得分 7

NAT记录的洞只能对打洞的IP有效,其他IP必须再打洞Top

10 楼hlt(入门小弟弟)回复于 2006-01-23 13:48:18 得分 0

哦,明白,谢谢Top

相关问题

  • qq的udp打洞穿越防火墙??
  • 关于udp打洞的问题
  • P2P和UDP打洞之间 到底是什么关系啊?
  • 江湖救急--有关UDP穿越NAT的问题
  • P2P之UDP穿透NAT的问题,请高手帮帮忙
  • 请教UDP 打洞是个什么过程,有成功过的请进。
  • C#如何写UDP打洞的代码,有简单的源码吗?
  • 我问个简单问题,TCP能象UDP那样实现穿透NAT吗?
  • P2P打洞的Session可以否1对多个远程NAT的IP?
  • 请教关于UDP打洞的题,成功通信的请进,顶者有分(调了很久,大家帮忙)

关键词

  • p2p
  • 消息
  • 客户
  • 监听
  • 通讯
  • socket
  • 洞
  • 打洞
  • 服务端
  • 客户端

得分解答快速导航

  • 帖主:hlt
  • nuaawenlin
  • nuaawenlin
  • striking
  • striking
  • Kid4you
  • sakurako
  • hktl
  • alen_ghl

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo