文章目录
- QTcp服务器的关键流程
- QTtcp客户端的关键流程
- TCP协议
- Socket
QTcp服务器的关键流程
工程建立,需要在.pro加入网络权限
创建一个基于 QTcpServer 的服务端涉及以下关键步骤:
-
创建并初始化 QTcpServer 实例:
-
实例化 QTcpServer 。
-
调用 listen 方法在特定端口监听传入的连接。
-
-
处理新连接:
-
为 newConnection 信号连接一个槽函数。
-
在槽函数中,使用 nextPendingConnection 获取 QTcpSocket 以与客户端通信。
-
-
读取和发送数据:
-
通过连接 QTcpSocket 的 readyRead 信号来读取来自客户端的数据。
-
使用 write 方法发送数据回客户端。
-
-
关闭连接:
- 在适当的时候关闭 QTcpSocket 。
示例代码可能如下:
class MyServer : public QObject {Q_OBJECTpublic:MyServer() {QTcpServer *server = new QTcpServer(this);connect(server, &QTcpServer::newConnection, this,&MyServer::onNewConnection);server->listen(QHostAddress::Any, 1234);}private slots:void onNewConnection() {QTcpSocket *clientSocket = server->nextPendingConnection();connect(clientSocket, &QTcpSocket::readyRead, this,&MyServer::onReadyRead);// ...}void onReadyRead() {QTcpSocket *clientSocket = qobject_cast<QTcpSocket *>(sender());// 读取数据QByteArray data = clientSocket->readAll();// 处理数据// ...}
};
确保在使用 QTcpServer 和 QTcpSocket 时妥善处理网络错误和异常情况。
QTtcp客户端的关键流程
工程建立,需要在.pro加入网络权限
创建一个基于 QTcpSocket 的Qt客户端涉及以下步骤:
-
创建 QTcpSocket 实例:
- 实例化 QTcpSocket 。
-
连接到服务器:
- 使用 connectToHost 方法连接到服务器的IP地址和端口。
-
发送数据到服务器:
- 使用 write 方法发送数据。
-
接收来自服务器的数据:
- 为 readyRead 信号连接一个槽函数来接收数据。
-
关闭连接:
- 关闭 QTcpSocket 连接。
示例代码如下:
class MyClient : public QObject {Q_OBJECTpublic:MyClient() {QTcpSocket *socket = new QTcpSocket(this);connect(socket, &QTcpSocket::readyRead, this, &MyClient::onReadyRead);socket->connectToHost("server_address", 1234);}private slots:void onReadyRead() {QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());QByteArray data = socket->readAll();// 处理接收到的数据// ...}
};
TCP协议
TCP(传输控制协议)是一种广泛使用的网络通信协议,设计用于在网络中的计算机之间可靠地传输数
据。它是互联网协议套件的核心部分,通常与IP(互联网协议)一起使用,合称为TCP/IP。以下是TCP协
议的一些基本特点:
- 面向连接:在数据传输之前,TCP 需要在发送方和接收方之间建立一个连接。这包括三次握手过
程,确保两端都准备好进行数据传输。
- 可靠传输:TCP 提供可靠的数据传输服务,这意味着它保证数据包准确无误地到达目的地。如果发
生数据丢失或错误,TCP 会重新发送数据包。
- 顺序控制:TCP 保证数据包的传输顺序。即使数据包在网络中的传输顺序被打乱,接收方也能按照
正确的顺序重组这些数据。
- 流量控制:TCP 使用窗口机制来控制发送方的数据传输速率,以防止网络过载。这有助于防止接收
方被发送方发送的数据所淹没。
- 拥塞控制:TCP 还包括拥塞控制机制,用来检测并防止网络拥塞。当网络拥塞发生时,TCP 会减少
其数据传输速率。
- 数据分段:大块的数据在发送前会被分割成更小的段,以便于传输。这些段会被独立发送并在接收
端重新组装。
- 确认和重传:接收方对成功接收的数据包发送确认(ACK)信号。如果发送方没有收到确认,它会
重传丢失的数据包。
- 终止连接:数据传输完成后,TCP 连接需要被正常关闭,这通常涉及到四次挥手过程。
TCP 适用于需要高可靠性的应用,如网页浏览、文件传输、电子邮件等。然而,由于它的这些特性,TCP
在处理速度上可能不如其他协议(如UDP)那么快速。
Socket
Socket 不是一个协议,而是一种编程接口(API)或机制,用于在网络中实现通信。Socket 通常在应用层和传输层之间提供一个端点,使得应用程序可以通过网络发送和接收数据。它支持多种协议,主要是TCP 和 UDP。
以下是 Socket 的一些基本特点:
-
类型:有两种主要类型的 Sockets —— TCP Socket(面向连接,可靠)和 UDP Socket(无连接,不可靠)。
-
应用:在各种网络应用中广泛使用,如网页服务器、聊天应用、在线游戏等。
-
编程语言支持:大多数现代编程语言如 Python, Java, C++, 等都提供 Socket 编程的支持。
-
功能:提供了创建网络连接、监听传入的连接、发送和接收数据等功能。
-
QT: 在QT组件中,QTcpSocket用来管理和实现TCP Socket通信,QUdpSocket用来管理和实现UDP Socket通信
总之,Socket 是实现网络通信的基础工具之一,它抽象化了网络层的复杂性,为开发者提供了一种相对简单的方式来建立和管理网络连接。
小贴士:
TCPServer类关于监听,连接,发送,接受的API
TCPServer在网络通信中常用的信号
TCPScoket在QT实现Socket常用的API
TCPScoket在QT实现Socket常用的信号
EditText的内容读取方法,内容写入方法,在特定行写入特点颜色的方法