是这样的,我学习IOCP,写了一个DEMO.服务器用IOCP实现,客户端用SELECT 实现.
可是现在出现一个问题.就是当一块数据要分多个包发送到服务器时(比如:要2个包), 而且服务器还没有处理第一个包时, 那么第二个包的内容会覆盖第一个包的内容.实在搞不清什么原因了.
还有一个情况是, 最初启动服务器后,如果只是服务器接收客户端的数据.
不给客户端发数据,那么就不会出现覆盖的情况.上面的问题的出现就出现在当服务器回复给客户端数据后, 客户端再发送一块需要发两次以上的包的数据情况下,就会出现这个问题.
我调试看了,这并不是包的顺序问题.如果服务器没有给客户端发过数据,那么客户端怎么给服务器发数据都没事.
但一旦服务器给客户端发了数据.
那么,这种情况才会出现.
如果我在调试的时候,手动控制客户端,也没事,就是发完第一个包,程序停下来,然后服务器接第一个包.
当服务器接完第一个包,我再手动让客户端发第二个包.可是真正的应用不是这样的,可能服务器这会正在做什么事,不有来及处理第一个包,这会第二个包来,  这样的情况会经常 发生,这样也是正常的呀?我现在就是不知道为什么,第二个包的数据会覆盖第一个包的数据呢????????????在什么样的情况下,会出现第二个包的数据 会覆盖第一个包的数据呢????请各位帮帮我!!!
上面说了一堆废话,就是在什么情况下,会出现第二个包会覆盖第一个包的数据.
如何解决这个问题?

解决方案 »

  1.   

    TCP:不可能覆盖,因为有窗口缓冲机制,缓冲满时发送端发不出去的;
    UDP:可能覆盖,缓冲满时,新到的包会覆盖旧的程序未来得及收取的包。
      

  2.   

    家里没装VC,公司上网不方便,:)
    一个DEMO,代码应该不多,你可以贴出来,让大家都帮你瞅瞅,:)
      

  3.   

    我也在学习IOCP啊,交流交流,QQ5771067
      

  4.   

    稿定了,是服务器在发数据时, 多投递了WSARecv 所以造成这样的情况!!!