C++ 中 TCP 套接字的 recv 函数

recv function for TCP socket in C++

我是套接字编程的新手。我有一个用 C++ 编写的连接到相机的客户端应用程序。然后相机以 0 - 1460 之间的块的形式发送帧数据包。我使用 recv 函数接收数据包。我看到了很多问题,其中清楚地提到 recv 函数 return 接收到的字节,但在我的例子中,recv 函数 return 写入了 recv 函数的第三个参数中写入的值,即 len。他们也是如此,通过它我可以找到接收到的实际字节数。

我什至尝试使用 char* 但这根本行不通。

所以,任何人都请告诉我 solution.Any 帮助将是可观的。提前致谢

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 字节多得多,因此读取的字节数覆盖了整个请求的大小我并不感到惊讶。