完成端口怎么客户端只能收到1次服务器的回应?

djfu 2009-03-03 03:32:18
服务端采用完成端口,
在收到POST_RECV的操作类型以后,分析收到的客户端数据,并马上调用send返回结果给客户端,然后再投递一个WSARecv操作。

结果,客户端只在第一次发送数据到服务端,可以正确收到服务器的回应。
下面再发一次,尽管服务器收到了,也调用send发送数据给客户端了,
但是客户端就是收不到数据,recv(...)停在那里了。

这是怎么回事?
...全文
120 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
djfu 2009-03-06
  • 打赏
  • 举报
回复
原因找到了,我在第一次投递WSARecv之前,清除了PER_IO_OPERATION_DATA,这在第一次是正确的。
但是如果第二次再投递WSARecv之前还这么做的话,就清空了历史记录的重要信息,
例如:该完成端口对应的socket套接字句柄。

socket套接字句柄都不对,发送数据自然就失败了。
nieoding 2009-03-04
  • 打赏
  • 举报
回复
是不是粘包,可以把客户端接收到的信息trace出来看看
IONPhantom 2009-03-04
  • 打赏
  • 举报
回复
服务器发送send之后有没有察看是否发送正确,也就是send是否正常返回?先确定服务器的send返回正常再查客户端
百事烟 2009-03-03
  • 打赏
  • 举报
回复
这个问题不懂,up
今天没回贴,保证每天至少回一贴,嘎嘎,贫农啊没办法!!

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧