Qt网络编程之TCP

          Qt网络编程之TCP

因为实验项目想要弄聊天室之类的,所以自学了Qt方面的TCP。现在介绍一些知识点和学习经验。

首先,如果用要到网络模块,需要在Pro项目文件中添加

QT += network

在网络编程中,Qt Network类包含大量的网络相关类。如QHostAddressip地址),QTcpSocket等等。所以我们可以直接将这个类包含进去。

以上这些是qt网络编程的基本要求。现在主要了解一下TCP方面的知识。

TCPTransmission Control Protocol - 传输控制协议)是一个底层网络协议,被用于大多数互联网协议,包括:HTTP FTP,进行数据传输。它是一种面向连接的、可靠的、基于字节流的传输层通信协议,特别适合数据的连续传输TCP编程一般分为客户端和服务器端,也就是所谓的C/SClient/Server)模型,如下图所示

 

我们需要先开启Qt网络编程之TCP服务器,客户端才能连入,所以我们先实现服务器的功能,客户端的实现只需要对照符合服务端既可。

为了确保客户端能连接进来,我们首先需要创建一个QTcpServer类对象,令该对象持续的监听某个或者多个端口。

当有客户端连接进来的时候,会有newConnection()信号自动发射,我们可以用这个信号来完成一些基本的交互。看下面代码(来自Qt Creator快速入门第三版)

    tcpServer = new QTcpServer(this);

    // 使用了IPv4的本地主机地址,等价于QHostAddress("127.0.0.1")

    if (!tcpServer->listen(QHostAddress::LocalHost, 6666)) {

        qDebug() << tcpServer->errorString();

        close();

    }

    connect(tcpServer, &QTcpServer::newConnection,

            this, &Server::sendMessage);

上面代码实现了当有客户端连入时,发送信号令sendMessage函数调用。该函数发送一些简单的信息给客户端。

再看客户端,客户端要连接服务端可以用下面方法

    tcpSocket->connectToHost(ui->hostLineEdit->text(),

                             ui->portLineEdit->text().toInt());

connectToHost(ip.端口)

客户端需要接收服务端发来的消息,可以用

    connect(tcpSocket, &QTcpSocket::readyRead, this, &Client::readMessage);

当有可读的数据时,readyread信号会发出,连接到槽函数上,实现消息的显示。

实际效果如下图

开启服务端

 Qt网络编程之TCP

开启客户端,输入主机号和端口号。

 Qt网络编程之TCP

连接。

Qt网络编程之TCP

以上就是一个简单的C/S交互模型。具体的聊天室实现需要用到多线程和容器,可以参考一些他人的代码,认真学习,提升自己!