我正在使用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);
}
答案 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。 抱歉我的英文。