本帖最后由 VisualEleven 于 2010-12-06 10:17:29 编辑

解决方案 »

  1.   

    这个Receive不应该是主动调用的吧
    在CSocket中不是有个叫做OnReceive的函数吗,在这个函数里调用Recieve应该就没问题了,这里是缓冲区中有数据了才会调用的
      

  2.   

    你最好定义个协议,例如传送的时候带上02 03 之类的头,后面加上数据长度,数据。这样你receive的时候把所有数据放到一个大的缓冲区,然后按照你定义的协议来解析包。,把自己需要的数据取出来。
      

  3.   

    这个我知道,触发OnReceive时再调用Recieve,但是Recieve假如没接收完呢?会自动再触发一次OnReceive吗?
      

  4.   

    调用AsyncSelect强制触发一次。怎么结贴了才5分,太少啦
      

  5.   

    没接完会一直触发OnReceive函数,直到接完为止
      

  6.   

    "这些我都想过,但是现在协议没这方面的东西,假如你做为接收方,在不修改任何协议的情况下,有什么方法更有效的接收N长的信息"这与传输协议无关的这是与发送方协调,在发送的时候肯定有些结束或者未结束的标识的,,不可能是一下子就能接收N长的数据的N长的数据底层上也是分包发送的,,只是在接收的时候重新把各个小包组合起来。。表面上看是一次就接收过来了。。呵呵
      

  7.   

    请问,最后是否是按照如下的方法解决的,第1次触发OnReceive可以读取一部分,第2次再触发OnReceive再读取剩余的内容。“没接完会一直触发OnReceive函数,直到接完为止”