微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

未调用async_read处理程序

如何解决未调用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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?