c++ - boost asio 中具有异步功能的坏字符

标签 c++ sockets boost boost-asio

我在 boost::asio 中遇到数据传输问题。 使用以下代码:

服务器.cpp

void        Server::accept(void)
{
    Network::ptr connection = Network::create(this->my_acceptor.get_io_service());
    this->my_acceptor.async_accept(connection->getSocket(), bind(&Server::endCmd, this, connection, placeholders::error));
}

void        Server::endCmd(Network::ptr connection, const boost::system::error_code& error)
{
    if (!error)
        {
            connection->Swrite("BIENVENUE");
            this->accept();
        }
}

网络.cpp

void        Network::Sread(void)
{
    async_read(this->socket, buffer(this->rbuffer), bind(&Network::endRead, shared_from_this(), placeholders::error));
}

void            Network::endRead(const error_code& error)
{
    if (!error)
        {
            this->rcv_msg = this->rbuffer.c_array();
            std::cout << this->rcv_msg << std::endl;
            this->Sread();
        }
}

void            Network::Swrite(std::string msg)
{
    this->msg = msg;
    async_write(this->socket, buffer(this->msg, (int)this->msg.size()), bind(&Network::endWrite, shared_from_this(), placeholders::error));
}

void            Network::endWrite(const error_code &error)
{
    if (!error)
    {
        this->Sread();
    }
}

tcp::socket&    Network::getSocket(void)
{
    return (this->socket);
}

Network::ptr                Network::create(io_service &ios)
{
    return (ptr(new Network(ios)));
}

当我用 telnet 向服务器发送类似“Hello world”的字符串时,他写入以下内容:bug with my serveur

谁能告诉我为什么服务器写了很多未知字符?

最佳答案

我相信您的 readHandler (Network::endRead()) 缺少参数。无法确定从流中读取了多少字节。我的回调通常是这样的(但我调用了 async_read_some()):

void HandleAsioRead(const boost::system::error_code& rErrorCode,
                    std::size_t nBytesTransferred)

然后我会在打印之前空终止我从流中读取的字符串。

编辑: 我对 async_read_some() 的调用如下所示:

    m_Socket.async_read_some(
        asio::buffer(m_RawBuffer, MaxBufferSize),
        bind(&HandleAsioRead,
             this,
             asio::placeholders::error,
             asio::placeholders::bytes_transferred));

关于c++ - boost asio 中具有异步功能的坏字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8152562/

相关文章:

未分配正在释放的 C++ 指针(可能是 unique_ptr 或 boost::ublas 的问题)

c++ - Code::Blocks 和 boost 1.55:存在动态库时不使用静态库

linux - UDP 通信在 Linux 上丢失,在使用 C# .NET Core 2.1 时,与 Windows 相比, "UDP sockets"在 Linux 上的管理方式是否不同?

c++ - 抑制来自套接字的 "Operation not permitted"错误

mysql - 无法连接mysql

c++ - boost::asio::io_service 在 win_mutex 锁中崩溃

c++ - 理解 boost::disjoint_sets

如果对象被删除,C++ 使所有指针无效

C++ Socks5 通信问题

c++ - R CMD SHLIB 使用 RcppArmadillo 编译错误