社区
C语言
帖子详情
c语音网络程序中用 recv函数接受数据会遇到不知道对方发送多长数据的问题
walkany
2020-10-31 08:17:24
如果不知道对方发送多少数据,recv就有可能遇到这次recv恰好把数据接受完了,但又不知道,从而再次recv,但是recv是阻塞的,只要对方不发送数据,recv就始终阻塞等待,就像程序死掉一样。
请问大家是怎么解决这个问题的呢?
...全文
202
7
打赏
收藏
c语音网络程序中用 recv函数接受数据会遇到不知道对方发送多长数据的问题
如果不知道对方发送多少数据,recv就有可能遇到这次recv恰好把数据接受完了,但又不知道,从而再次recv,但是recv是阻塞的,只要对方不发送数据,recv就始终阻塞等待,就像程序死掉一样。 请问大家是怎么解决这个问题的呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
真相重于对错
2020-10-31
打赏
举报
回复
加一个头部信息,来确定具体该获得具体多长的消息。
juelianhuayao
2020-10-31
打赏
举报
回复
比较省事的方法就是用一些类似libuv、libev等库,直接在回调函数中处理数据,不需要去关心数据到底啥时候来。 或者用select、epoll等来管理套接字。单独开线程接收也可以。
棉猴
2020-10-31
打赏
举报
回复
用多线程吧,把接受单独放一个线程。或者使用套接字的非阻塞模式
跑马溜溜的山上
2020-10-31
打赏
举报
回复
在独立的线程中等待。另外,如果是tcp的,最好定义一个数据结构,指定长度。因为tcp的流会连续到来,有可能尾巴上有半个包
walkany
2020-10-31
打赏
举报
回复
哪位给个答案
xian_wwq
2020-10-31
打赏
举报
回复
业务数据加上个包头,在包头中记录数据长度。 接收数据后先解析数据长度,没有接收足长则继续。否则就退出循环。
zgl7903
2020-10-31
打赏
举报
回复
recv 最后参数 用 MSG_PEEK, 可以窥探是否有数据
C语言模拟TCP通信-------收发
数据
C语言模拟TCP通信-------收发
数据
在linux
中用
C语言实现ping命令
运用C语言编写模拟常用网络命令ping命令实现一个基于linux原始套接字和ICMP协议的ping
程序
。该
程序
能用于检测主机或路由器工作是否正常。
程序
中主要的
函数
void alarm_handler(int); /*SIGALRM处理
程序
*/ void int_handler(int); /*SIGINT处理
程序
*/ void set_sighandler(); /*设
C语言socket传输文件
TCP服务端和TCP客户端编程,完成文件传输(客户端输入文件名,服务端接收文件
数据
并保存至服务端本地)
【socket】C语言的Socket网络编程
考虑到了关闭连接退出机制,多线程编程,以及线程参数的传递,值得学习 服务端 #include #include #include #include #include #include #include #include #include #include #include #define MAXCONN 2 #define ERRORCODE -1 #defin...
计算机网络课程设计--基于TCP协议网上聊天
程序
--python实现带图形界面--socket--多线程
在科学技术飞速发展的时代,计算机网络显示了它蓬勃发展的生命力,越来越多的人已经离不开网络了,无论是工作、学习还是休闲娱乐,这些都已经和网络息息相关。本次计算机网络课程设计是基于TCP协议网上聊天
程序
,
程序
中用
到了套接字socket、多线程thread和Python自带的图形界面库Tkinter,在密码保存和传递方面用到了MD5算法,该
程序
的功能:用户注册、用户登录、显示在线用户和支持多人聊天。
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章