Qt网络编程之TCP
Qt网络编程之TCP
因为实验项目想要弄聊天室之类的,所以自学了Qt方面的TCP。现在介绍一些知识点和学习经验。
首先,如果用要到网络模块,需要在Pro项目文件中添加
QT += network
在网络编程中,Qt Network类包含大量的网络相关类。如QHostAddress(ip地址),QTcpSocket等等。所以我们可以直接将这个类包含进去。
以上这些是qt网络编程的基本要求。现在主要了解一下TCP方面的知识。
TCP(Transmission Control Protocol - 传输控制协议)是一个底层网络协议,被用于大多数互联网协议,包括:HTTP 和 FTP,进行数据传输。它是一种面向连接的、可靠的、基于字节流的传输层通信协议,特别适合数据的连续传输。TCP编程一般分为客户端和服务器端,也就是所谓的C/S(Client/Server)模型,如下图所示
我们需要先开启服务器,客户端才能连入,所以我们先实现服务器的功能,客户端的实现只需要对照符合服务端既可。
为了确保客户端能连接进来,我们首先需要创建一个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信号会发出,连接到槽函数上,实现消息的显示。
实际效果如下图
开启服务端
开启客户端,输入主机号和端口号。
连接。
以上就是一个简单的C/S交互模型。具体的聊天室实现需要用到多线程和容器,可以参考一些他人的代码,认真学习,提升自己!