在课堂上重新初始化asio :: socket

时间:2013-03-14 23:12:00

标签: c++ oop boost boost-asio initialization-list

我发现,如果我想使用boost::socket作为类成员,我必须使用初始化列表来定义它,并且必须在构造函数调度之前定义
这意味着,我必须用一些伪参数来证明它的构造函数,当我有我需要的数据时,我需要再次重新初始化它。

client.hpp

class SocketClient {
    private:
       int port; //Port, currently unused
       boost::asio::io_service io_service;  //This is my "dummy" parameter
       boost::asio::ip::tcp::resolver::iterator endpoint_iterator;
       boost::asio::ip::tcp::socket sock; //Socket class instance

    public:
       void init(const char*, const char* );
       SocketClient::SocketClient():sock(io_service){};  //Giving empty "io_service" to  the "sock"
       bool read(int bytes, char *text);
       bool send(int length, char *text);
       bool send(std::string text);
       unsigned int timeout;
};

稍后,当调用init()方法时,我需要为sock提供初始化io_service。我不知道该怎么做:

client.h

void SocketClient::init(const char* ip_a, const char* port_a) {
    boost::asio::ip::tcp::resolver resolver(io_service);
    boost::asio::ip::tcp::resolver::query query(ip_a, port_a);
    boost::asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
    //Error (unsuported operator =):
    sock=boost::asio::ip::tcp::socket(io_service);
    //Error (term does not evaluate to a function taking 1 arguments):
    sock(io_service);
}

Here you can see whole project,没有删除。

1 个答案:

答案 0 :(得分:2)

您已经有套接字初始化,现在只需连接

tcp::resolver resolver(io_service);
tcp::resolver::query query(tcp::v4(), ip_a,port_a);
tcp::resolver::iterator iterator = resolver.resolve(query);
sock.connect(*iterator);