Если мой клиент сначала работает, а затем запускает сервер, сервер подключится.Но если я выключу сервер (с работающим клиентом) и снова включу сервер, он не будет повторно подключаться к клиенту.Когда Сервер отключается, я отменяю, выключаю и закрываю сокет.Однако, когда сервер снова запускается, метод Connect не запускается снова.У меня нет доступа к коду сервера.Я не уверен, на каком уровне обнаружен этот запрос на подключение.
Фрагменты кода: RadaClient наследует Client ...
Конструктор для RadaClient:
RadaClient::RadaClient(const std::string& aHostIp,
const int& aHostPort) :
mIoServiceWorkPtr(std::unique_ptr<boost::asio::io_service::work>(new boost::asio::io_service::work(mIoService))),
mIoThreadPtr(std::unique_ptr<boost::thread>(new boost::thread(boost::bind(&boost::asio::io_service::run, &mIoService)))),
Client(aHostIp, aHostPort, mIoService)
{
std::cout << "host ip "
<< aHostIp
<< " host port "
<< aHostPort << std::endl;
}
class Client
{
public:
bool Connect()
{
_mConnected = false;
while (!_mConnected)
{
try
{
tcp::resolver resolver(_mSocket.get_io_service());
tcp::resolver::query query(tcp::v4(), _mHost,
boost::lexical_cast<std::string> (_mPort));
tcp::resolver::iterator iterator resolver.resolve(query);
_mSocket.connect(*iterator);
_mConnected = true;
}
catch (std::exception& e)
{
std::cout << "Caught exception \"" << e.what() << "\"\n";
// printf("connect attempt failed\n");
_mConnected = false;
}
}
std::cerr << "TCP Client Successfully Connected... " << std::endl;
_mMessageHandleThreadPtr.reset(new
boost::thread(boost::bind(&Client::_MessageHandleThread, this)));
_mReadMessageThreadPtr.reset(new boost::thread(boost::bind(&Client::_ReadMessageThread, this)));
return true;
}
void Disconnect()
{
std::cerr << "TCP Client";
if (_mConnected)
{
_mConnected = false;
try
{
_mSocket.cancel();
_mSocket.shutdown(_mSocket.shutdown_both);
_mSocket.close();
}
catch (std::exception& e)
{
std::cerr << "Exception Disconnect(): "
<< e.what() << "\n";
}
}
std::cerr << " Disconnected" << std::endl;
}