DLib - 为什么start_async()不接受后台线程中的连接?

时间:2016-07-06 16:50:10

标签: c++ sockets server client dlib

这是我第一次使用DLib。我的目标是拥有一个后台服务器,我可以同时连接许多客户端线程。根据文档,chan2应该是start_async()具体实现的方式,所以这就是我设置服务器的方式。

dlib::server

以下是我的class TestServer : public dlib::server { private: void on_connect(dlib::connection& c) { cout << "Hi." << endl; } public: void start_server() { set_listening_ip("127.0.0.1"); set_listening_port(4790); start_async(); } };

ServerMain.cpp

这是我的int main(int argc, char** argv) { TestServer ts; try { ts.start_server(); } catch(exception& e) { cerr << e.what() << endl; } return 0; }

ClientMain.cpp

启动服务器后,任何与客户端连接的尝试都会导致异常:

int main(int argc, char** argv) { try { iosockstream stream("127.0.0.1:4790"); cout << "CLIENT - Connected." << endl; } catch(exception& e) { cerr << e.what() << endl; } cout << "Done." << endl; return 0; }

此外,unable to connect to '127.0.0.1:4790'lsof都不会显示正在侦听端口netstat的任何进程。 我做错了什么?

我在使用4790编译的Mac OS X 10.9.5上。

1 个答案:

答案 0 :(得分:1)

从dlib :: server的start_async()文档中可以看出

does NOT block.  That is, this function will return right away and
the server will run on a background thread until clear() or this
object's destructor is called (or until some kind of fatal error
occurs). 

因此,您的服务器程序会立即终止,因为您让程序结束(您离开main())。你必须做点什么来保持你的程序活着。例如,调用服务器的start()而不是start_async()。