Qt+C++ TCP发送接收信息客户端与服务端窗体

news2024/11/17 17:46:43

 程序示例精选

Qt+C++ TCP发送接收信息客户端与服务端窗体

如需安装运行环境或远程调试,见文章底部微信名片,由专业技术人员远程协助!

前言

这篇博客针对<<Qt+C++ TCP发送接收信息客户端与服务端窗体>>编写代码,代码整洁,规则,易读。 应用推荐首选。


文章目录

        一、所需工具软件

        二、使用步骤

                1. 引入库

                2. 客户端代码

                3. 服务端代码

                4. 运行结果

         三、在线协助


一、所需工具软件

          1. Visual Studio

          2. C++

二、使用步骤

1.引入库

代码如下(示例):

#include "QTcpClinet.h"
#include "TcpServer.h"
#include"qstring.h"
#include"qdebug.h"

2.客户端代码

代码如下(示例):

#include "QTcpClinet.h"
 
QTcpClinet::QTcpClinet(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    socket = new QTcpSocket(this);
}
 
QTcpClinet::~QTcpClinet()
{
    delete this->socket;//回收内存
}
 
void QTcpClinet::on_btn_connect_clicked()
{
  if (ui.btn_connect->text()==tr("连接服务器"))
  {
    QString ip = ui.lineEdit_ip->text();//获取ip
    //取消已有的连接
    socket->abort();
    //连接服务器
    socket->connectToHost(ip, port);
    //如果连接成功
    if (isconnect)
    {
        ui.textEdit->append("The connection was successful!!");
        ui.btn_push->setEnabled(true);//按钮使能
        //修改按键文字
        ui.btn_connect->setText("断开服务器连接");
        //接收缓冲区(服务器)信息
    }
    else
    {
        ui.textEdit->append("The connection falied!!");
    }
  }
  else
  {
      //断开连接
      socket->disconnectFromHost();
      ui.btn_connect->setText("连接服务器");
      ui.btn_push->setEnabled(false);//关闭发送按钮使能
  }
 
}
 
//接收缓冲区信息函数
void QTcpClinet::ReadData()
{
    QByteArray buf = socket->readAll();
    ui.textEdit->append(buf);
}
//发送按钮事件
void QTcpClinet::on_btn_push_clicked()
{
    QByteArray data = ui.lineEdit_3->text().toUtf8();//获取lineEdit控件中的数据并发送给服务器
 
    //判断是否写入成功
    bool iswrite = socket->waitForBytesWritten();
    if (iswrite)
    {
        //写入成功
    }
    else
    {
        //没有写入成功
    }
}

3.服务端代码: 

#include "TcpServer.h"
#include"qstring.h"
#include"qdebug.h"
#pragma execution_character_set("utf-8")
TcpServer::TcpServer(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    server = new QTcpServer(this);
   //客户机连接信号槽
    connect(server, &QTcpServer::newConnection, this, &TcpServer::ClientConnect);
}
 
TcpServer::~TcpServer()
{
    server->close();
    server->deleteLater();
}
 
void TcpServer::on_btn_listen_clicked()
{
    if (ui.btn_listen->text()=="侦听")
    {
        //侦听指定端口的所有ip
        if (!server->listen(QHostAddress::Any, port))
        {
            //若出错,则输出错误信息
            qDebug() << server->errorString();
            return;
        }
        //修改按键文字
        ui.btn_listen->setText("取消侦听");
    }
    else
    {
        socket->abort();
        //取消侦听
        server->close();
        //修改按键文字
        ui.btn_listen->setText("侦听");
    }
}
 
void TcpServer::ClientConnect()
{
    //解析所有客户连接
    while (server->hasPendingConnections())
    {
        //连接上后通过socket获取连接信息
        QString str = QString("[ip:%1,port:%2]").arg(socket->peerAddress().toString()).arg(socket->peerPort());
        //提示连接成功
        ui.textEdit_server->append(str+"Connect to the server");
        //复选框选项为连接服务器的ip
        ui.comboBox->addItem(str);
        //将socket地址放入combobox属性内
        //ui.comboBox->setItemData(ui.comboBox->count()-1, QVariant((int)socket));
        //监听客户端是否有消息发送
    }
}
 
//获取客户端向服务器发送的信息
void TcpServer::ReadData1()
{
    QString str = QString("[ip:%1,port:%2]").arg(socket->peerAddress().toString()).arg(socket->peerPort());
    ui.textEdit_server->append(str +QString(buf));
}
 
//服务器向客户端发送信息
void TcpServer::on_btn_server_clicked()
{
  if(ui.comboBox->count()== 0)return;
  //QTcpSocket* skt=  (QTcpSocket*)ui.comboBox->itemData(ui.comboBox->currentIndex()).value<int>();
  socket->write(ui.lineEdit1->text().toUtf8());
}

4.运行结果如下: 

 

三、在线协助: 

如需安装运行环境或远程调试,见文章底部微信名片,由专业技术人员远程协助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/125575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux常用基本指令详解

各位看客在看本期博客之前请放轻松心态&#xff0c;以免内容过长造成不适~ 目录 1. ls指令 1.1 ls指令的作用 1.2 ls常用的指令选项 2. pwd指令 3. cd指令 3.1 cd .. 3.2 cd 文件路径 3.3 cd ~ 3.4 cd - 4.热键Tab 4.1 使用Tab键进行命令的自动补齐 4.2 使用Tab键进行查看…

driftingblues4靶机(zbarimg二维码破解)

环境准备 靶机链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;qyha 虚拟机网络链接模式&#xff1a;桥接模式 攻击机系统&#xff1a;kali linux 2021.1 信息收集 1.arp-scan -l 探测目标靶机 2.nmap -p- -A -T4 192.168.1.107 扫描靶机开放端口和相应服务 3.…

【财务】FMS财务管理系统---付款管理

前一篇介绍了财务应付管理中的结算明细报表、结算单以及税票管理几个部分&#xff0c;本篇将分享下财务付款相关的内容。 付款最终是要汇款或现金支付给供货商或合作商家&#xff0c;公司的现金流就会减少&#xff0c;所以是不是所有的付款申请都要付&#xff1f;什么时间付出才…

一体式无线阀控超声水表在西北某市大用户用水计量收费管理项目应用案例

多年来&#xff0c;西北某市的工业园区供水公司对工业企业用户的用水收费一直采取业务员手动抄表、上门收费的方式。不仅效率低、浪费人力资源&#xff0c;而且供水公司很难掌握地区用水情况&#xff0c;不便于统一调度和管理。 为此&#xff0c;该工业园区安装了平升电子一体…

【微信小程序项目的基本组成结构】

项目的基本组成结构 ├── app.js # 小程序的逻辑文件 ├── app.json # 小程序的配置文件 ├── app.wxss # 全局公共样式文件 ├── pages # 存放小程序的各个页面 │ ├── index # index页面 │ │ ├── index.js # 页面逻辑 │ │ ├── index.wxml # 页面结构 │…

数据安全领导者和引路人的“实至名归” |美创2022年终盘点

走过2022&#xff0c;结束三年抗疫 无惧数据安全道路的风雨 美创人“毅”起前行 诠释数据安全领导者和引路人 真正做到“实至名归” 2022年&#xff0c;美创科技完成股改 正式更名为⇲ 2022年&#xff0c;数据安全领导力广受第三方认可 数据安全主要服务供应商 专业型安全…

踩坑记录2——RK3588跑通YOLO v5+DeepSORT

上篇说到RK3588编译OpenCV, 这篇记录一下跑通YOLO v5DeepSORT的愉(chi)快(shi)历程. 1. 保证编译OpenCV时关联了ffmpeg 如果本身缺少ffmpeg而编译了没有ffmpeg版本的OpenCV, 则视频无法读取. 解决方案参照CSDN, 首先安装ffmpeg: sudo apt install -y ffmpeg之后安装一堆dev:…

嵌入式初学者的2022年度总结

目录 学习过程 人工智能 嵌入式 51单片机 STM32 MicroPython Arduino 其他 未来计划 RT-Thread LIUNX 其他 总结 学习过程 今年二月份才开始写博客&#xff0c;到现在一共写了131篇文章&#xff0c;其中包含了Python&#xff0c;Mysql&#xff0c;51单片机&#…

HTML5 音视频

文章目录HTML5 音视频video元素简介简单使用多种格式的视频自定义视频audio元素简介简单使用设置网页背景音乐多种格式的音频自定义音频HTML5 音视频 video元素 简介 语法 <video>你的浏览器不支持video元素&#xff0c;请升级到最新版本 </video>说明 如果浏…

spring cloud、gradle、父子项目、微服务框架搭建---引入MyBatis-Plus(四)

总目录 https://preparedata.blog.csdn.net/article/details/120062997 文章目录总目录一、引入依赖二、配置mybatis-plus1.配置数据源2.配置mybatis-plus三、服务启动类配置MapperScan四、新建实体五、新建Mapper接口六、新建Mapper接口的Mapper.xml七、新建接口八、新建接口…

智能优化算法——正余弦优化算法(SCA)及其改进策略

正余弦优化算法&#xff08;SCA&#xff09;及其改进策略一、基本介绍1. 背景2. 算法简介二、基本的SCA算法1. 算法介绍2. 算法步骤三、算法分析1. 正余弦分布2. 算法实验结果3. 算法优缺点四、SCA改进策略1. 参数的改进2. 应用权重更新机制3. 基于反向学习的改进五、引用与代码…

Linux操作系统之进程间通信—信号量

文章目录一、信号量的定义&#xff1f;二、信号量的使用三、ipcs的使用一、信号量的定义&#xff1f; 信号量是一个特殊的变量&#xff0c;一般取正数值。它的值代表允许访问的资源数目&#xff0c;获取资源时&#xff0c;需要对信号的值进行原子减一&#xff0c;该操作被称为…

计算方阵的迹(主对角线上各元素之和)numpy.trace()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 计算方阵的迹&#xff08;主对角线上各元素之和&#xff09; numpy.trace() [太阳]选择题 以下关于python代码表述正确的一项是&#xff1f; import numpy as np A np.array([[1,2,3],[4,5…

ArcGIS基础实验操作100例--实验14设置字段别名

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验14 设置字段别名 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1&…

CSS知识点精学2-盒子模型

CSS第三特性&#xff1a;优先级 &#xff08;优先级是三大特性中最复杂且重要的&#xff0c;前两大特性分别是继承性和层叠性&#xff0c;已经在CSS知识点精学1里面讲了&#xff09; 优先级 特性&#xff1a;不同选择器具有不同的优先级&#xff0c;优先级高的选择器样式会覆…

C++ 函数模板、具体化模板的分文件书写

函数模板分为普通函数模板和具体化函数模板 普通函数模板&#xff1a;函数模板只是函数的描述符&#xff0c;没有实体&#xff0c;创建函数模板的代码整体放在头文件中&#xff1b; 具体化函数模板&#xff1a;具体化函数模板有实体&#xff0c;编译时和普通函数一样&#xf…

Linux多线程互斥量与原理剖析

这里我们简要介绍了线程间互斥相关的概念&#xff0c;并对加锁的一种原理进行了剖析&#xff0c;本人目前理解尚浅&#xff0c;若文中有表述不当的地方还望理解并指正&#xff0c;谢谢大家&#xff01; 文章目录一&#xff1a;线程间互斥相关背景概念二&#xff1a;互斥量mutex…

摄影测量学:期末考试重点总结

本文参考《摄影测量学》 (王佩军&#xff0c;徐亚明 编著)&#xff1b; 01 不同阶段的摄影测量的对比&#xff0c;课本表1-1 &#xff08;原始资料、投影方式、仪器记不住&#xff0c;那名字总该记住吧&#xff1f;模拟摄影测量、解析摄影测量、数字摄影测量&#xff09; 02 量…

Python中的所有运算符以及运算符的优先级

文章目录前言一、算术运算符二、赋值运算符三、比较运算符四、逻辑运算符五、位运算符六、运算符的优先级案例实战总结前言 运算符是一些人为定义的特殊符号&#xff0c;比如我们生活当中最常见的 、-、、&#xff0c;它们主要用于数学计算、比较大小和逻辑运算等等。那这些运…

数字孪生医院的智能化运营平台建设内容

随着国务院办公厅《关于推动公立医院高质量发展的意见》印发&#xff0c;高质量发展已成为医院发展的主旋律。当前市场经济正处于增长速度换挡期&#xff0c;医院面临着转型发展的紧迫性&#xff0c;运 用新一代信息技术促进医院管理体系与管理能力现代化发展势在必行。基于数字…