【发布时间】:2017-09-29 13:03:17
【问题描述】:
伙计们,我真的需要你们的帮助。我正在学习 boost::asio 并且我有 2 个问题我无法处理好几天...
下面是一个我自己做的简单回显服务器的例子:
int main(
{
// crate a server, binding it and listening connections
// acceptor server;
//socket client
server.async_accept(client, boost::bind(accept_handle, _1, &server, &client));
io_service.run();
return 0;
}
void accept_handle(const boost::system::error_code& eCode, boost::asio::ip::tcp::acceptor* server, boost::asio::ip::tcp::socket* client)
{
char data[43];
client->async_read_some(boost::asio::buffer(data, 20), boost::bind(read_handle, _1, _2, server, client));
}
void read_handle(const boost::system::error_code& eCode, size_t bytes)
{
char data_buf[20] = "hello";
client->async_write_some(boost::buufer(data, 5), boost::bind(write_handle, _1, _2, server, client));
}
void write_accept(const boost::system::error_code& eCode, size_t bytes)
{
boost::asio::ip::tcp::socket newConnection(server->get_ioservice)); // taking he io_service of the server
server->async_accept(newConnection, boost::bind(accept_handle, _1, server, client));
}
问题是服务器接受一个客户端,它不接受其他待处理的客户端..我在哪里做错了
注意:我在记事本中写了这段代码,如果有语法错误,请见谅。
提前感谢您的帮助!!!
【问题讨论】:
-
async_accept 将接受一个连接。您需要在
accept_handle函数中再次调用它。 -
Richard Hodges 你的意思是我需要在服务器从客户端读取数据时调用我的accept_handle 来接受另一个连接,但是为什么从write_handle 调用async_handle 是错误的???
标签: c++ boost-asio