问题描述
|
我在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中。
对不起我的英语不好。