网络通讯之TCP协议实用案例


前言

在日常IT领域内,socket网络编程是非常重要的一块内容,所以笔者最近学习了一下很常见的TCP协议,因此用Qt实现了一个网络聊天原理的小程序demo

一、TCP协议是什么?

在了解TCP协议之前,我们应该知道5层因特网协议栈和7层ISO OSI模型,而TTCP协议位于网络的传输层中。TCP协议是什么?是一种面向连接的、可靠的传输协议,其最主要的特点即为三次握手以及四次挥手,为什么是三次握手而不是四次挥手?原因是在于为了防止已失效的请求报文又传到服务器而引起错误,本质上是为了解决网络信道不可靠的问题,也是该协议可靠连接的体现。

在这里插入图片描述

二、Qt中实现TCP网络通信流程

1.创建两个类

创建服务器类和客户端类
在这里插入图片描述

2.TCP通信过程

如下图所示,服务器端通过QTcpServer类进行监听,通过QTcpSocket套接字进行连接客户端,客户端与服务器建立连接后,服务器监听到信号后,会与客户端建立连接,此时服务器和客户端之间就可进行读写数据了!

在这里插入图片描述

三、代码讲解

1、服务器端cpp文件代码

首先实例化对象,并进行监听,在这里我监听的是本地的IP地址

 ui->setupUi(this);
    setWindowTitle("服务器端");
    ui->lineEdit->setText("127.0.0.1");
    ui->lineEdit_3->setText("9999");
    socket =new QTcpSocket(this);
    Server =new QTcpServer(this);
    Server->listen(QHostAddress(ui->lineEdit->text()),ui->lineEdit_3->text().toInt()); //监听

当新的连接来到时,收发信号触发槽函数并进行数据的读取和写入

   //当新的连接到来时,收到信号触发槽函数
    connect(Server,&QTcpServer::newConnection,this,[=](){
        //接收客户端的套接字对象
        socket=Server->nextPendingConnection();
        ui->textBrowser->setText("已连接上!\n");
        connect(socket,&QTcpSocket::readyRead,this,[=](){
            //接受对象
           QByteArray array =  socket->readAll();
           //把接收到的对象放到记录里面
           ui->textBrowser->append("客户端:"+array);
        });
    });

//    //关闭连接
//    socket->disconnectFromHost();
//    //关闭设备
//    Server->close();

2、客户端cpp文件代码

客户端的与之类似,完整代码如下:

   ui->setupUi(this);
    socket = new QTcpSocket(this);
    ui->lineEdit->setText("127.0.0.1");
    ui->lineEdit_3->setText("9999");
   setWindowTitle("客户端");
    socket->connectToHost(QHostAddress(ui->lineEdit->text()),ui->lineEdit_3->text().toInt());
    connect(socket,&QTcpSocket::readyRead,this,[=](){
        //接受对象
       QByteArray array =  socket->readAll();
       //把接收到的对象放到记录里面
       ui->textBrowser->append("服务器端:"+array);

    });
    connect(ui->pushButton,&QPushButton::clicked,this,[=](){
        socket->write(ui->lineEdit_2->text().toUtf8());
        ui->textBrowser->append("客户端:"+ui->lineEdit_2->text());
        ui->lineEdit_2->clear();
    });

四、程序演示

在这里插入图片描述

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rubbish_miao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值