未调用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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...