我在 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”的字符串时,他写入以下内容:
谁能告诉我为什么服务器写了很多未知字符?
最佳答案
我相信您的 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/