用异步消息CAsyncSelect 收发东西,什么情况下会一段一段地收发?怎样判断结束?

mei想好xi 2016-12-31 04:45:24
接收一大段数据的时候,好像一次接受不完?是不是应该一小片一小片的接收,给它连起来?那么,如何判断已经接收完了呢?我记得收到的数据长度为0就是完了,msdn里的例子好像也是这么个意思,然而我试了一下,发送一个"Hello",并没有触发case 0:
void CMyAsyncSocket::OnReceive(int nErrorCode)   // CMyAsyncSocket is 
// derived from CAsyncSocket
{
static int i=0;

i++;

TCHAR buff[4096];
int nRead;
nRead = Receive(buff, 4096);

switch (nRead)
{
case 0:
Close();
break;
case SOCKET_ERROR:
if (GetLastError() != WSAEWOULDBLOCK)
{
AfxMessageBox ("Error occurred");
Close();
}
break;
default:
buff[nRead] = 0; //terminate the string
CString szTemp(buff);
m_strRecv += szTemp; // m_strRecv is a CString declared
// in CMyAsyncSocket
if (szTemp.CompareNoCase("bye") == 0 ) ShutDown();
}
CAsyncSocket::OnReceive(nErrorCode);
}

不管接收还是发送,都要考虑这个是吗?
...全文
432 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-01-03
  • 打赏
  • 举报
回复
不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊! http://bbs.csdn.net/topics/380167545
Pingo520 2017-01-03
  • 打赏
  • 举报
回复
为什么要判断啊。CAsyncSelect不应该是消息驱动的么,如果没有数据发过来,根本不会触发接收消息,onreceive根本不会执行啊。判断0有什么意义啊。。。
oyljerry 2017-01-01
  • 打赏
  • 举报
回复
对。tcp是stream,需要你自己设置分隔符等来做结束处理

18,363

社区成员

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

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