qt TCP網路程式設計與聊天室的實現
阿新 • • 發佈:2019-02-01
先看執行效果:
首先啟動伺服器:使用者後臺資料捕獲
之後登陸A使用者(假設要給B使用者發訊息):
輸入接受/傳送方AB,然後連線服務,類似登陸
也可以只輸入傳送方,即自身name,接收方隨時可以更改,但發訊息時,必須指定接收方是誰
之後登陸B(假設要與A通訊)
輸入接受/傳送方AB,然後連線服務,類似登陸
然後就可以輸入訊息,收發資料了
下載地址:
首先在pro中新增network
在QT裡, tcp程式設計需用到兩個類: QTcpServer, QtcpSocket
服務端:
//1. 建立一個QTcpServer物件 QTcpServer *server = new QTcpServer; //2. 呼叫物件的listen函式成員進行繫結地址與埠號, //並監聽埠,繫結埠號6666, 成功返回true, 失敗返回false server->listen(QHostAddress::Any, 6666); // 3. 當有客戶端連線時,物件會發出newConnection訊號, //客戶端的連線處理就在觸發的槽函式new_client裡處理了。 connect(server, SIGNAL(newConnection()), this, SLOT(new_client())); // 4. 在new_client裡處理連線. 每個客戶端連線上來後, //在伺服器端就會有一個QTcpSocket物件, //QTcpSocket物件在伺服器端用於與客戶端通訊使用, //如多個客戶端連線上來,則會有多個QTcpSocket物件. QTcpSocket *client; //處理客戶端連線,呼叫此處理函式後, //會得到一個QTcpSocket物件的地址, //此物件專用於這個連線上來的客戶端通訊使用。 client = server->nextPendingConnection(); //5.連線訊號,做相應的處理 //當客戶端發資料到伺服器端時,它會發出訊號readyRead, 通知接收客戶端的資料. // tcp_read槽函式用於接收客戶端的資料, 在槽函式裡呼叫QTcpSocket物件的read函式即可. connect(client, SIGNAL(readyRead()), this, SLOT(tcp_read())); //當客戶端斷開連線時,會發出disconnected訊號,通知客戶端已斷線. // lost_client槽函式用於處理客戶端斷開連線 connect(client, SIGNAL(disconnected()), this, SLOT(lost_client()));
客戶端:
// 1. 建立QTcpSocket物件 QTcpSocket *tcp = new QtcpSocket; // 2. 連線伺服器端的IP地址與埠號, //連線成功會發出connected訊號。 //也可以直接呼叫waitForConnected等待連線的結果。 tcp->connectToHost("192.168.250.250", 9999); // 3. 呼叫物件的read/write函式即可與伺服器端進行收發資料了。 //當伺服器端有發資料過來時,會發出readyRead訊號,在連線此訊號的槽函式裡接收資料即可.