p2p发送心跳包

Torch009 2008-04-19 11:10:21
最近做了个p2p的程序,刚开始连接的时候客户端可以互相通信,过2-3分钟不通信的话就连接不到对方了,即使记下对方经过NAT转换后的IP:port也不行,应该是NAT保持端口映射的时间是2-3分钟。想在程序里加心跳包,考虑不成熟,如果每次能够打通洞以后settimer的话又有其它一些情况要考虑。做个这方面和熟悉这个的兄弟给个思路。

好久没放分了,兼散分。问题解决了另开贴再散200.
...全文
361 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
guoln1010 2011-01-29
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 laiyiling 的回复:]
我想你已经确定要使用心跳包了,只是想得到实现心跳的方案,通常也就是定时器或者线程。我建议你把定时器也放在一个线程里面运行,这个线程还可以处理其他的必要工作!
[/Quote]
我是把县城都放在了定时器里结果也是出现楼主的现象,长时间不操作就是连接失败。。。
AppZ 2010-01-24
  • 打赏
  • 举报
回复
mk
ddddfbb 2008-04-23
  • 打赏
  • 举报
回复
jf
Kudeet 2008-04-23
  • 打赏
  • 举报
回复
我想你已经确定要使用心跳包了,只是想得到实现心跳的方案,通常也就是定时器或者线程。我建议你把定时器也放在一个线程里面运行,这个线程还可以处理其他的必要工作!
Torch009 2008-04-23
  • 打赏
  • 举报
回复
NND,300分都没人进来顶一下。再等一天结贴。
yuan8708 2008-04-22
  • 打赏
  • 举报
回复
如果B要判断与A是否连接,你就发给B。
否如果C要判断与A是否连接,你就发给C。
依次类推
如果B、C 长时间收不到A的包,就认为与A断开了。
atiansk2006 2008-04-21
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 ouyh12345 的回复:]
引用 2 楼 zhdsheng 的回复:
帮顶
[/Quote]
ddddfbb 2008-04-21
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 ouyh12345 的回复:]
引用 2 楼 zhdsheng 的回复:
帮顶
[/Quote]
ouyh12345 2008-04-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhdsheng 的回复:]
帮顶
[/Quote]
skyful123 2008-04-21
  • 打赏
  • 举报
回复
同意 心跳包 最简单实用
zhdsheng 2008-04-19
  • 打赏
  • 举报
回复
帮顶
Torch009 2008-04-19
  • 打赏
  • 举报
回复
另外我建了个网络群:59670389,有兴趣的兄弟可以加入。
Torch009 2008-04-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 cnzdgs 的回复:]
只能用心跳包,由Client发向Server,可以每30秒一次或者频率更高,可以考虑用SetTimer也可以用一个线程。
[/Quote]


用线程的话发送心跳包后sleep一段时间,发送了一定次数后没有应答强制结束线程
cnzdgs 2008-04-19
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jinghao666666 的回复:]
由Client发向Server?????????洞打通以后Server就不起作用了。应该是Client----》Client吧。连接上以后开始SetTimer,发送心跳包。这样直接一点。当然连接上Server以后也来个SetTimer。这样做Client----》Client不是多余的吧?
[/Quote]
我说的Server就是你的另一台Client。
Torch009 2008-04-19
  • 打赏
  • 举报
回复
算了,不另开贴了,明天再加200分。来者有份。
Torch009 2008-04-19
  • 打赏
  • 举报
回复
由Client发向Server?????????洞打通以后Server就不起作用了。应该是Client----》Client吧。连接上以后开始SetTimer,发送心跳包。这样直接一点。当然连接上Server以后也来个SetTimer。这样做Client----》Client不是多余的吧?
china_bai 2008-04-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 cnzdgs 的回复:]
只能用心跳包,由Client发向Server,可以每30秒一次或者频率更高,可以考虑用SetTimer也可以用一个线程。
[/Quote]
scq2099yt 2008-04-19
  • 打赏
  • 举报
回复
up
cnzdgs 2008-04-19
  • 打赏
  • 举报
回复
只能用心跳包,由Client发向Server,可以每30秒一次或者频率更高,可以考虑用SetTimer也可以用一个线程。
Zhymax 2008-04-19
  • 打赏
  • 举报
回复
不传输数据没法在nat上保留连接,肯定得发心跳包,
你可以专门用一个线程管理客户端之间的心跳包
加载更多回复(5)

18,356

社区成员

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

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