1.若在OnReceive()函数中处理比较费时,不能及时返回,会不会造成数据包丢失?2.另外,若OnReceive()函数没有处理完,这时又有数据包到达,会不会又触发OnReceive()函数,也就是说OnReceive()函数能否并行运行,同时处理多个数据包?3.CAsyncSocket会不会把收到的数据包存在一个队列里,等待OnReceive()函数慢慢处理,也就是OnReceive()函数处理一个包,CAsyncSocket再次触发OnReceive()函数处理下一个包?欢迎大家讨论!

解决方案 »

  1.   

    OnReceive是一步,就象楼主想的那样运作。但如果处理的数据大或频繁,建议还是自己来封装一个类。
      

  2.   

    CAsyncSocket由消息机制驱动,只有一个线程在运行,所以会出现阻塞,也就是和楼主说的第三种情况那样,出现下一个数据包的事件会在消息队列中.不会出现丢包,至于如果有大量数据积压,超出缓冲区的大小时,对TCP来速度将减慢,不会丢包,如果UDP就会丢包了.....
      

  3.   

    CAsyncSocket的IO操作实现是同步的,是基于消息机制的。
      

  4.   

    CAsyncSocket客户端本身有缓冲区处理,不过仍然建议建立自己的缓冲区队列,所有到来的数据报文送入队列,并创建单独的队列循环处理投递在队列中尚未处理的报文
      

  5.   

    OnReceive()函数能否并行运行?
      

  6.   

    要并行处理在OnReceive中新建线程处理数据
      

  7.   

    这种理解对吗?
    CAsyncSocket会把收到的数据包存在一个队列里,等待OnReceive()函数慢慢处理,也就是OnReceive()函数处理一个包,CAsyncSocket再次触发OnReceive()函数处理下一个包。
      

  8.   

    简单的理解可以是这样的 只有onrecevie返回了,才会处理下一个事件,不仅仅是onrecevie,只要在处理任何一个事件,其它的事件虽然有可能已经发生,但要待完成后才会处理,是一个先进先出的消息队列
      

  9.   

    也就是说不需自己开消息队列了,那CAsyncSocket缓冲区一般能存多少数据包了,一个包一K吧
      

  10.   

    CAsyncSocket会帮你处理消息,你只要选择关心的网络事件,你可以通过设置来改变缓冲区大小,能存多少包很难说,这是一个变数和你的包大小和缓冲区大小有关.
    只要知道TCP是不会丢包的,UDP会
      

  11.   

    UDP 最好注意一下丢包,超出缓冲就会丢
    TCP会有连接控制.UDP是没有的,要么自己加些连接控制