我在Fedora中使用QTcpServer,QTcpSocket與不使用線程來製作簡單的客戶端服務器程序。我想讓我的應用程序獨立於首先運行的客戶端或服務器的順序。當我首先啓動服務器時,我的應用程序運行良好,但我無法讓客戶端等待,而服務器未啓動並連接用作服務器啓動。我用waitForConnection(),但它沒有幫助。 請給出一些建議。QTcpSocket,等待服務器
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);
}
它的工作原理。如果我在錯誤處理插槽中寫入連接代碼,但安全還是好?我的代碼看起來像是 TcpClient :: TcpClient(QWidget * parent): QMainWindow(parent), ui(new Ui :: TcpClient) ui-> setupUi(this); tcpSocket = new QTcpSocket(this); tcpSocket-> connectToHost(QHostAddress :: LocalHost,6178); – anj 2011-05-23 09:55:08
connect(tcpSocket,SIGNAL(connected()),this,SLOT(sendRequest())); (tcpSocket,SIGNAL(disconnected()),this,SLOT(connectionClosedByServer())); (tcpSocket,SIGNAL(error(QAbstractSocket :: SocketError)),this,SLOT(error())); void TcpClient :: error() ui-> lStatus-> setText(tcpSocket-> errorString()); closeConnection(); tcpSocket-> connectToHost(QHostAddress :: LocalHost,6178); } – anj 2011-05-23 10:03:35
@anjali:Argh。請不要在評論中發佈代碼。閱讀幾乎是不可能的。 :) ...無論如何,我會寫一個名爲'tryConnect()'的插槽,它調用'connectToHost()'。然後,當error()被髮信號(如果錯誤是你只是想重試'),我會使用QTimer :: singleShot()通過計時器發信號通知那個插槽。 – Macke 2011-05-23 11:15:38