我的编程空间,编程开发者的网络收藏夹
学习永远不晚

QT5如何实现简单的TCP通信

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

QT5如何实现简单的TCP通信

这篇文章主要介绍“QT5如何实现简单的TCP通信”,在日常操作中,相信很多人在QT5如何实现简单的TCP通信问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”QT5如何实现简单的TCP通信”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

使用QT的网络套接字需要.pro文件中加入一句:

QT += network

一、客户端

客户端的代码比服务器稍简单,总的来说,使用QT中的QTcpSocket类与服务器进行通信只需要以下5步:

(1)创建QTcpSocket套接字对象

socket = new QTcpSocket();

(2)使用这个对象连接服务器

socket->connectToHost(IP, port);

(3)使用write函数向服务器发送数据

socket->write(data);

(4)当socket接收缓冲区有新数据到来时,会发出readRead()信号,因此为该信号添加槽函数以读取数据

QObject::connect(socket, &QTcpSocket::readyRead, this, &MainWindow::socket_Read_Data); void MainWindow::socket_Read_Data(){    QByteArray buffer;    //读取缓冲区数据    buffer = socket->readAll();}

(5)断开与服务器的连接(关于close()和disconnectFromHost()的区别,可以按F1看帮助)

socket->disconnectFromHost();

以下是客户端的例程

首先是mainwindow.h文件:

//mainwindow.h#ifndef MAINWINDOW_H#define MAINWINDOW_H #include <QMainWindow>#include <QTcpSocket> namespace Ui {class MainWindow;} class MainWindow : public QMainWindow{    Q_OBJECT public:    explicit MainWindow(QWidget *parent = 0);    ~MainWindow(); private slots:     void on_pushButton_Connect_clicked();     void on_pushButton_Send_clicked();     void socket_Read_Data();     void socket_Disconnected(); private:    Ui::MainWindow *ui;    QTcpSocket *socket;}; #endif // MAINWINDOW_H

然后是mainwindow.cpp文件:

//mainwindow.cpp#include "mainwindow.h"#include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow){    ui->setupUi(this);     socket = new QTcpSocket();     //连接信号槽    QObject::connect(socket, &QTcpSocket::readyRead, this, &MainWindow::socket_Read_Data);    QObject::connect(socket, &QTcpSocket::disconnected, this, &MainWindow::socket_Disconnected);     ui->pushButton_Send->setEnabled(false);    ui->lineEdit_IP->setText("127.0.0.1");    ui->lineEdit_Port->setText("8765"); } MainWindow::~MainWindow(){    delete this->socket;    delete ui;} void MainWindow::on_pushButton_Connect_clicked(){    if(ui->pushButton_Connect->text() == tr("连接"))    {        QString IP;        int port;         //获取IP地址        IP = ui->lineEdit_IP->text();        //获取端口号        port = ui->lineEdit_Port->text().toInt();         //取消已有的连接        socket->abort();        //连接服务器        socket->connectToHost(IP, port);         //等待连接成功        if(!socket->waitForConnected(30000))        {            qDebug() << "Connection failed!";            return;        }        qDebug() << "Connect successfully!";         //发送按键使能        ui->pushButton_Send->setEnabled(true);        //修改按键文字        ui->pushButton_Connect->setText("断开连接");    }    else    {        //断开连接        socket->disconnectFromHost();        //修改按键文字        ui->pushButton_Connect->setText("连接");        ui->pushButton_Send->setEnabled(false);    }} void MainWindow::on_pushButton_Send_clicked(){    qDebug() << "Send: " << ui->textEdit_Send->toPlainText();     //获取文本框内容并以ASCII码形式发送    socket->write(ui->textEdit_Send->toPlainText().toLatin1());    socket->flush();} void MainWindow::socket_Read_Data(){    QByteArray buffer;    //读取缓冲区数据    buffer = socket->readAll();    if(!buffer.isEmpty())    {        QString str = ui->textEdit_Recv->toPlainText();        str+=tr(buffer);        //刷新显示        ui->textEdit_Recv->setText(str);    }} void MainWindow::socket_Disconnected(){    //发送按键失能    ui->pushButton_Send->setEnabled(false);    //修改按键文字    ui->pushButton_Connect->setText("连接");    qDebug() << "Disconnected!";}

最后是ui的设计:

QT5如何实现简单的TCP通信

二、服务器

服务器除了使用到了QTcpSocket类,还需要用到QTcpSever类。即便如此,也只是比客户端复杂一点点,用到了6个步骤:

(1)创建QTcpSever对象

server = new QTcpServer();

(2)侦听一个端口,使得客户端可以使用这个端口访问服务器

server->listen(QHostAddress::Any, port);

(3)当服务器被客户端访问时,会发出newConnection()信号,因此为该信号添加槽函数,并用一个QTcpSocket对象接受客户端访问

connect(server,&QTcpServer::newConnection,this,&MainWindow::server_New_Connect); void MainWindow::server_New_Connect(){    //获取客户端连接    socket = server->nextPendingConnection();}

(4)使用socket的write函数向客户端发送数据

socket->write(data);

(5)当socket接收缓冲区有新数据到来时,会发出readRead()信号,因此为该信号添加槽函数以读取数据

QObject::connect(socket, &QTcpSocket::readyRead, this, &MainWindow::socket_Read_Data); void MainWindow::socket_Read_Data(){    QByteArray buffer;    //读取缓冲区数据    buffer = socket->readAll();}

(6)取消侦听

server->close();

以下是服务器的例程

首先是mainwindow.h文件:

//mainwindow.h#ifndef MAINWINDOW_H#define MAINWINDOW_H #include <QMainWindow>#include <QTcpServer>#include <QTcpSocket> namespace Ui {class MainWindow;} class MainWindow : public QMainWindow{    Q_OBJECT public:    explicit MainWindow(QWidget *parent = 0);    ~MainWindow(); private slots:    void on_pushButton_Listen_clicked();     void on_pushButton_Send_clicked();     void server_New_Connect();     void socket_Read_Data();     void socket_Disconnected(); private:    Ui::MainWindow *ui;    QTcpServer* server;    QTcpSocket* socket;}; #endif // MAINWINDOW_H

然后是mainwindow.cpp文件:

#include "mainwindow.h"#include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow){    ui->setupUi(this);     ui->lineEdit_Port->setText("8765");    ui->pushButton_Send->setEnabled(false);     server = new QTcpServer();     //连接信号槽    connect(server,&QTcpServer::newConnection,this,&MainWindow::server_New_Connect);} MainWindow::~MainWindow(){    server->close();    server->deleteLater();    delete ui;} void MainWindow::on_pushButton_Listen_clicked(){    if(ui->pushButton_Listen->text() == tr("侦听"))    {        //从输入框获取端口号        int port = ui->lineEdit_Port->text().toInt();         //监听指定的端口        if(!server->listen(QHostAddress::Any, port))        {            //若出错,则输出错误信息            qDebug()<<server->errorString();            return;        }        //修改按键文字        ui->pushButton_Listen->setText("取消侦听");        qDebug()<< "Listen succeessfully!";    }    else    {        socket->abort();        //取消侦听        server->close();        //修改按键文字        ui->pushButton_Listen->setText("侦听");        //发送按键失能        ui->pushButton_Send->setEnabled(false);    } } void MainWindow::on_pushButton_Send_clicked(){    qDebug() << "Send: " << ui->textEdit_Send->toPlainText();    //获取文本框内容并以ASCII码形式发送    socket->write(ui->textEdit_Send->toPlainText().toLatin1());    socket->flush();} void MainWindow::server_New_Connect(){    //获取客户端连接    socket = server->nextPendingConnection();    //连接QTcpSocket的信号槽,以读取新数据    QObject::connect(socket, &QTcpSocket::readyRead, this, &MainWindow::socket_Read_Data);    QObject::connect(socket, &QTcpSocket::disconnected, this, &MainWindow::socket_Disconnected);    //发送按键使能    ui->pushButton_Send->setEnabled(true);     qDebug() << "A Client connect!";} void MainWindow::socket_Read_Data(){    QByteArray buffer;    //读取缓冲区数据    buffer = socket->readAll();    if(!buffer.isEmpty())    {        QString str = ui->textEdit_Recv->toPlainText();        str+=tr(buffer);        //刷新显示        ui->textEdit_Recv->setText(str);    }} void MainWindow::socket_Disconnected(){    //发送按键失能    ui->pushButton_Send->setEnabled(false);    qDebug() << "Disconnected!";}

最后是ui的设计:

QT5如何实现简单的TCP通信

三、运行结果

QT5如何实现简单的TCP通信

到此,关于“QT5如何实现简单的TCP通信”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

QT5如何实现简单的TCP通信

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

QT5如何实现简单的TCP通信

这篇文章主要介绍“QT5如何实现简单的TCP通信”,在日常操作中,相信很多人在QT5如何实现简单的TCP通信问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”QT5如何实现简单的TCP通信”的疑惑有所帮助!接下来
2023-06-30

python如何实现socket简单通信

这篇文章将为大家详细讲解有关python如何实现socket简单通信,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先先来简单介绍下socket:(具体更详细介绍的可以在网上找找,都讲得非常详细),这里主
2023-06-14

如何进行TCP通信实现

本篇文章给大家分享的是有关如何进行TCP通信实现,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。TCP是底层通讯协议,定义的是数据传输和连接方式的规范。TCP协议,传输控制协议(
2023-06-05

C#如何实现TCP和UDP通信

本篇内容主要讲解“C#如何实现TCP和UDP通信”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#如何实现TCP和UDP通信”吧!C#在命名空间System.Net.Sockets中对伯克利套接
2023-07-05

Android中socket通信的简单实现

Android中socket通信简单实现,供大家参考,具体内容如下 socket通信需要有一个服务器和客户端,可以把同一个APP作为服务器跟客户端,也可以分开成两个APP。 先上个图:这里以一个APP作为服务器跟客户端为示例 1、添加网络访
2022-06-07

Android中socket通信简单实现

Android中socket通信简单实现 socket通信需要有一个服务器和客户端,可以把同一个APP作为服务器跟客户端,也可以分开成两个APP。 先上个图:这里以一个APP作为服务器跟客户端为示例 1、添加网络访问权限2、写服务器,在AP
2022-06-06

python实现简单socket通信的方法

本文实例讲述了python实现简单socket通信的方法。分享给大家供大家参考,具体如下: 刚刚开始接触python,实现了一个helloworld程序---关于udp协议的socket通信demo。 首先服务端这边的实现如下:import
2022-06-04

如何使用go net实现简单的redis通信协议

这篇文章主要为大家展示了“如何使用go net实现简单的redis通信协议”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用go net实现简单的redis通信协议”这篇文章吧。 图解red
2023-06-21

Java基于TCP如何实现简单聊天程序

本篇内容介绍了“Java基于TCP如何实现简单聊天程序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、如何实现TCP通信要实现TCP通信需
2023-06-29

Java简单实现UDP和TCP的示例

TCP实现TCP协议需要在双方之间建立连接,通过输入输出流来进行数据的交换,建立需要通过三次握手,断开需要四次挥手,保证了数据的完整性,但传输效率也会相应的降低。简单的TCP实现//服务端public class TcpServer { p
2023-05-30

C#基于TCP如何实现简单游戏客户端

本篇内容介绍了“C#基于TCP如何实现简单游戏客户端”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、界面左上方播放音频按钮和停止播放下面是
2023-06-21

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录