我们的 Windows 客户端应用程序通过如下函数连接到同一 LAN 上的服务器boost::asio::ip::tcp::socket::async_connect
:
std::string ip, port;
boost::asio::io_service io;
boost::asio::ip::tcp::socket client( io );
boost::asio::ip::tcp::endpoint endpoint( boost::asio::ip::address::from_string( ip ), port );
// synchronous. (Does not return in problematic case and callback not called)
client.async_connect( endpoint, boost::bind(&CallbackFunction, this, ip, port, boost::asio::placeholders::error ) );
偶尔,而且非常随机,无论客户端重新启动多少次,一个客户端都无法访问服务器。唯一的解决方案是重新启动工作站(Windows 7 或 10)。鉴于客户端和服务器位于同一个 LAN 上,并且 LAN 上的其他客户端能够连接到服务器,我不知道这种间歇性故障的原因。可能是一些被缓存的本地路由吗?如果是这样,我可以在终端中运行一个命令来刷新路由或释放适当的系统资源。