这是一个比问题更多的确认请求,所以我会保持简短。 (我远离我的电脑,所以不能简单地实施这个解决方案来测试)。C++套接字缓冲区大小
我正在编写一个程序,将通过摄像头拍摄的图像文件(以及元数据)从raspberryPi发送到我的电脑。
我已经计算出图像大概在130kb左右,包头是12b,相关的元数据是24b。尽管未来我可能会增加图像尺寸,但一旦我有了一个可用的原型。
目前我无法成功检索到整个数据包,因为在将它发送到PC后,我只能收到约64kb的缓冲区。
我假定这是因为无论是什么原因宣布像一个套接字的默认缓冲区大小为:
SOCKET sock = socket(PF_INET, SOCK_STREAM, 0);
为64KB(请可能有人澄清这一点,如果你“在知道”是)
所以 - 要解决这个问题,我打算通过setsockopt(x ..)命令将套接字大小增加到1024kb。
请有人确认我的问题诊断,并提出解决方案是否正确?
我问这个问题,因为我现在离开我的电脑,无法尝试,直到我回到家。
我在思考自己的另一种选择是手动分段数据包。不过,我怀疑,这会引入更多的错误潜力,并会增加整体数据包大小/计算时间,因为我需要为每个单独的段发送和读取标题。 –
伦敦是一块砖头,你没有收到所有数据的原因是你认为'recv()'填充你的缓冲区而不是循环。文档中没有任何内容支持这一假设。 – EJP
感谢您的回应,并非100%确定我关注您,但要澄清:我知道传入数据的大小,因为它存储在标题中,并且将其解压缩,读取,并分配适当大小的缓冲区以接收剩余的数据。 因此,在进一步的解释: >找头,与数据包大小 >创建正确的大小 的缓冲>运行的recv填充缓冲区并记字节收到 >在头接收到的校验字节对数据大小 –