网络编程中 只能接收一部分数据,为什么

qq216 2009-09-10 01:29:57
void CEx126ClientDlg::ProcessPendingRead()
{
char buffer[BUFFER_SIZE];//定义缓冲区
int nReceived=m_pSocket->Receive(buffer,BUFFER_SIZE,0);
buffer[nReceived]=0;//接收数据
CString str;
str.Format("%s",buffer);
m_ctrlMsg.AddString(str);//将数据在列表框中显示
}

这是我的接收函数
但是接受到的只是一小段
据说要在发送端的buffer后面添加<EOF>
那这个接收端要怎么改
请大家帮帮忙
谢谢
...全文
132 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq51931375 2009-09-10
  • 打赏
  • 举报
回复
int n = 0;
CString strRecv = "";
while((m_pSocket->Receive(buffer, BUFFER_SIZE, 0)) >= BUFFER_SIZE)
{
strRecv = buffer;
m_ctrlMsg.AddString(strRecv );//将数据在列表框中显示
strRecv.Empty();
}
strRecv = buffer;
m_ctrlMsg.AddString(strRecv );//将数据在列表框中显示
雪影 2009-09-10
  • 打赏
  • 举报
回复
int nReceived=m_pSocket->Receive(buffer,BUFFER_SIZE,0);
nReceived是你实际收到的字节数.
如果nReceived大于或等于BUFFER_SIZE,则表示还有数据没有接收完全.需要循环调用Receive
  • 打赏
  • 举报
回复
是不是缓冲区不够大呢
奉海 2009-09-10
  • 打赏
  • 举报
回复
如果nReceived的值是正确的,则可能是你的buffer中的实际数据中含有结束符号,看如下例子
char szBuf[6];
szBuf[0] = 'a';
szBuf[1] = 'b';
szBuf[2] = 'c';
szBuf[3] = 0;
szBuf[4] = 'd';
szBuf[5] = 0;
CString strTest;
strTest.Format("%s",szBuf);
AfxMessageBox(strTest);
输出strTest的值只是abc,因为在Format格式化得时候在szBuf[3]遇到了结束符,后面的数据就被截断了。
江汉2 2009-09-10
  • 打赏
  • 举报
回复
定义数据包格式。多次接收,直至得到整个数据包。TCP是字节流,不是UDP数据报
飞天赤狐 2009-09-10
  • 打赏
  • 举报
回复
添加校验,如果接受不全,就重发,把数据搞成数据包发送
zgq26 2009-09-10
  • 打赏
  • 举报
回复
CString这类型没有1024那么大的啊,你一输出当然只有CString这么大的字串了。
qq216 2009-09-10
  • 打赏
  • 举报
回复
我设置的BUFFER_SIZE 是1024
sayhorse 2009-09-10
  • 打赏
  • 举报
回复
当BUFFER_SIZE比较大的时候,一次接收数据可能不完整,需要循环接收

18,356

社区成员

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

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