WSASend() + recv()的问题

LiWang112358 2010-10-25 10:03:23
发送端是用大量buf和overlap进行WSASend(iocp)
接收端是recv(阻塞)进行循环接收。

现在的问题是:发送2000个信息,向本机传输的时候(127.0.0.1)没有问题
如果两个程序不在一起,接收端可能接收不全,但是当发送端Sleep(10)的时候
可以完全接收

这是为什么呢?
请各位指教。
...全文
122 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zcgzdhxm 2010-10-25
  • 打赏
  • 举报
回复
以前也遇到过这样的问题,会不会是缓冲区满了,导致一些包超时掉了
码侬 2010-10-25
  • 打赏
  • 举报
回复
接收 > 发送 就不会丢失数据。

不过不能保证,那就用同步socket。没有接收完的时候,发送缓冲已满的时候,就不再发送,就不会丢失数据。
Eleven 2010-10-25
  • 打赏
  • 举报
回复
TCP的粘包问题吧
LiWang112358 2010-10-25
  • 打赏
  • 举报
回复
找到错误了,原因是接收方没写循环,改成这样就好了
int nLeft = sizeof(PACKAGE);
int index = 0;
while (nLeft > 0)
{
retVal = recv(sRecvServer,(char*)&myPack + index,nLeft,0);
if (SOCKET_ERROR == retVal)
{
printf("Recv failed! %d\n",WSAGetLastError());
WSACleanup();
closesocket(sRecvServer);
return -1;
}
index += retVal;
nLeft -= retVal;
}
谢谢各位

18,356

社区成员

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

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