gpt4 book ai didi

c++ - 在类中重新初始化 asio::socket

转载 作者:行者123 更新时间:2023-11-28 03:21:04 27 4
gpt4 key购买 nike

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

客户端.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。我不知道该怎么做:

客户端.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 , 没有任何删除。

最佳答案

你已经初始化了sokect,现在只需要连接

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);

关于c++ - 在类中重新初始化 asio::socket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15421934/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com