这个或许对你有帮助
http://bbs.csdn.net/topics/310027936

解决方案 »

  1.   

    貌似是说发送或接收太快就会出现这个错误,但还是有点不理解
    因为我是顺序接收的,即等一次Receive函数返回后再进行下一次的Receive,
    那么无论一次Receive的Size有多大,只要Receive函数返回,就表明该次接收已经正常完成了,
    下一次的Receive应该不受任何影响才对,
    为什么出现这个错误会受Receive函数的Size参数影响呢?
      

  2.   

    1.自己拆开多个包
    2.BeginReceive
        EndReceive
      

  3.   


    嗯,自己拆包是可以的,但我觉得拆成多个包分开进行发送接收也存在循环发送和接收的问题,因为我总共就是要发送接收这么多的东西,除非在发送和接收拆分后的包时利用进行一定量的延时。至于异步接收,由于在一次异步接收时同样可能不会接收到我所要的所有数据,因此可能也需要多次异步接收才能完成,控制上稍显麻烦一点,至于多次异步接收的时候还会不会出现 “由于系统缓冲区空间不足或队列已满,不能执行套接字上操作 的问题”  这个问题,我倒是没测试过不要“觉得”,你还是实际去测试一下再说。每一次Send不要大于10M。
      

  4.   

    另外,建议你最好使用异步 Receive,而不是同步 Receive。这样才能保证效率和稳定性。
      

  5.   


    不用理解了,只要是说“发送或接收太快就会出现这个错误”,那一定是他自己的程序设计有严重问题,而把问题找了个无关的理由。老大,你说了每一次Send不要大于10M,但我如果要发送80M的东西怎么办,我只能分8次发送。是的,我可以分8次发送,但我还是要用8次来循环发送,关键问题就是现在循环发送的时候出现了这个错误(其实我是接收的时候出了错误),那么请问这个程序设计上的严重问题在哪?是应该在每次发送之间要延时吗?如果是这样,那么请问这个延时的依据在哪?延时多少合适?
      

  6.   

    对于流设备,在分时操作系统上,你循环读取数据时会存在和硬件时序对不准的情况,比如底层还在接收,你已经开始获取缓存字节数,然后读取,等下一个周期,这之间可能会有大量数据读到,超出部分丢失或是其他小问题,丢包,错误的情况多。
    异步接收其实反而是软件和硬件都同步了,硬件一段时间的读取完成,触发信号,你读取线程开始读,丢和误少很多。没更多的理论依据,这是我猜的,之前做的一个socket功能测试结果如此。