多次向同一个套接字发送数据(send),为何前几次成功,后面的就失败了?

PDD123 2017-07-26 10:28:17
我要发送很多个对象,如果打成一个包,数据太多的时候,就有可能导致内存分配失败。
所以我就拆分成好几组分别打包发送:
在一个for循环中,不断调用send发送数据,但是后面的数据总是发送失败。成功发送17次左右(2.5万个字节左右),后面的就失败了,send返回负数

请问,这是为什么?有什么办法可以解决?


循环体的代码如下:
							int res=::send(con->m_socket,dp->m_buf,dp->m_lenght,0);
if(res>0)
{
theDebugData.mSendBufferLen+=dp->m_lenght;
}
else if(res<0)
theDebugData.mSendErrorCount++;
...全文
744 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2017-08-01
  • 打赏
  • 举报
回复
一个减少发送太频繁,导致系统处理不过来。
worldy 2017-08-01
  • 打赏
  • 举报
回复
引用 楼主 PDD123 的回复:
我要发送很多个对象,如果打成一个包,数据太多的时候,就有可能导致内存分配失败。 所以我就拆分成好几组分别打包发送: 在一个for循环中,不断调用send发送数据,但是后面的数据总是发送失败。成功发送17次左右(2.5万个字节左右),后面的就失败了,send返回负数 请问,这是为什么?有什么办法可以解决? 循环体的代码如下:
							int res=::send(con->m_socket,dp->m_buf,dp->m_lenght,0);
							if(res>0)
							{
								theDebugData.mSendBufferLen+=dp->m_lenght;
							}
							else if(res<0)
								theDebugData.mSendErrorCount++;
应该是TCP缓冲区满,造成发送失败,你可以在For循环中年加入一个sleep试试
shenyi0106 2017-07-31
  • 打赏
  • 举报
回复
估计应该是 接收端太慢,导致协议栈中的缓冲区满,报出的错误。 用WSAGetLastError查看一下错误原因
xian_wwq 2017-07-28
  • 打赏
  • 举报
回复
同意2楼,看WSAGetLastError, 才能知道到底是哪里出错了
ckc 2017-07-27
  • 打赏
  • 举报
回复
也许是你发的太快? 失败了就暂停,等下重新发送试试

18,356

社区成员

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

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