关于socket接收数据快,处理速度慢的问题

baiyingby 2006-11-10 08:04:54
用socket传数据,recv接收数据快,可是处理数据速度慢。在一个线程中,先接收数据,然后处理,再接收数据的化,会出现粘包的问题。如果分开两个线程的化,数据处理还是敢不上接收快,如何解决?
...全文
1137 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
baiyingby 2006-11-10
  • 打赏
  • 举报
回复
我也打算用两个线程,可否介绍一下队列如何同步
baojian88888 2006-11-10
  • 打赏
  • 举报
回复
可以参考 ACE_Message_Queue
DentistryDoctor 2006-11-10
  • 打赏
  • 举报
回复
粘包的问题无法避免。最好是有格式的包,有包头,这样就好区分了。
如果处理费时,一个线程接收数据,一个线程处理数据是推荐的方法,两个线程共享一个队列,注意同步。
ProgrameMan 2006-11-10
  • 打赏
  • 举报
回复
你看看吧

int nRead = 0, nLeft = 0, nBytes = 0;

nLeft = NUM_BYTES_REQUIRED; //要求读取的数据长度
while(NUM_BYTES_REQUIRED){
....................
nRead = recv(sock, &(buf[nBytes],nLeft,0);
....................
nLeft -= nRead;
nBytes += nRead;
}
ProgrameMan 2006-11-10
  • 打赏
  • 举报
回复
这样是不行的
baiyingby 2006-11-10
  • 打赏
  • 举报
回复
如何解决粘包问题,我认为尽量及时把传过来的数据接收,不让数据排队等待,就可以了。
ProgrameMan 2006-11-10
  • 打赏
  • 举报
回复
粘包在使用TCP通讯时是无法完全避免的,你需要自己分解粘在一起的数据
ProgrameMan 2006-11-10
  • 打赏
  • 举报
回复
个人理解:

这个问题不是单存让 处理数据快一些就可以完全避免的,要想治本还是要解决粘包的问题。

18,356

社区成员

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

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