最近做了个p2p的程序,刚开始连接的时候客户端可以互相通信,过2-3分钟不通信的话就连接不到对方了,即使记下对方经过NAT转换后的IP:port也不行,应该是NAT保持端口映射的时间是2-3分钟。想在程序里加心跳包,考虑不成熟,如果每次能够打通洞以后settimer的话又有其它一些情况要考虑。做个这方面和熟悉这个的兄弟给个思路。好久没放分了,兼散分。问题解决了另开贴再散200.
解决方案 »
- MFC button形状变为圆形
- 哪位在Win8成功安装了VC6,,VC6在win8能完美兼容吗?
- GetOpenFileName执行后是不是有什么东西需要释放?
- I/O模型选择问题。
- 对话框创建后自动运行非模态对话框
- typedef BOOL (CALLBACK* GRIDCALLBACK)(GV_DISPINFO *, LPARAM); 这句如何理解啊
- 重发:我想查找一个文本文件中的字符串所在的行并输出行数,在C++语言中,我应该怎么编程实现?在线急等!
- 我有一个程序.辅工程A由结构体,类和Globals文件夹构成,Globals文件夹下只有几个普通函数和变量.是怎么生成的??
- 用过SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 0); 这个api函数吗?
- 可以浏览自己的文档格式的IE plug-ins怎么编程,例如Adobe pdf Reader 4.0
- 我对杀毒软件杀毒原理的理解,大家看对不?
- 如何在磁盘上给文件快速预留一大片空间?
-----------------
這個很正常喔, NAT 認為這個 Session 超時了,在你的通訊上寫一個心跳包。定時向對方發送,超時多少次以後認為連接無效了。
你可以专门用一个线程管理客户端之间的心跳包
否如果C要判断与A是否连接,你就发给C。
依次类推
如果B、C 长时间收不到A的包,就认为与A断开了。