Boost套接字-客户端未从服务器接收所有字节 我正在开发一个C++应用程序,在升压插座上有一些困难。服务器发送图像,但并非所有字节都被客户端接收;客户端收到的数据总是比服务器发送的数据少500字节左右。下面提供了程序运行的相关代码和屏幕截图

Boost套接字-客户端未从服务器接收所有字节 我正在开发一个C++应用程序,在升压插座上有一些困难。服务器发送图像,但并非所有字节都被客户端接收;客户端收到的数据总是比服务器发送的数据少500字节左右。下面提供了程序运行的相关代码和屏幕截图,c++,networking,boost,boost-asio,C++,Networking,Boost,Boost Asio,服务器代码: int sent = boost::asio::write(*socket, response, boost::asio::transfer_all(), error); std::cout << "Sent: " << sent << std ::endl; int sent=boost::asio::write(*套接字,响应,boost::asio::transfer_all(),错误); std::cout不能保证您将收到10000字节

服务器代码:

int sent = boost::asio::write(*socket, response, boost::asio::transfer_all(), error);
std::cout << "Sent: " << sent << std ::endl;
int sent=boost::asio::write(*套接字,响应,boost::asio::transfer_all(),错误);

std::cout不能保证您将收到10000字节的完整缓冲区

我建议采用以下方法:


要发送不带任何显式终止符的二进制数据,首先发送其大小,然后才发送数据本身。在这种情况下,客户机将知道该数据块中应该接收多少数据。

我先发送大小,然后在一个流中发送数据。但是,我使用了一个换行符来分隔数据的大小。一旦我删除了换行符,它就工作得很好。非常感谢。
int len = 0;
int count = 0;
do {
    len = socket->read_some( boost::asio::buffer( imageData, 10000 ) ); 
    count += len;
    std::cout << "len: " << len << std::endl;
    std::cout << "count: " << count << std::endl;
} while(len == 10000);

std::cout << "Image Received of size: " << count << std::endl;