DLib - 为什么 start_async() 不接受后台线程中的连接?
DLib - Why doesn't start_async() accept connections in a background thread?
这是我第一次尝试使用 DLib。我的目标是拥有一个可以同时连接到多个客户端线程的后台服务器。根据文档,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,用 -std=c++11 -DDLIB_NO_GUI_SUPPORT
编译。
从 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()。
这是我第一次尝试使用 DLib。我的目标是拥有一个可以同时连接到多个客户端线程的后台服务器。根据文档,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,用 -std=c++11 -DDLIB_NO_GUI_SUPPORT
编译。
从 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()。