在C ++中用于TCP套接字的recv函数

时间:2018-07-13 05:49:40

标签: c++ image sockets tcp recv

我是套接字编程的新手。我有一个用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中的有效字节之后,它们是未知字节,导致出现意外的图像。

1 个答案:

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