私は単純なクライアントサーバープログラムを使っていますQTcpServer、QTcpSocket、スレッドを使用せずに、fedoraで。私は自分のアプリケーションを、最初に実行しているものとは独立して、クライアントまたはserver.Myアプリケーションが最初に起動するとうまく動作しますが、サーバが起動せず接続していない間はクライアントを待機させる方法がありませんサーバーの開始として機能します。私は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);
}
回答:
回答№1は2クライアントでは、connectToHost()
。聞く hostFound()
または connected()
成功のために error()
失敗の場合。失敗したら、もう一度接続してみてください(1〜10秒後、 QTimer::singleShot()
。)
これにより、接続の試行中にアプリの残りの部分を実行し続けることができます。
回答№2の場合は0
error()に接続されたスロット内からのconnectToHostの単純な呼び出しは、Qt :: QueuedConnection接続オプションなしでは動作しません。Jonas Mauricio Gastal ConnectingStateで接続が失われた後にQTcpSocketが再接続する。 私の英語には申し訳ありません。