继续上一篇的...
写在前面:客户端中几个重要的信号与方法
//连接服务器,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("已与服务器断开连接");
}
本文原创,转载请注明出处。