本帖最后由 pvlking 于 2010-12-08 16:57:15 编辑

解决方案 »

  1.   

    阻塞啊,非阻塞啊,不是太明白,没进行什么设置,就普通的socket连接。
      

  2.   

    TCP丢包很正常,可以提高C端发送的频率,同时延长S端认为断开的时间。别的方法暂时想不到
      

  3.   

    心跳包不是 发送个检测信息来表示 在线么? 给点优化的思路呢?  我觉得我的COSKDET连接不稳定 还是怎么的。
      

  4.   

    TCP丢包很正常?正常吗????
      

  5.   

    是不是粘包问题呢,你检查下接受的数据大小是否一致,如果接受的数据包大小一样,就是粘包了,可以自己来拆!
     TCP 怎么会丢包正常嘛 开玩喜!
      

  6.   

    不太复杂的:发送么就个send()。 m_bsend 的是我来记录这次发送是不是发送成功了(到缓冲区)。接收部分么,因为有的数据发送的频率比较高,有的发送的比较少。我就分成了3个数据包。先接收8个字符来判断是什么类型的数据包,再接收后面的数据。 做测试的时候 其实就一个 检测信息的数据包在 发送。
      

  7.   


    以前传BODY数据包的时候,基本上一次recv接收不完整的。 所以我在接收部分 我都用了WHILE循环:
    直到接收到的长度和数据包包长一样 才进行下面的操作。
      

  8.   

    最新情报: 
    我把心跳包去掉后,SOCKET连接还是会断的,我发文字信息接收不到了。  确实是连接不稳定。 为什么会断掉?广域网会比局域网断的频繁,链路上的数据多了也会比较频繁。
    S端挂了两个C端,1个C端断了,还有个C端正常。 为了提高点压力:互相看这对方的视频,并且在录像。 (在局域网做的实验) 图像数据传输不是用的这个SOCKET的连接,直接从视频头拿的数据
      

  9.   

    搞什么心跳包啊,另起一个线程定时用select去查询socket的状态,无论是断网,断电或者是关闭了socket,select函数都会查出该套接字是error,具体原因用WSAGetLastError去判断。我就不明白了,非要整个心跳包干啥,TCP本来就是面向连接的,socket有任何变化,操作系统底层都会给予通知。再不行,把socket和一个完成端口绑定,用GetQueuedCompletionStatus去查询端口状态,有错误,有断网等,立刻就得到通知