2012-12-07 499 views
1

我正在研究一個需要「主」應用程序和一些「servant」之間的tcp通信的項目。 (該項目是在C + +中,我也使用QT)使用qt的多客戶端/服務器tcp應用程序

「僕人」將做一些處理,並將其結果發送到「主」。 到目前爲止,這是一個簡單的多客戶端 - 服務器應用程序。

事情是,在隨機時間,主人會要求從僕人一些額外的信息,甚至向他們發送信息來改變他們的處理方式。

如果我基於我的項目的幸運客戶端/服務器的例子,我將能夠發送消息給主人的僕人? (任何想法如何?)

或者我需要根據我的工作的其他事情(如聊天客戶端也許?)?

在TCP客戶機/服務器通信的任何其他建議是值得歡迎的,但因爲我已經使用QT,我寧願不添加其他庫....

預先感謝您!

+0

一旦客戶端(「僕人」)建立了與服務器(「主」)應用程序的連接,雙方都可以使用該連接。服務器可以向客戶端發送請求,也可以以其他方式發送請求。 –

回答

5

在Qt中構建服務器很簡單。你必須得到QTcpServer並實現一些方法或插槽。這對客戶也是有效的。 導出QTcpSocket您將擁有您的客戶。

的例子中,可以檢測客戶端傳入您實現虛擬無效incomingConnection(INT socketDescriptor)。所以你的情況,你可以節省客戶的地圖傳入(地圖,因爲每一個客戶都會有自己的ID)。

在服務器和客戶端中,您可能需要執行readyRead()插槽。 這個插槽做你想要的溝通事情。實際上在服務器可以接收和發送給客戶端消息的時隙內,反之亦然。

這是一個tipical readyread

void Client::readyRead() { 
    while (this->canReadLine()) { 
      // here you get the message from the server 
     const QString& line = QString::fromUtf8(this->readLine()).trimmed(); 
    } 
} 

這是如何發送消息:

void Client::sendMessage(const QString& message) { 
    this->write(message.toUtf8()); 
    this->write("\n"); 
} 

這一切都!

相關問題