CSocket::Receive()收包问题

AlexChenLei 2005-06-09 03:30:03
我在客户端发送如下数据
#pragma pack(1)
typedef struct data
{
char name[256];
}data;
#pragma

data D;
char na[] = "xyz";
memcpy(D.name,na,sizeof(na));
m_ControlSock->Send(&D,sizeof(data));

在服务器端的OnReceive()里面直接调Receive
data d;
int r = Receive(&d,sizeof(data),0);
if (r == SOCKET_ERROR )
{
AfxMessageBox("Error");
return;
}

可是不知为什么数据发送过出去之后服务器会多次相应OnReceive(),
每次r都是4,好像数据不是一次发送到的 这是怎么回事
怎样才能一次把那边的data全部接收下来
...全文
178 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
younggle 2005-06-09
  • 打赏
  • 举报
回复
在memcpy之前 memset(&D,0x00, sizeof(data));
由于TCP是流套接字(像管子中的水流一样),是无界的,所以要自己处理数据分界的问题。
aiyue2010 2005-06-09
  • 打赏
  • 举报
回复
发和收并不具有物理层的一一对应问题,多次发送的数据,接收时可能一次收完,也可能多次收,这要看网络状况。
tb01412 2005-06-09
  • 打赏
  • 举报
回复
试一下在memcpy之前用memset

18,356

社区成员

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

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