CAsyncSocket::OnReceive 问题

sungengyu 2005-07-29 05:17:19
如果接收的数据较多,需要多次接收,怎么知道什么时候接收完了?

比如一共 3n 字节数据,我每次接收 n 字节。

.
...全文
179 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sungengyu 2005-08-01
  • 打赏
  • 举报
回复
惭愧,改一下:

if( (len = Receive(buffer,BUFFER_SIZE)) < 0 )
break ;
sungengyu 2005-08-01
  • 打赏
  • 举报
回复
laiyiling(Studying Technology....) : 谢谢!

sungengyu 2005-08-01
  • 打赏
  • 举报
回复
goodboyws(深夜不眠者) :
如果需要接收的数据恰好是4096的倍数,又如何?

silencewood(木头) , nuaawenlin(飘人) :
确实可以用帧头帧尾判断,但是应该有更通用的办法。

gohappy_1999(碧水蓝天) :
我试了一下,当没有数据时返回的是 SOCKET_ERROR ,也就是-1 。看了一下MSDN,返回值0应该是连接关闭是的返回结果。我试了一下,果然如此。ShutDown()后,Receive的返回值是0。
while(1)
{
if( len = Receive(buffer,BUFFER_SIZE) <= 0 )
break ;

count += len ;
TRACE(" \n %d bytes received , total : %d ",len,count) ;
ShutDown() ;
}

oyljerry(【勇敢的心】→ ㊣回家≡赞√㊣) :
谢谢。只是太吝惜笔墨了。 :(

Kudeet 2005-08-01
  • 打赏
  • 举报
回复
search msdn "mfcasync" 有答案
sungengyu 2005-08-01
  • 打赏
  • 举报
回复
Return Value
If no error occurs, Receive returns the number of bytes received. If the connection is closed, it returns zero. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling GetLastError.

SOCKET_ERROR 就是 -1 ,所以似乎应该改成这样:


if( len = Receive(buffer,BUFFER_SIZE) <= 0 )
break ;

sungengyu 2005-08-01
  • 打赏
  • 举报
回复
void CRequestSocket::OnReceive(int nErrorCode)
{
int count = 0 ;
int len = 0 ;
while(1)
{
if( len = Receive(buffer,BUFFER_SIZE) < 0 )
break ;

count += len ;
TRACE(" \n %d bytes received , total : %d ",len,count) ;
}

AsyncSelect(FD_WRITE|FD_CLOSE) ;

}
nuaawenlin 2005-07-30
  • 打赏
  • 举报
回复
使用数据头和数据尾加标志的方法来判断结束
oyljerry 2005-07-30
  • 打赏
  • 举报
回复
循环接收直到接收完毕
gohappy_1999 2005-07-29
  • 打赏
  • 举报
回复
搞个循环来接收,返回长度为0就完了。
不过这不太可靠
silencewood 2005-07-29
  • 打赏
  • 举报
回复
一帧数据有帧头帧尾
难道不能判断结束吗?
goodboyws 2005-07-29
  • 打赏
  • 举报
回复
void CMyAsyncSocket::OnReceive(int nErrorCode) // CMyAsyncSocket is
// derived from CAsyncSocket
{

TCHAR buff[4096];
int nRead;
nRead = Receive(buff, 4096);
//如果nRead小于4096,就表示接收完了
CAsyncSocket::OnReceive(nErrorCode);
}

18,356

社区成员

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

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