完成端口,使用WSARecv接受某长度的数据,如何得知已经接受完毕?

guanxg 2004-10-22 11:16:12
rt
...全文
304 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
pclili 2004-10-26
  • 打赏
  • 举报
回复
在自己的数据包里填上数据的长度,收时判断一下。
guanxg 2004-10-26
  • 打赏
  • 举报
回复
哪位大虾有好的解决方法啊,给点代码看看啊,都急死了
lianglp 2004-10-26
  • 打赏
  • 举报
回复
楼主可以这样实现:
用WSARecv()函数投递的时候只接收自定义协议长度的缓冲空间,
这个自定义协议中其中有一个项包含要接收的数据长度,当用
GetQueuedCompletionStatus()收到接收数据消息的时候,只接
收到协议的内容,接着就可以用recv()函数继续接收还没有接收到的数据内容了。
geland 2004-10-22
  • 打赏
  • 举报
回复

BOOL WSAGetOverlappedResult(
SOCKET s,
LPWSAOVERLAPPED lpOverlapped,
LPDWORD lpcbTransfer,
BOOL fWait,
LPDWORD lpdwFlags
);


lpcbTransfer 接受数据的长度
geland 2004-10-22
  • 打赏
  • 举报
回复
void CALLBACK CompletionROUTINE(
IN DWORD dwError,
IN DWORD cbTransferred,
IN LPWSAOVERLAPPED lpOverlapped,
IN DWORD dwFlags
);

cbTransferred :接受数据的长度

guanxg 2004-10-22
  • 打赏
  • 举报
回复
WSARecv是非堵塞的,所以无法知道到底有没有发送完毕啊。
tangrh 2004-10-22
  • 打赏
  • 举报
回复
呵呵,反正我是报文头里有长度信息,一收就知道了
「已注销」 2004-10-22
  • 打赏
  • 举报
回复
要么通过长度定义,要么通过特殊包数据标志。
wwwsq 2004-10-22
  • 打赏
  • 举报
回复
需要在数据层解决这个问题。也就是说,传送的数据应该是“自描述”的。

18,356

社区成员

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

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