【问题标题】:Boost sockets - client is not receiving all bytes from serverBoost sockets - 客户端没有从服务器接收所有字节
【发布时间】:2013-01-24 09:25:56
【问题描述】:

我正在使用 C++ 开发应用程序,但在使用 boost 套接字时遇到了一些困难。服务器发送图像,但客户端并未收到所有字节;客户端总是比服务器发送的少大约 500 个字节。下面提供程序运行的相关代码和截图。

服务器代码:

int sent = boost::asio::write(*socket, response, boost::asio::transfer_all(), error);
std::cout << "Sent: " << sent << std ::endl;

客户端代码(我知道如果服务器发送的总字节数可以被 10000 整除,read_some 将阻塞;此代码仅用于测试):

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;

服务器截图:

客户端截图:

感谢您的宝贵时间;任何帮助或建议将不胜感激。

【问题讨论】:

    标签: c++ networking boost boost-asio


    【解决方案1】:

    无法保证您会收到 10000 字节的完整缓冲区。

    我推荐以下方法:

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

    【讨论】:

    • 我先发送大小,然后在一个流中发送数据。但是,我使用换行符来分隔数据的大小。一旦我删除了换行符,它就可以正常工作。谢谢
    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 2019-01-09
    相关资源
    最近更新 更多