繼續上一篇的...
寫在前面:客戶端中幾個重要的信號與方法
//連接服務器,port指的是服務器監聽的端口
tcpSocket->connectToHost(QHostAddress(ip), port);
//與服務器連接成功時觸發該信號
&QTcpSocket::connected
//服務器發來消息時觸發該信號
&QTcpSocket::readyRead
//發送消息給服務器就是將數據寫入到該方法中
tcpSocket->write(str.toUtf8().data());
//與服務器斷開連接
tcpSocket->disconnectFromHost();
tcpSocket->close();
在上面的項目文件中添加新文件(帶有界面的)
1. 添加一個新類(Client),引用頭文件(client.h)
//1. 引用頭文件
#include <QTcpSocket>
#include <QHostAddress>
2. 創建對象(client.h)
private:
Ui::ClientWidget *ui;
//2. 創建對象
QTcpSocket *tcpSocket;
3. 給對象分配空間(client.cpp)
//3. 給對象分配空間
tcpSocket = new QTcpSocket(this);
4. 與服務器建立連接(client.cpp)
// 4. 當建立連接按鈕被點擊的時候,與服務器建立連接
void ClientWidget::on_buttonConnect_clicked()
{
//A. 獲取服務器的IP和端口
QString ip = ui->lineEditIP->text();
qint16 port = ui->lineEditPort->text().toInt();
//B. 建立連接
tcpSocket->connectToHost(QHostAddress(ip), port);
}
5. 檢測與服務器連接的狀態(client.cpp)
//5. 如果與服務器連接成功,則產生connected信號
connect(tcpSocket, &QTcpSocket::connected,
[=]()
{
ui->textEditReceive->append("與服務器連接成功");
}
);
6. 實現消息發送的功能(client.cpp)
//6. 當點擊發送按鈕的時候,將消息發送到服務器
void ClientWidget::on_buttonSend_clicked()
{
//A. 獲取文本框內容
QString str = ui->textEditSend->toPlainText();
//B. 發送消息
tcpSocket->write(str.toUtf8().data());
}
7. 接收服務器發送來的消息(client.cpp)
//7. 接收服務器發來的消息(當服務器發來消息時會觸發readyRead()信號)
connect(tcpSocket, &QTcpSocket::readyRead,
[=]()
{
//A. 讀取tcp的所有消息
QByteArray array = tcpSocket->readAll();
//B. 顯示到UI上
ui->textEditReceive->append(array);
}
);
8. 實現斷開連接(client.cpp)
//8. 當點擊斷開的時候,斷開與服務器的連接
void ClientWidget::on_buttonClose_clicked()
{
tcpSocket->disconnectFromHost();
tcpSocket->close();
ui->textEditReceive->append("已與服務器斷開連接");
}
本文原創,轉載請註明出處。