首页 文章

C语言中TCP套接字的recv函数

提问于
浏览
0

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

  • 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字节,因此读取的字节数覆盖整个请求的大小并不奇怪 .

相关问题