2012-11-16 26 views
1

我只是做了自己的實現QTcpServer既可和超載incomingConnection功能。我怎樣才能訪問的QThread在QTcpServer既可

void Server::incomingConnection(int handle) //Server inherits from QTcpServer 
{ 
    qDebug()<<"Server::incomingConnection"<<handle; 
    Thread *thread = new Thread(handle,this); 
    connect(thread,SIGNAL(finished()),this,SLOT(deleteLater())); 
    thread->start(); 
} 

在線程我做以下事情:

void Thread::run() 
{ 
    qDebug() << m_socketDescriptor << "Starting Thread"; 
    m_socket = new QTcpSocket(); 
    if(!m_socket->setSocketDescriptor(m_socketDescriptor)) 
     return; 

    connect(m_socket,SIGNAL(readyRead()),this,SLOT(readyRead())); 
    connect(m_socket,SIGNAL(disconnected()),this,SLOT(disconnected())); 

    qDebug() << m_socketDescriptor << "Client connected"; 

    exec(); 
} 

現在我已經一個多線程的服務器。

但我怎麼可以訪問連接的客戶端,並通過發送他們的數據。 gui?

預先感謝您!

問候

+0

你跟蹤不知何故連接? –

回答

1

您需要使用一些「QIODevice」功能,如write<<將數據發送到客戶端是對的與QTcpSocket的另一端。

因此,如果您正在向瀏覽器客戶端提供網頁,那麼您首先需要監聽(或使用讀取命令)至request,然後根據您使用的協議通過相應的response發送。

因此,我將首先建立在您的計算機上的80端口此服務器,然後打開瀏覽器http://localhost。然後使用qDebug打印出瀏覽器的請求。

void Thread::readyRead() 
{ 
    qDebug() << Q_FUNC_INFO; 
    qDebug() << m_socket.readAll(); 
} 

後你有工作,決定你如何去解析請求,然後你如何去應對,或者你想成爲什麼樣的數據。

此外,一定要檢查出的See also的TCP例子爲QTCPSocket

希望有所幫助。