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

解决方案 »

  1.   

    过2-3分钟不通信的话就连接不到对方了
    -----------------
    這個很正常喔, NAT 認為這個 Session 超時了,在你的通訊上寫一個心跳包。定時向對方發送,超時多少次以後認為連接無效了。
      

  2.   

    不传输数据没法在nat上保留连接,肯定得发心跳包,
    你可以专门用一个线程管理客户端之间的心跳包
      

  3.   

    只能用心跳包,由Client发向Server,可以每30秒一次或者频率更高,可以考虑用SetTimer也可以用一个线程。
      

  4.   

    由Client发向Server?????????洞打通以后Server就不起作用了。应该是Client----》Client吧。连接上以后开始SetTimer,发送心跳包。这样直接一点。当然连接上Server以后也来个SetTimer。这样做Client----》Client不是多余的吧?
      

  5.   

    我说的Server就是你的另一台Client。
      

  6.   

    用线程的话发送心跳包后sleep一段时间,发送了一定次数后没有应答强制结束线程
      

  7.   

    如果B要判断与A是否连接,你就发给B。 
    否如果C要判断与A是否连接,你就发给C。 
    依次类推 
    如果B、C 长时间收不到A的包,就认为与A断开了。
      

  8.   

    NND,300分都没人进来顶一下。再等一天结贴。