C++中TCP套接字的recv函数
recv function for TCP socket in C++
我是套接字编程的新手。我有一个用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字节多得多,所以我对读取的字节数覆盖整个请求大小并不感到惊讶。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 为什么套接字中的 recv() 函数不返回任何内容?
- C++中TCP套接字的recv函数
- 为什么 sys 套接字 recv 函数不填充数据但返回字节长度?
- recv (Winsock) 函数挂起,但数据可用
- 是否可以将套接字设置为仅针对recv()函数的非阻塞套接字
- 如何使用c++使用recv()函数接收大数据
- 在之前不知道消息长度的情况下处理阻塞的 recv() 函数,并且不想使用 asy I/O
- 线程由函数 send() 或 ACE_SOCK_Stream的 recv() 停止
- 如何在 linux C 中解锁 recv() 或 recvfrm() 函数
- recv函数在使用两次时失败
- C++"recv"函数在数据接收时如何起作用?它能收到部分"packet"吗?
- 通过 WinSock2 API 的单次调用"recv()"函数调用获取全部接收字节
- 套接字编程C/ c++ - recv函数在服务器端挂起
- 如何使c++中的recv()函数超时?
- recv 在收到 transmitFile() 函数后没有停止
- recv函数总是给我相同的缓冲区
- Socket c++: recv函数返回-1
- 将超时设置为recv函数