我是套接字编程的新手。我有一个用C ++编写的客户端应用程序,用于连接相机。然后Camera以0-1460之间的块为单位发送帧数据包。我已经使用过recv函数来接收数据包。我看到了太多问题,其中明确提到recv函数返回接收到的字节,但在我的情况下,recv函数返回在recv函数的第3个参数中写入的值,即len。无论如何,我可以通过它们找到收到的实际字节。
我什至尝试使用char *,但什至不起作用。
因此,任何人都可以告诉我解决方案。任何帮助将是可贵的。在此先感谢
char *buf = new char[1461];
int bytes = recv(sock, buf, 2000, 0);
printf("%d", bytes);
始终打印2000。 因为在buf中的有效字节之后,它们是未知字节,导致出现意外的图像。
答案 0 :(得分:1)
首先,您的代码有一个错误(导致未定义的行为)。 您已经分配了1461个字节,但您尝试读取的内容更多:
它应该像这样:
vector<char> buf(5000); // you are using C++ not C
int bytes = recv(sock, buf.data(), buf.size(), 0);
std::cout << bytes;
第二结果是预期的。相机发送的数据超过了2000个字节,因此,读取的字节数涵盖了整个请求的大小,我并不感到惊讶。