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

recv function for TCP socket in C++

本文关键字:recv 函数 套接字 TCP C++      更新时间:2023-10-16

我是套接字编程的新手。我有一个用c++编写的客户端应用程序,可以连接到相机。然后Camera发送0-1460之间的帧分组。我已使用recv函数接收数据包。我看到了很多问题,其中明确提到recv函数返回接收到的字节,但在我的情况下,recv函数会返回写在recv函数的第三个参数中的值,即len。它们也是如此,通过它们我可以找到实际接收到的字节。

我甚至尝试使用char*,但这根本不起作用。

所以,任何人都请告诉我解决方案。任何帮助都是可观的。提前感谢

char *buf = new char[1461];
int bytes = recv(sock, buf, 2000, 0);
printf("%d", bytes);

总是印2000。因为在buf中的有效字节之后,它们是未知的字节,这会导致意外的Image。

首先,您的代码有一个错误(导致未定义的行为(。你已经分配了1461个字节,但你正试图读取更多:

应该是这样的:

vector<char> buf(5000); // you are using C++ not C
int bytes = recv(sock, buf.data(), buf.size(), 0);
std::cout << bytes;

第二个结果如预期。相机发送的数据比2000字节多得多,所以我对读取的字节数覆盖整个请求大小并不感到惊讶。