大家。这是我的第一个问题,所以请不要因为我的经验不足而讨厌我。 我试图在一堆技术中写一个简单的信使:c++、cmake、qt、boost、docker。 概念是:
我编写了这个组件的主要部分,运行了 DB 并尝试将我的服务器连接到 DB,但每次我这样做 - 什么都没有发生。可能是我很愚蠢,但我在任何地方都找不到任何关于我的问题的信息。所以我决定在这里问一下。 这是连接的实现:
班级:
class Server : public ServerI {
private:
socket_ptr _sock;
io_service & _service;
size_t _port{};
ip::address _address;
ip::tcp::endpoint _ep;
std::map<size_t, Session &> _sessions;
public:
Server(io_service & service) : _service(service) {}
~Server() {
// "kill" all threads (sessions)
for (auto & s : _sessions) {
s.second.th.detach();
}
}
void waitForConnection() override;
void sessionHandler() override;
void connectToDB(const ConnectionInfo &c_inf = {"", 0}) override;
private:
void setEndpoint(const ip::tcp::endpoint & ep);
void connect();
void disconnect();
size_t request(const std::string & target);
std::string getResponse();
};
功能:
void Server::connectToDB(const ConnectionInfo &c_inf) {
std::cout << "begin" << std::endl;
ip::tcp::endpoint ep( ip::address::from_string(c_inf.s_ip), c_inf.port);
std::cout << ep.address() << " " << ep.port() << std::endl;
this->setEndpoint(ep);
std::cout << _ep << " " << _port << std::endl;
try {
this->connect();
} catch(...) {
std::cout << "connection error" << std::endl;
}
}
//===============================//
void Server::setEndpoint(const ip::tcp::endpoint & ep) {
_ep = ep;
_port = ep.port();
_address = ep.address();
std::cout << "ep, port, address are set" << std::endl;
_sock = socket_ptr(new ip::tcp::socket(_service));
}
void Server::connect() {
try {
// just a hardcode - tried to debug this
_sock->connect(ip::tcp::endpoint(ip::address::from_string("localhost:32769"), 5432)); //(_ep);
} catch (boost::system::system_error & err) {
std::cerr << "connection error: " << err.what() << std::endl;
return;
}
}
使用示例:
server->connectToDB({"0.0.0.0", 32769});
接受任何建议
我做了什么: 尝试硬编码地址和调试,但错误是由套接字库函数引起的,所以我不知道该怎么办。 可能仅仅运行容器是不够的,我必须设置数据库或其他什么。 可能是我连接的 ip/port 格式错误。