我有一个客户端程序需要和服务器端通信,使用TCP连接,并且在没退出程序时需要保持连接。
但是现在遇到的问题是,程序经常断开与服务器的连接。
然后我增加了类似心跳的机制(用TCP每隔一段时间发送一个确认数据包),结果依然会经常断线。
请问用TCP方式是否有好的方法可以避免这种问题或者减少断线出现的几率。
希望大家能够关注一下!

解决方案 »

  1.   

    问题是先要找出断线的原因,TCP正常情况下是不会出现断线的。
      

  2.   

    你用的是什么模型?
    select, iocp还是其他?
    还有你说的断线是在什么时候断的,send,recv,connect?
    怎么判定断线的, getlasterror后,错误码是多少?
      

  3.   

    我用的是select,recv函数返回零时认为socket关闭。
      

  4.   

    我感觉我的程序并没有什么问题,就是有时会断线,然后重连很快就能连上。由于现在我的程序需要实时接受服务器端传来的语音数据,而且服务器端不会重传,这个老是断线重连的话会导致语音数据有丢失。还有为什么TCP连接会经常断线呢?我已经增加了类似心跳的机制了(不停的向服务器发送连接确认,tcp实现)。希望大家能够给出好的意见和处理方法,谢谢!
      

  5.   

    同求:为什么实际应用中TCP如此容易断线
      

  6.   

          我也有同样问题,我用的IOCP问题,连接4个小时(长连接),中间有时会断几次
      

  7.   

    “我用的是select,recv函数返回零时认为socket关闭。

    recv返回0时,不一定就是socket关闭。
    1. 如果是 阻塞 模型,
        recv 返回0,-1,可以认为socket关闭。
    2. 如果是 非阻塞 模型,
        recv 返回0,不能认为socket关闭。
        recv 返回-1,还要getlasterror,如果是=10053,也不能认为是断线,只有其他值才可以认为socket关闭。