TCP打洞怎么都打不通,求高手指点

wxliangzyt 2015-05-10 04:32:34
服务器:S
客户端A(连接S后,外网端口为:60000,同时开一个SOCKET侦听此端口) 客户端B(连接S后,外网端口为:40000,同时开一个SOCKET侦听此端口)
S分别把对方的端口与外网IP发给对方

A,B,收到对方的外网IP和端口后,便每隔3分钟打一次洞(我是用:ConnectEx(m_TestClient_ConnectSocket,(SOCKADDR*)&g_service,sizeof(SOCKADDR),NULL,0,&m_dwTrasBytes,&lpOLConnectEx->m_OLap))来连接实现打洞
我理解就打洞就是实现一次连接


此方法一个洞都打不通,我想应该是我打洞的方式错了,求指点


A,B网络都是ADSL,具有动态的独立IP,路由器开通DMZ就可直连的

setsockopt(pcs->m_ServerSocket,SOL_SOCKET ,SO_REUSEADDR,(char*)&iOption_value,iLength);

设置了重用的
...全文
323 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2015-10-15
  • 打赏
  • 举报
回复
neil1984121 2015-10-15
  • 打赏
  • 举报
回复
要实现所谓的打洞技术,需要写一个服务器这个服务器运行在公网上。设计一个客户端登陆协议比如用户ID号,服务器可以登记客户端在服务器的登陆IP地址和端口号(TCP/UDP协议连接到公网的时候最终在连接上服务器上的SOCKET上表示出来)。 A登陆到运行在公网的服务程序,服务程序通过A连接时的SOCKET记录下A在公网上的IP和端口号。 B登陆到运行在公网的服务程序,服务程序通过B连接时的SOCKET记录下B在公网上的IP和端口号。 然后服务程序把A登陆的IP和端口号告诉B,把B的登陆IP和端口号告诉A。 A断开用客户端身份与服务程序的连接,使用这个端口号建立服务器。 B断开用客户端身份与服务程序的连接,使用这个端口号建立服务器。 A用这个端口号做服务器。B要找A时就以客户端方式连接到A。 B用这个端口号做服务器,A要找B时就以客户端方式连接到B。 试一下这个步骤看看行不行。
pingshell 2015-05-11
  • 打赏
  • 举报
回复
TCP老鼠吗?打洞?
bluesen 2015-05-11
  • 打赏
  • 举报
回复
用udp简单许多

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧