用户名: 密码: 忘记密码? 注册
收藏此问题 发表新评论

linux socket 如何接受多帧图像数据

最近在做毕设,在开发板端已经能够采集到JPEG视频数据,请问如何在PC客户端接受数据呢呢?
客户端采用int recv( SOCKET s, char FAR *buf, int len, int flags ); 我采集到的图片大概32K,recv可以一次性全部接收吗?如果发送20帧,那么接受buf该如何定义?

昵称: daisyzone  时间: 2011-06-15 21:10:12
这个。。
怎么接收得看你怎么发送,
recv是读取系统的缓冲区,这个缓冲区由内核来维护,当收到数据的时候内核会把数据追加到缓冲区中,读取之后清除。当然是可以一次读32K的,但是一般不建议一次读这么大数据量,因为读的数据越多越不容易知道错误什么时候发生,不能快速反应。
一般的做法是每次读4K左右然后自己缓存数据。
个人经验:传输一个有意义的大块数据时需要在传输时标明开始和结束,这样才能知道是否接收是一个完整的数据,如果不完整那么就说明这次会话基本上已经无法复原,就应当重新连接了。
昵称: wzzww  时间: 2011-06-16 15:08:46
传输数据时可以明确指定长度,这样接收方可以根据这个长度来判断是否接收完整
昵称: justkk  时间: 2011-06-16 15:14:53
对于这么大的数据,通常应该循环调用recv多次接收,直到收到的数据长度之和与发送方指定的长度一致为止
昵称: justkk  时间: 2011-06-16 15:15:43
int m = 0;
int n;
while ( m < 32K )
{
  n = recv();
  if ( n > 0 )
  m+=n;
}
昵称: ma100  时间: 2011-06-16 16:05:01
n = recv( buf + m , xxx, 32K );
昵称: ma100  时间: 2011-06-16 16:06:03
发表评论
昵称:
内容:
验证: