QTcpSocket, ждать сервера - PullRequest
       1

QTcpSocket, ждать сервера

1 голос
/ 23 мая 2011

Я делаю простую программу клиент-сервер, используя QTcpServer, QTcpSocket без использования потока, в fedora. Я хочу сделать свое приложение независимым от последовательности того, что выполняется первым, клиента или сервера. Мое приложение работает хорошо, когда я сначала запускаю сервер, но у меня нет никакого способа заставить клиента ждать, пока сервер не запускается и не подключается с служить в качестве запуска сервера. Я использовал waitForConnection (), но это не помогает. Пожалуйста, дайте несколько предложений.

TcpClient::TcpClient(QWidget *parent) : QMainWindow(parent),
ui(new Ui::TcpClient) 

{
ui->setupUi(this);
tcpSocket= new QTcpSocket(this);
tcpSocket->connectToHost(QHostAddress::LocalHost,6178);     
connect(tcpSocket, SIGNAL(connected()), this, SLOT(sendRequest()));
connect(tcpSocket, SIGNAL(disconnected()),this, SLOT(connectionClosedByServer()));      
connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)),this, SLOT(error())); 
.
.
..

}

void TcpClient::error() 

{ 
 ui->lStatus->setText(tcpSocket->errorString());
 closeConnection(); 
 tcpSocket->connectToHost(QHostAddress::LocalHost,6178);
 } 

Ответы [ 2 ]

2 голосов
/ 23 мая 2011

На клиенте используйте connectToHost().Слушайте hostFound() или connected() для успеха и error() для неудачи.В случае неудачи просто попробуйте подключиться снова (возможно, через 1–10 секунд, используя QTimer::singleShot().)

Это позволит продолжить работу остальной части вашего приложения во время попыток подключения.

0 голосов
/ 13 августа 2012

Простой вызов connectToHost из слота, подключенного к error (), не работает для меня без опции подключения Qt :: QueuedConnection.См. Сообщение Джонаса Маурисио Гастала QTcpSocket переподключен после потери соединения, оставаясь в ConnectingState Извините за мой английский.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...