TCP 客户端
使用 Qt 网络功能前
首先在使用 Qt 的 TCP 网络功能时, 需要在项目工程中的配置文件(.pro)中增加如下语句。
将这行代码后追加
network
即可
即为
其次还需要导入 QTcpSocket
TCP
初始化
首先初始化 QTcpSocket
类。
其次对这个指针进行初始化, 在构造函数中初始化对象。
连接远程时, 首先需要知道其 IP 地址和端口号, 示例程序中通过用户点击 Connect 按钮获取用户输入在输入框中的 IP 地址和端口号。
获取 IP 地址和 端口
获取 IP 地址和端口号
连接到目标服务器
连接到目标服务器, 使用 connectToHost
connectToHost
这个函数所传入的目标 IP 地址为一个 QHostAddress
类, 因此在传入参数时需要将 QString
类型转换为 QHostAddress
类型。
QHostAddress
是一个封装好的 IP 地址类, 使用这个类需要引入相应的头文件 #include <QHostAddress>
// 连接服务器
// QHostAddress(target_ip) -> 将 QString 类型转换为 QHostAddress 类型
// target_port.toUShort() -> 将 QString 类型转换为 quint16 类型
socket->connectToHost(QHostAddress(target_ip), target_port.toUShort());
判断连接异常状态
socket 发出连接请求后, 判断是否连接成功。
如果成功连接, 则 socket 对象会发出一个信号, 通过判断这个信号即可判断是否连接成功。
同理, 如果连接异常 (连接断开等) socket 对象同样会发出一个信号。
// 判断服务器是否连接成功
// 如果连接成功, socket 对象会发出一个信号
connect(socket, &QTcpSocket::connected, [this](){
// 连接成功后输出用户提示
ui->Message_Edit->insertPlainText("Message: connected!\n");
});
// 连接异常
// 当连接状态异常, 例如断开连接, socket 对象也会发出一个信号
// &QTcpSocket::disconnect -> 连接断开信号
connect(socket, &QTcpSocket::disconnected, [this](){
// 提示用户连接断开
ui->Message_Edit->insertPlainText("Message: disconnect!\n");
i});