两个螺纹的增压套筒

boost sockets in 2 threads

本文关键字:两个      更新时间:2023-10-16

我使用的是boost套接字和boost线程。(同步套接字)。如果我理解正确的话,这个计划是行不通的。

using boost::asio::ip::tcp;
boost::asio::ip::tcp::socket *MySocket;
bool Key = true;
void Function1()
{
    try
    {
        boost::asio::io_service io_service;
        tcp::resolver resolver(io_service);
        boost::system::error_code error;
        boost::asio::ip::address address = boost::asio::ip::address::from_string(IP, error);
        tcp::endpoint ep(address, 1235);
        MySocket = new tcp::socket(io_service);
        MySocket->connect(ep);
        Key = false;
    }
    catch(std::exception e)
    {
        std::cout<<e.what;
    }
}
void Function2()
{
    boost::array <char, 8> buf;
    size_t len = MySocket->read_some(boost::asio::buffer(buf), error);
    //Always len == 0 and buf.data() is MMMMMMM
}
void main()
{
    boost::thread Thread(&Function1);
    while(Key);
    Function2();
    MySocket->close();
}

您使用本地io_service创建套接字,function1返回后该套接字将被销毁。让它全球化。(当然,不要用这种方式设计真正的应用程序!坚持Asio文档中描述的方法。)