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++ - 修改 C++ 算法 STL 中的 make_heap 以作为最小堆工作

java - 尝试提供存储在最初由 canvas.toDataURL() 创建的 GAE 数据存储中的图像

java - 在 Java 中将客户端连接到多个服务器

c++ - 针对特定接口(interface)的模板函数专门化

c++ - avcodec_send_frame 返回 "invalid argument"

.net - 适用于 c/c++ 的 ReSharper

Android:如何将整个 ImageView 转换为位图?

image - 使用任意 QML 项作为缓存图像源

c++ - 中断 accept()

java - 如何通过 tcp 套接字将对象发送到 android 设备?