【Qt网络编程】实现TCP协议通信

这篇具有很好参考价值的文章主要介绍了【Qt网络编程】实现TCP协议通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概要:本期主要讲解QT中对于TCP协议通信的实现。

一、TCP协议

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 定义。
TCP建立连接前,需要进行三次握手,如下图所示:
qt tcp,# QT 进阶教程,网络,tcp/ip,qt
TCP断开连接前,需要进行四次挥手,如下图所示:

qt tcp,# QT 进阶教程,网络,tcp/ip,qt

二、Qt中TCP协议处理

Qt中提供了QTcpSocket类和QTcpServer类分别用于创建TCP套接字和TCP服务器套接字。

1.QTcpSocket

QTcpSocket类继承与QAbstractSocket,主要提供了socket套接字的创建、绑定端口、连接服务器等。
qt tcp,# QT 进阶教程,网络,tcp/ip,qt

2.QTcpServer

QTcpServer类继承于QSctpServer,主要提供了对于TCP连接信号的响应和监听等。
qt tcp,# QT 进阶教程,网络,tcp/ip,qt

三、Qt实现TCP通信

1.客户端

客户端是发送端,主要实现与服务器端建立连接、发送数据。步骤如下:
建立TCP套接字 --> 连接服务器 --> 发送数据
下面是客户端的源码:

#ifndef TCPCLIENT_H
#define TCPCLIENT_H

#include <QObject>
#include <QTcpSocket>
#include <QHostAddress>
#include <QDebug>
#include <QTimer>

class TCPClient : QObject
{
    Q_OBJECT
public:
    TCPClient();

    void InitSocket();//初始化Socket套接字

    void InitTimer();//初始化定时器,定时发送

    void ConnectToServer();//连接服务器

    void SendData();//发送数据

private:
    QTcpSocket *mTcpSocket;//Tcp连接套接字
    QHostAddress mServerAddress;//服务器IP
    QTimer *mTimer;//定时器对象

};

#endif // TCPCLIENT_H

#include "tcpclient.h"

TCPClient::TCPClient()
{
    InitSocket();
    ConnectToServer();
    InitTimer();

}

void TCPClient::InitSocket()
{
    mTcpSocket = new QTcpSocket;//初始化Tcp连接套接字
    mServerAddress.setAddress("10.0.0.177");//设置服务器地址
}

void TCPClient::InitTimer()
{
    mTimer = new QTimer;//初始化定时器对象
    connect(mTimer,&QTimer::timeout,this,[=]
    {
        SendData();
    });
    mTimer->start(1000);//每隔一秒发送一次数据
}

void TCPClient::ConnectToServer()
{
    quint16 _port = 7777;//设置服务器端口
    connect(mTcpSocket,&QTcpSocket::connected,this,[=]{
        qDebug()<< "Connect To Server Successful!"<<endl;
    });
    mTcpSocket->connectToHost(mServerAddress,_port,QIODevice::WriteOnly);//连接服务器

}

void TCPClient::SendData()
{
    QByteArray _data = "hello";
    if(-1 != mTcpSocket->write(_data.data(),_data.length()))
    {
        qDebug()<< "TCP ==> Send data : "<< _data<<endl;
    }
    mTcpSocket->flush();
}

2.服务器端

服务器端是接收端,主要实现监听连接信号,建立连接和接收数据。步骤如下:
建立监听套接字 --> 连接到客户端 --> 获得连接套接字 --> 接收数据
下面是服务器端源码:

#ifndef TCPSEVER_H
#define TCPSEVER_H

#include <QObject>
#include <QHostAddress>
#include <QTcpServer>
#include <QTcpSocket>
#include <QDebug>

class TCPSever : QObject
{
    Q_OBJECT
public:
    TCPSever();
    void InitServer();//初始化服务器
private:
    QTcpServer *mTcpServer;//服务器对象
    QTcpSocket *mTcpSocket;//客户端套接字
    QHostAddress mHostAddress;//本地IP地址

};

#endif // TCPSEVER_H
#include "tcpsever.h"

TCPSever::TCPSever()
{
    InitServer();
}

void TCPSever::InitServer()
{
    mTcpServer = new QTcpServer(this);//初始化监听套接字
    mTcpSocket = new QTcpSocket;//初始化连接套接字
    mHostAddress.setAddress("10.0.0.177");//设置监听网卡IP
    quint16 _port = 7777;//设置监听端口
    mTcpServer->listen(mHostAddress,_port);//监听指定网卡和端口
    qDebug()<<"Listen Interface ["<<mHostAddress.toString()<<"] And Port ["<<_port<<"] Successful!"<<endl;
    connect(mTcpServer,&QTcpServer::newConnection,this,[=]{
        mTcpSocket = mTcpServer->nextPendingConnection();//获取连接套接字
        qDebug()<<"Connect To Client Successful!"<<endl;

        connect(mTcpSocket,&QTcpSocket::readyRead,this,[=]{//读取消息
            QByteArray _data = mTcpSocket->readAll();
            qDebug()<<"TCP Receive Data : "<<QString::fromLatin1(_data)<<endl;
        });
    });

}

结尾

以上就是QT中TCP通信模块的全部内容,然后上面的源码可以直接编,但是记得去PRO文件中加入network模块:)文章来源地址https://www.toymoban.com/news/detail-595452.html

到了这里,关于【Qt网络编程】实现TCP协议通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【网络编程】网络通信基础——简述TCP/IP协议

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程的一点学习心得,欢迎大家在评论区交流讨论💌 ip地址简单来说就是用来描述网络上一个设备的所在位置。 端

    2024年02月04日
    浏览(24)
  • 【Java】--网络编程:基于TCP协议的网络通信

    TCP协议(Transmission Control Protocol),即传输控制协议,是一种 面向连接 的, 可靠 的,基于 字节流 的传输层通信协议。数据大小无限制。 建立连接的过程需要 三次握手 。 断开连接的过程需要 四次挥手 。 使用TCP协议的通信双方分别为 客户端 和 服务器端 。 客户端负责向服务

    2024年01月23日
    浏览(28)
  • Qt中的网络编程(TCP)

    在Qt中网络编程主要由Qt Network模块来编写基于TCP/Ip的网络程序,其中提供了许多的类: 可以点击该链接查看:Qt网络C++类|Qt网络 5.15.12  常见的有: QTcpServer 基于 TCP 的服务器 QTcpSocket TCP 套接字 QUdpSocket UDP 套接字 QDtls 此类为 UDP 套接字提供加密 QHostAddress IP地址 QHostInfo 用于主

    2024年02月07日
    浏览(81)
  • 网络编程day2——基于TCP/IP协议的网络通信

            计算机S                                                 计算机C      创建socket对象                                   创建socket对象      准备通信地址(自己的ip(非公网ip))      准备通信地址                                     (计算

    2024年02月10日
    浏览(28)
  • QT网络编程TCP/UDP开发流程 制作网络调试助手

    1、QT的网络编程: TCP和UDP TCP编程需要用到俩个类: QTcpServer 和 QTcpSocket QTcpSocket类 提供了一个TCP套接字 QTcpSocket是QAbstractSocket的一个子类,它允许您建立TCP连接和传输数据流 注意:TCP套接字不能在QIODevice::Unbuffered模式下打开。 QTcpServer类 提供一个基于tcp的服务器 2. 这个类可以接

    2023年04月08日
    浏览(20)
  • Java网络编程之IP,端口号,通信协议(UDP,TCP)

    ① C/S :客户端/服务器 在用户本地需要下载安装客户端程序,在远程有一个服务器端程序。 优点:画面精美,用户体验好 缺点:用户需要下载更新 ② B/S :浏览器/服务器 只需要一个浏览器,用户通过指定网址访问对应的服务器。 优点:不需要开发客户端,只需要页面+服务

    2024年02月03日
    浏览(35)
  • 网络编程——深入理解TCP/IP协议——OSI模型和TCP/IP模型:构建网络通信的基石

    TCP/IP协议,即 传输控制协议/互联网协议 ,是一组用于在计算机网络中实现通信的协议。它由两个主要的协议组成:TCP(传输控制协议)和IP(互联网协议)。TCP负责确保数据的可靠传输,而IP则负责路由数据包以在网络中传递。TCP/IP协议簇还包含其他辅助协议,如UDP(用户数

    2024年02月14日
    浏览(20)
  • 基于UDP/TCP的网络通信编程实现

    红色是心中永不褪色的赤诚 操作系统为网络编程提供了 Socket api , Socket是基于TCP/IP协议的网络通信的基本单元, 基于Socket的网络程序开发就是 网络编程. 由于直接与应用层联系的是传输层, 所以针对应用层协议(TCP, UDP), Shocket提供了三种套接字, 分别是 流套接字(使用TCP) , 数据报

    2024年02月08日
    浏览(19)
  • 「网络编程」第二讲:网络编程socket套接字(三)_ 简单TCP网络通信程序的实现

    「前言」文章是关于网络编程的socket套接字方面的,上一篇是网络编程socket套接字(二),下面开始讲解!  「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 「枫叶先生有点文青病」「每篇一句」 I do not know where to go,but I have been on the road. 我不知

    2024年02月11日
    浏览(24)
  • [Qt网络编程]之UDP通讯的简单编程实现

    hello!欢迎大家来到我的Qt学习系列之 网络编程之UDP通讯的简单编程实现。 希望这篇文章能对你有所帮助!!! 本篇文章的相关知识请看我的上篇文章: 目录 UDP通讯  基于主窗口的实现  基于线程的实现          UDP数据报协议是一个面向无连接的传输层报文协议 ,它简

    2024年04月25日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包