我的服务端程序是用完成端口写的,服务端分两次向客户端发送数据,客户端有时却一次收到服务端两次发来的数据. 在服务端两次发送数据之间调用sleep()又能正常. 这是为什么呀? 如果不用sleep()怎样解决啊?

解决方案 »

  1.   

    有两种可能
    1,可能你的数据量太大,不sleep的话,没有足够的发送窗口,所以第二次发送失败,你可以输出调试信息看一下,是不是返回WSA_IO_PENDING,如果不是,那就是错误了
    2,可能你投递的两个WSASend都使用了同一个overlap结构,不加sleep的话,前面一个没有进行i/o完成的时候,第二个使用该结构会出错/
      

  2.   

    楼上的答非所问TCP本来就是数据流协议
    不管服务器端分几次发送
    客户端收到几次数据跟服务器的发送次数本来就是没什么联系的
      

  3.   

    程序不能依赖sleep这样的函数,你的代码还是有一些问题的
      

  4.   

    我的问题好像是飘人说的第二种情况, 我的每个客户端在服务上对应有一个结构体, 结构体中有一个OVERLAPPED变量.但我不知道怎样解决.
      

  5.   

    如果是这样的话,服务端要连续地发送数据给客户端岂不是每次发送数据时都要不同的overlap.哪位大侠有完成端口的例子啊,能不能发给我一份.  [email protected]
      

  6.   

    overlapped方面的效率处理,你可以预先建立一定的overlapped池,用的时候从池里取,用后放回,这样就避免了频繁创建与释放空间造成的开销问题。