如何解决未调用async_read处理程序
我尝试制作TCP异步服务器,但是async_read函数遇到一些困难。永远不会调用处理程序async_read函数。我使用此命令在服务器的套接字“ nc -C 127.0.0.1 4242”上进行写。您能向我解释我不理解或犯了什么错误吗?感谢您的帮助。
ChatSession.cpp
ChatSession::ChatSession(boost::asio::io_context& ioc)
: __socket(ioc)
{
}
ChatSession::pointer ChatSession::create(boost::asio::io_context& ioc)
{
return pointer(new ChatSession(ioc));
}
tcp::socket& ChatSession::socket()
{
return this->__socket;
}
void ChatSession::handle_start()
{
}
void ChatSession::start()
{
std::string buffer = "Bienvenue\n";
boost::asio::async_write(__socket,boost::asio::buffer(buffer),boost::bind(&ChatSession::handle_start,shared_from_this()));
readHeader();
}
void ChatSession::handleReadHeader(const boost::system::error_code& error,std::size_t byte_transferred)
{
if (!error && this->__readMessage.decodeHeader()) {
std::strcpy(__readMessage.getData(),__test.data());
std::cout << __readMessage.getData() << std::endl;
readBody();
} else {
std::cerr << "Erreur" << std::endl;
}
}
void ChatSession::readHeader()
{
__test.resize(6);
boost::asio::async_read(__socket,boost::asio::buffer(__test),boost::bind(
&ChatSession::handleReadHeader,shared_from_this(),boost::asio::placeholders::error,}
Tcpserver.cpp:
Tcpserver::Tcpserver(boost::asio::io_context& io_context,int port)
: __acceptor (io_context,tcp::endpoint(tcp::endpoint(tcp::v4(),port)))
{
startAccept();
}
void Tcpserver::startAccept()
{
ChatSession::pointer newConnection = ChatSession::create(__io_context);
__acceptor.async_accept(newConnection->socket(),boost::bind(&Tcpserver::handle_accept,this,newConnection,boost::asio::placeholders::error));
}
void Tcpserver::handle_accept(ChatSession::pointer newConnection,const boost::system::error_code& error)
{
if (!error) {
newConnection->start();
startAccept();
}
}
main.cpp:
int main(int ac,char** av) {
try {
boost::asio::io_context io_context;
Tcpserver server(io_context,4242);
io_context.run();
} catch(const std::exception& e) {
std::cerr << e.what() << std::endl;
}
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。