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

标签 c++ image sockets tcp recv

我是套接字编程的新手。我有一个用 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/

相关文章:

c++ - STL 容器有单元测试吗?

c++ - std::vector<uchar> 到 char* 数据丢失

java - 这可以用套接字实现吗?

C#从UDP消息中获取发件人地址

java - 使用套接字将 .jpg 从 Android 发送到 C++

c++ - 标识符 "__readgsqword"未定义 - Visual Studio 2017

c++ - 如何使用删除删除成语从结构 vector 中删除值?

java - 如何在JRadioButton上设置图像和文本?

javascript - 缩小图像和 div 高度的问题 - CSS/

java - 调整屏幕上绘制的图像的大小,而不更改 RGB 像素阵列的大小