linux socket 如何接受多帧图像数据
时间:2011-06-15
来源:互联网
最近在做毕设,在开发板端已经能够采集到JPEG视频数据,请问如何在PC客户端接受数据呢呢?
客户端采用int recv( SOCKET s, char FAR *buf, int len, int flags ); 我采集到的图片大概32K,recv可以一次性全部接收吗?如果发送20帧,那么接受buf该如何定义?
客户端采用int recv( SOCKET s, char FAR *buf, int len, int flags ); 我采集到的图片大概32K,recv可以一次性全部接收吗?如果发送20帧,那么接受buf该如何定义?
作者: daisyzone 发布时间: 2011-06-15
这个。。
怎么接收得看你怎么发送,
recv是读取系统的缓冲区,这个缓冲区由内核来维护,当收到数据的时候内核会把数据追加到缓冲区中,读取之后清除。当然是可以一次读32K的,但是一般不建议一次读这么大数据量,因为读的数据越多越不容易知道错误什么时候发生,不能快速反应。
一般的做法是每次读4K左右然后自己缓存数据。
个人经验:传输一个有意义的大块数据时需要在传输时标明开始和结束,这样才能知道是否接收是一个完整的数据,如果不完整那么就说明这次会话基本上已经无法复原,就应当重新连接了。
怎么接收得看你怎么发送,
recv是读取系统的缓冲区,这个缓冲区由内核来维护,当收到数据的时候内核会把数据追加到缓冲区中,读取之后清除。当然是可以一次读32K的,但是一般不建议一次读这么大数据量,因为读的数据越多越不容易知道错误什么时候发生,不能快速反应。
一般的做法是每次读4K左右然后自己缓存数据。
个人经验:传输一个有意义的大块数据时需要在传输时标明开始和结束,这样才能知道是否接收是一个完整的数据,如果不完整那么就说明这次会话基本上已经无法复原,就应当重新连接了。
作者: wzzww 发布时间: 2011-06-16
传输数据时可以明确指定长度,这样接收方可以根据这个长度来判断是否接收完整
作者: justkk 发布时间: 2011-06-16
对于这么大的数据,通常应该循环调用recv多次接收,直到收到的数据长度之和与发送方指定的长度一致为止
作者: justkk 发布时间: 2011-06-16
int m = 0;
int n;
while ( m < 32K )
{
n = recv();
if ( n > 0 )
m+=n;
}
int n;
while ( m < 32K )
{
n = recv();
if ( n > 0 )
m+=n;
}
作者: ma100 发布时间: 2011-06-16
n = recv( buf + m , xxx, 32K );
作者: ma100 发布时间: 2011-06-16
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28