TClientSocket缓冲区

qq_33339268 2017-04-13 10:49:06
用Timer每间隔50ms客户端向服务器发送数据,服务器判断数据包长度后再进行操作,可是运行一段时间后客户端的sendbuf就会返回-1,WSAGetLastError()为10035,服务器接收到的数据包长度也不符合要求,是因为客户端TClientSocket的缓冲区满了吗?可以改变缓冲区的大小吗?谢谢!
...全文
1189 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
木叶流丹 2017-04-24
  • 打赏
  • 举报
回复
发送一组数据完了,最好等待一下,太快了好像会有问题
zzbinfo 2017-04-13
  • 打赏
  • 举报
回复
除非你发的数据超过了缓冲区的大小,贴你接收部分的代码看看。
zzbinfo 2017-04-13
  • 打赏
  • 举报
回复
我看你是有专门的函数产生发送数据的,你用日志记录一下发送的数据及长度,看看有没有问题,再定位故障
qq_33339268 2017-04-13
  • 打赏
  • 举报
回复
发送部分是用定时器定时生成再发送的
void __fastcall TClientForm::SendTimerTimer(TObject *Sender)
{
switch(CurrentLinkStatus)
 {
  case Break:
  {
   ShowMessage("与服务器连接出错,请重新连接!");
   SendTimer->Enabled=false;
   break;
  }
  case Link:
  {
   RandomGenerate();
   SendNum=ClientSocket->Socket->SendBuf(&RandomData,sizeof(RandomData));
   if(SendNum!=3600)
      { SendErNum=WSAGetLastError();
        ShowMessage("数据发送错误!发送字节数为"+IntToStr(SendNum)+",错误代码为"+IntToStr(SendErNum));
      }
   break;
  }
 }
}
zzbinfo 2017-04-13
  • 打赏
  • 举报
回复
接收这部分看不出什么问题,检查发送部分吧。不是接收缓存的问题
qq_33339268 2017-04-13
  • 打赏
  • 举报
回复
void __fastcall TServerForm::ServerSocketClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
  RevNum=Socket->ReceiveLength();
  if(RevNum!=3600)
     {ShowMessage("数据接收错误!");
     }
  Socket->ReceiveBuf(Buffer,3600);
  if (startflag==1)
      WriteToCB();                           //写入环形缓冲
  CurvePlotThread->Resume();   //画图线程
}

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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