我是套接字编程的新手。我有一个用 C++ 编写的连接到相机的客户端应用程序。然后相机以 0 - 1460 之间的 block 的形式发送帧数据包。我使用 recv 函数接收数据包。我看到很多问题,其中明确提到 recv 函数返回接收到的字节,但在我的例子中,recv 函数返回在 recv 函数的第三个参数中写入的值,即 len。无论如何,我可以通过它们找到接收到的实际字节数。
我什至尝试使用 char* 但那根本行不通。
所以,任何人都请告诉我解决方案。任何帮助都将不胜感激。提前致谢
char *buf = new char[1461];
int bytes = recv(sock, buf, 2000, 0);
printf("%d", bytes);
始终打印 2000。 因为在 buf 中的有效字节之后,它们是导致意外图像的未知字节。
最佳答案
首先,您的代码有一个错误(导致未定义的行为)。 您已经分配了 1461 个字节,但您正在尝试读取更多内容:
它应该是这样的:
vector<char> buf(5000); // you are using C++ not C
int bytes = recv(sock, buf.data(), buf.size(), 0);
std::cout << bytes;
其次结果符合预期。相机发送的数据比 2000 字节多得多,因此读取的字节数覆盖了整个请求的大小我并不感到惊讶。
关于c++ - C++ 中 TCP 套接字的 recv 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51318393/