服务器socketserver端向客户端clientserver发送数据,如果服务器端每个数据包为2k连续发送,客户端采用阻塞方式监听,就会产生有的数据包监听不到,在服务器端加入一个小的延时就可以了,服务器端用的是阻塞方式的(经测试所有的包都已经发送成功了),客户端监听到只有不到一半
请问为何要加入延时?有没有好办法?
谢谢了

解决方案 »

  1.   

    SERVERSOCKET/CLIENTSOCKET是用TCP的,用阻塞方式不可能出现这种情况,当客户端来不及收时会出现缓冲区溢出的异常,非阻塞方式也会出现错误消息。
    一般只有UDP才会丢包。
      

  2.   

    那你认为问题出现在哪里?
     我的服务端和客户端都采用阻塞方式
    用服务器端用sendbuf方法发送到缓冲区内返回实际写入的字节数,这些数据
    发送到客户端接收事件中确实是丢失了
      

  3.   

    首先,我觉得你应该确定是否是你服务器有没有发送出去,是不是发太快了!你应该判断一下,每次发送的结果是不是2k,如果发送出去的话,在发送下面的
    Sendbuf返回值可以判断!
      

  4.   

    >>那你认为问题出现在哪里?
    >> 我的服务端和客户端都采用阻塞方式
    >>用服务器端用sendbuf方法发送到缓冲区内返回实际写入的字节数,这些数据
    >>发送到客户端接收事件中确实是丢失了
    客户端接收事件??在阻塞方式中有这东东吗?
      

  5.   

    请问下贴主,怎么实现了sendbuf来收发数据的?最好提供些源码!谢谢了!
      

  6.   

    呵,如果在阻塞方式下用SendBuf之类的确会出问题,看看帮助吧,在阻塞方式下要用TWinSocketStream,不过直接用它不太方便,我对它作了一点增强,有兴趣试试:
    http://raptorz.myetang.com/mentals/share/dev/msocket.htm
      

  7.   

    请问下贴主,怎么实现了sendbuf来收发数据的?最好提供些源码!谢谢了!
    [email protected]
      

  8.   

    问题已经解决了,主要在发送的时候判断一下sendbuf的返回值与程序发送的字节数是否相等就可以了,如果不相等就重复发送,谢谢大家!