QTcpSocket,等待服务器

时间:2011-05-23 09:11:24

标签: qt

我正在使用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 个答案:

答案 0 :(得分:2)

在客户端上,使用connectToHost()。听取hostFound()connected()取得成功,并error()取消失败。失败时,只需尝试再次连接(可能在1到10秒后,使用QTimer::singleShot()。)

这将允许您的应用程序的其余部分在连接尝试时继续运行。

答案 1 :(得分:0)

如果没有Qt :: QueuedConnection连接选项,在连接到error()的插槽内简单调用connectToHost不起作用。见Jonas Mauricio Gastal的帖子QTcpSocket reconnect after connection lost stay in ConnectingState。 抱歉我的英文。