Tcp 协议 简介及客户端和服务端的创建

Tcp

在这里插入图片描述

简介

传输控制协议(英语:Transmission Control Protocol,缩写:TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。用户数据报协议(UDP)是同一层内另一个重要的传输协议。

运作方式

TCP协议的运行可划分为三个阶段:连接创建(connection establishment)、数据传送(data transfer)和连接终止(connection termination)。操作系统将TCP连接抽象为套接字表示的本地端点(local end-point),作为编程接口给程序使用。在TCP连接的生命期内,本地端点要经历一系列的状态改变。

Tcp的创建

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 创建服务 首先,我们需要创建一个服务来监听客户的连接请求。在 Qt 中,可以使用 QTcpServer 类来实现。 ``` QTcpServer *tcpServer = new QTcpServer(this); connect(tcpServer, SIGNAL(newConnection()), this, SLOT(newConnection())); if (!tcpServer->listen(QHostAddress::Any, 1234)) { qDebug() << "Server could not start!"; } else { qDebug() << "Server started!"; } ``` 在上面的代码中,我们创建了一个 QTcpServer 对象 tcpServer,并将其连接到 newConnection() 槽函数。然后,我们调用 listen() 函数来开始监听客户的连接请求。在这个例子中,我们使用了 QHostAddress::Any 来指定监听所有 IP 地址,口号为 1234。 现在,我们需要在 newConnection() 槽函数中实现服务客户的通信。 ``` void Server::newConnection() { QTcpSocket *clientSocket = tcpServer->nextPendingConnection(); connect(clientSocket, SIGNAL(readyRead()), this, SLOT(readMessage())); connect(clientSocket, SIGNAL(disconnected()), clientSocket, SLOT(deleteLater())); qDebug() << "New client connected!"; } ``` 在上面的代码中,我们使用 nextPendingConnection() 函数来获取客户的连接请求,并创建一个 QTcpSocket 对象 clientSocket 来与客户进行通信。然后,我们将 clientSocket 连接到 readyRead() 槽函数,以便在接收到客户的消息时进行处理。当客户断开连接时,我们使用 deleteLater() 函数删除 clientSocket 对象。 现在,我们需要在 readMessage() 槽函数中实现服务接收客户消息的功能。 ``` void Server::readMessage() { QTcpSocket *clientSocket = qobject_cast<QTcpSocket *>(sender()); if (clientSocket) { QByteArray message = clientSocket->readAll(); qDebug() << "Received message: " << message; // 处理消息 clientSocket->write("Message received!"); } } ``` 在上面的代码中,我们首先使用 sender() 函数获取发送信号的对象(即 clientSocket)。然后,我们使用 readAll() 函数获取客户发送的消息,并进行处理。最后,我们使用 write() 函数向客户发送消息。 2. 创建客户 接下来,我们需要创建一个客户来与服务进行通信。在 Qt 中,可以使用 QTcpSocket 类来实现。 ``` QTcpSocket *tcpSocket = new QTcpSocket(this); tcpSocket->connectToHost("127.0.0.1", 1234); if (tcpSocket->waitForConnected()) { qDebug() << "Connected to server!"; tcpSocket->write("Hello, server!"); } ``` 在上面的代码中,我们创建了一个 QTcpSocket 对象 tcpSocket,并使用 connectToHost() 函数连接到服务的 IP 地址和口号。如果连接成功,我们就可以使用 write() 函数向服务发送消息了。 现在,我们需要在客户中实现接收服务消息的功能。 ``` void Client::readMessage() { QTcpSocket *tcpSocket = qobject_cast<QTcpSocket *>(sender()); if (tcpSocket) { QByteArray message = tcpSocket->readAll(); qDebug() << "Received message: " << message; // 处理消息 } } ``` 在上面的代码中,我们使用 sender() 函数获取发送信号的对象(即 tcpSocket)。然后,我们使用 readAll() 函数获取服务发送的消息,并进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值