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

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

作者: daisyzone   发布时间: 2011-06-15

这个。。
怎么接收得看你怎么发送,
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;
}

作者: ma100   发布时间: 2011-06-16

n = recv( buf + m , xxx, 32K );

作者: ma100   发布时间: 2011-06-16