c语音网络程序中用 recv函数接受数据会遇到不知道对方发送多长数据的问题

walkany 2020-10-31 08:17:24
如果不知道对方发送多少数据,recv就有可能遇到这次recv恰好把数据接受完了,但又不知道,从而再次recv,但是recv是阻塞的,只要对方不发送数据,recv就始终阻塞等待,就像程序死掉一样。
请问大家是怎么解决这个问题的呢?
...全文
202 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2020-10-31
  • 打赏
  • 举报
回复
加一个头部信息,来确定具体该获得具体多长的消息。
juelianhuayao 2020-10-31
  • 打赏
  • 举报
回复
比较省事的方法就是用一些类似libuv、libev等库,直接在回调函数中处理数据,不需要去关心数据到底啥时候来。 或者用select、epoll等来管理套接字。单独开线程接收也可以。
棉猴 2020-10-31
  • 打赏
  • 举报
回复
用多线程吧,把接受单独放一个线程。或者使用套接字的非阻塞模式
  • 打赏
  • 举报
回复
在独立的线程中等待。另外,如果是tcp的,最好定义一个数据结构,指定长度。因为tcp的流会连续到来,有可能尾巴上有半个包
walkany 2020-10-31
  • 打赏
  • 举报
回复
哪位给个答案
xian_wwq 2020-10-31
  • 打赏
  • 举报
回复
业务数据加上个包头,在包头中记录数据长度。 接收数据后先解析数据长度,没有接收足长则继续。否则就退出循环。
zgl7903 2020-10-31
  • 打赏
  • 举报
回复
recv 最后参数 用 MSG_PEEK, 可以窥探是否有数据   

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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