QTcpSocket,等待服务器

问题描述

| 我在fedora中使用QTcpserver和QTcpsocket制作了简单的客户端服务器程序,而没有使用线程。我想使我的应用程序独立于先运行的顺序,客户端还是服务器的顺序。当我先启动服务器时,我的应用程序运行良好,但是当服务器未启动并连接时,我没有任何办法让客户端等待与充当服务器启动。我使用了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()),SLOT(connectionClosedByServer()));      
connect(tcpsocket,SIGNAL(error(QAbstractSocket::SocketError)),SLOT(error())); 
.
.
..

}

void TcpClient::error() 

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

解决方法

在客户端上,使用
connectToHost()
。聆听
hostFound()
connected()
获得成功,并聆听
error()
获得失败。如果出现故障,请尝试重新连接(也许在1到10秒后,使用
QTimer::singleShot()
。) 这将使您的应用程序的其余部分在尝试进行连接时保持运行。     ,没有Qt :: QueuedConnection连接选项,从连接到error()的插槽中简单地调用connectToHost对我不起作用。连接丢失后,请参阅Jonas Mauricio Gastal QTcpSocket的重新连接,连接丢失后将停留在ConnectingState中。 对不起我的英语不好。