Qt建立服务端和客户端

一. C语言中

1. 服务器端流程Server

        1. 创建套接字--socket()

        2.将套接字与其ip地址,端口号进行绑定--bind()

        3. 将套接字设置成被动监听状态--listen()

        2和3是Qt中的listen(),1,2和3实质就是把自己的信息固定下来,等待别人与之通信

        4. 阻塞等待客户端的连接请求--accept()

        5. 进行通信 1)recv(),read()接收数据 send() write()发送数据

        6. 关闭套接字--close()

2. 客户端流程Client

        1. 创建套接字--socket()

        绑定ip及端口号(可选),此步可以随机让系统产生.

        2. 发送客户端的连接请求--connect()

        3, 进行通信 recv() read() 接收数据

        send() write() 发送数据

        4. 关闭套接字--close()

二. Qt中

1. 服务器端流程Server

  1. 创建套接字服务器 QTcpServer 对象

  2. 通过 QTcpServer 对象设置监听,即:QTcpServer::listen()

  3. 基于 qTcpserver::newconnection()信号检测是否有新的客户端连接

  4. 如果有新的客户端连接调用 QTcpSocket *QTcpserver::nextPendingconnection()得到通信的套接字对象

  5. 使用通信的套接字对象 QTcpSocket和客户端进行通信

    #include "widget.h"
    #include "ui_widget.h"
    
    Widget::Widget(QWidget *parent)
        : QWidget(parent)
        , ui(new Ui::Widget)
    {
        ui->setupUi(this);
        this->setWindowTitle("服务器");
        server = new QTcpServer(this);
        connect(server,&QTcpServer::newConnection,[=](){
            socket = server->nextPendingConnection();
            ui->checkroomTex->append("与客户建立了联接...");
            connect(socket,&QTcpSocket::readyRead,[=](){
                QString recMeg = socket->readAll();
                ui->checkroomTex->append("客户端输出:"+recMeg);
            });
            connect(socket,&QTcpSocket::disconnected,[=](){
                ui->checkroomTex->append("客户端断开了连接");
                socket->deleteLater();
            });
        });
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    
    void Widget::on_startBtn_clicked()
    {
        int port = ui->port->text().toInt();
        server->listen(QHostAddress::Any,port);
        ui->startBtn->setEnabled(false);
    
    }
    
    void Widget::on_senderBtn_clicked()
    {
        QString sendMsg = ui->senderTex->toPlainText();
        socket->write(sendMsg.toUtf8());
        ui->checkroomTex->append("服务器端输出:"+sendMsg);
        ui->senderTex->clear();
    }
    

2. 客户端流程Client

        1)创建通信的套接字类QTcpSocket对象

        2)使用服务器端绑定的IP和端口连接服务器QAbstractSocket::connectToHost()

        3)使用QTcpSocket对象和服务器进行通信

#include "widget.h"
#include "ui_widget.h"
#include <QHostAddress>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->setWindowTitle("客户端");
    //建立套接字
    socket = new QTcpSocket(this);
    //确认是否已经连接成功
    connect(socket,&QTcpSocket::connected,[=](){
        ui->checkroomTex->append("与服务器连接成功");
    });
    connect(socket,&QTcpSocket::readyRead,[=](){
        QString recMsg = socket->readAll();
        ui->checkroomTex->append("服务器输出"+recMsg);
    });
    connect(socket,&QTcpSocket::disconnected,[=](){
        ui->checkroomTex->append("服务器断开了");
        ui->linkserverBtn->setEnabled(true);
        ui->disconnectBtn->setEnabled(false);
    });
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_linkserverBtn_clicked()
{
    QString ip = ui->address->text();
    unsigned int port = ui->port->text().toUInt();

    socket->connectToHost(QHostAddress(ip),port);

    ui->linkserverBtn->setEnabled(false);
    ui->disconnectBtn->setEnabled(true);


}

void Widget::on_senderBtn_clicked()
{
    QString sendMsg = ui->senderTex->toPlainText();
    socket->write(sendMsg.toUtf8());
    ui->checkroomTex->append("客户端输出"+sendMsg);
    ui->senderTex->clear();
}

void Widget::on_disconnectBtn_clicked()
{
    socket->close();
    ui->linkserverBtn->setEnabled(true);
    ui->disconnectBtn->setEnabled(false);
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot实现实习管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现实习管理系统演示 摘要 近年来&#xff0c;信息化管理行业的不断兴起&#xff0c;使得人们的日常生活越来越离不开计算机和互联网技术。首先&#xff0c;根据收集到的用户需求分析&#xff0c;对设计系统有一个初步的认识与了解&#xff0c;确定实习管理系统…

【PX4-AutoPilot教程-TIPS】Matlab使用ROS Toolbox编译MAVROS2消息报错缺少geographic_msgs消息

Matlab使用ROS Toolbox编译MAVROS2消息报错缺少geographic_msgs消息的解决方法 问题描述解决方法 环境&#xff1a; MATLAB : R2022b ROS Toolbox : 1.6 Windows &#xff1a;Windows 10 22H2 ROS &#xff1a;ROS2 Foxy 问题描述 在使用Matlab的ROS Toolbox工具箱编译与…

JAVA基础之Swing窗体的几种布局

1、边框布局BorderLayout 特点&#xff1a;5个方位&#xff08;东&#xff08;East&#xff09;南&#xff08;north&#xff09;西(west)北(south)中(center)&#xff09; 是一种简单的布局策略。 使用时&#xff0c;应将其看成一个“组件”。 同样&#xff0c;首先应通…

VMware worksation 17 简易安装Centos8.2、Redhat8.2、Ubuntu16.04

系列文章目录 文章目录 系列文章目录前言一、VMware worksation 17 安装二、安装Centos8.2三、安装RHEL8.2四、安装Ubuntu16.04总结 前言 傻瓜式按照Linux系统&#xff0c;如果觉得简单&#xff0c;可以自定义设置&#xff0c;特别是配置一下磁盘空间大小&#xff0c;对以后排…

通过DataGrip将mysql表结构信息转存excel 复制select结果的insert插入语句

各位小伙伴们大家好&#xff0c;欢迎来到这个小扎扎的专栏 总结 | 提效 | 拓展&#xff0c;在这个系列专栏中记录了博主在学习期间总结的大块知识点&#xff0c;以及日常工作中遇到的各种技术点 ┗|&#xff40;O′|┛ &#x1f306; 内容速览 1 查询表结构信息&#xff0c;并…

我希望未来10年,人工智能可以帮我解决这4件小事

生活在一线大城市的我&#xff0c;现在几乎整天被大数据、人工智能、机器学习、智慧生活的词汇环绕立体包围着&#xff0c;让我时刻感觉到&#xff0c;再过10年&#xff0c;我们五一假期真的可以摆脱现在擦肩接踵的旅游盛况了。但我其实要求倒是没这么高&#xff0c;我真心希望…

AnaTraf 网络流量分析仪 - 网络性能检测与诊断(NPMD)

目录 网络流量回溯分析,快速定位故障 实时监控,洞察网络运行状况 性能分析,优化网络应用 即插即用,无需复杂配置 了解更多 近年来&#xff0c;随着互联网技术的不断发展,网络已经成为企业运营的基础设施。然而,复杂多变的网络环境也给企业的网络管理带来了新的挑战。如何快…

一部手机就能实现24小时AI实景自动无人直播:商业推广拓客进击的全新推广利器

随着科技的迅猛发展&#xff0c;AI实景自动无人直播软件正逐渐成为商家拓展业务的重要工具。其智能讲解、一键开播以及智能回复功能&#xff0c;使得商家能够高效地进行推广活动&#xff0c;而手机拍摄真实场景和自行搭建场景的灵活性&#xff0c;则赋予了直播画面更好的呈现效…

地下管线管网三维参数化建模软件MagicPipe3D V3.5

经纬管网建模系统MagicPipe3D&#xff08;www.magic3d.net&#xff09;自主安全可控&#xff0c;本地离线参数化构建三维管网模型&#xff08;管道、接头、附属物等&#xff09;&#xff0c;输出标准3DTiles、Obj等格式&#xff0c;支持Cesium、Unreal、Unity等引擎可视化查询分…

10最佳数据恢复软件,用于恢复丢失的数据

有时&#xff0c;您无意中、无意识地或其他人故意删除了您重要且有价值的数据&#xff0c;这些数据可以是文档、视频或图片。或者由于某些令人毛骨悚然的软件&#xff0c;数据可能已损坏。避免这种令人痛苦的时刻的最好方法是定期备份您的数据&#xff0c;但以防万一。那该怎么…

使用XPTable控件展示多窗口数据(XPTable控件使用说明七)

我给我的应用程序找到一个新的能力&#xff0c;因为有DEMO程序界面有6个窗口&#xff0c;我使用了2个显示器&#xff0c;一起来显示。

Carla基础 | Carla预编译版安装与ROS联合仿真图文教程

目录 1 什么是Carla&#xff1f;2 Carla预编译版安装2.1 独立显卡配置2.2 安装ROS2.3 启动虚拟环境2.4 安装Carla预编译版2.5 安装carla-ros-bridge 3 测试案例常见问题 1 什么是Carla&#xff1f; Carla是由西班牙巴塞罗那自治大学计算机视觉中心指导开发的开源仿真模拟器&…

项目管理-项目沟通管理

项目管理&#xff1a;每天进步一点点~ 活到老&#xff0c;学到老 ヾ(◍∇◍)&#xff89;&#xff9e; 何时学习都不晚&#xff0c;加油 1.项目沟通管理-主要内容 项目沟通管理过程--重点&#xff1a; ①ITTO 输入&#xff0c;输出工具和技术。 ②问题和解决方案。 ③论文…

爆火4年后,露营的风还能吹多久? | 最新快讯

五一假期你去露营了吗&#xff1f; 文 | 趣解商业&#xff0c;作者 | 刘亮 “不是说露营不火了吗&#xff1f;为何订个营地如此困难&#xff1f;”江女士疑惑地说&#xff0c;她原本计划“五一”期间带家人前往浙江安吉游玩&#xff0c;但早在4月中旬咨询时就已经无法预约。 露…

构造,CF989C. A Mist of Florescence

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 989C - Codeforces 二、解题报告 1、思路分析 题目让构造网格图…

学术咸鱼入门指南(1)

学术基础素养 一.巧用工具管理文献&#xff0c;形成自己的文献体系 养成习惯的第一步&#xff1a;文献命名 当你下载完一篇文献&#xff0c;应该做的第一步就是给文献重新命名。命名的逻辑可以随自己的喜好来&#xff0c;可以按照“发表年份作者文章标题”。 也可以使用文献…

hadoop启动后没有namenode,datanode等解决方法

之前用的是虚拟机&#xff0c;在虚拟机上安装的hadoop&#xff0c;但是后来&#xff0c;电脑恢复出厂设置了&#xff0c;什么都重新开始。就在本地安装 Linux 子系统。 但是&#xff0c;有时候start-dfs.sh后&#xff0c;jps出现错误。 像这种拒绝连接 解决办法就是如下&…

​可视化大屏C位图:3D模型,可视化大屏的画龙点睛之处

Hello&#xff0c;我是大千UI工场&#xff0c;本期可视化大屏的焦点图&#xff08;C位&#xff09;分享将图表作为焦点图的情形&#xff0c;欢迎友友们关注、评论&#xff0c;如果有订单可私信。 3D模型在可视化大屏中有很大的价值&#xff0c;以下是一些相关的优点&#xff1a…

【平时工作中的各种术语__持续更新~~~~】

中文&#xff1a; 1、jar包 JAR包&#xff08;Java Archive Package&#xff09;是一种将多个Java类文件以及与它们相关的元数据和资源&#xff08;如文本、图片等&#xff09;打包到一个单一文件中的归档工具。它基于ZIP文件格式。JAR文件主要用于分发和部署Java应用程序。J…

机器学习入门之模型性能评估与度量

文章目录 性能评估误差欠拟合和过拟合模型选择与数据拟合 性能度量二分类的混淆矩阵查全率查准率F1分数 P-R曲线ROC曲线AUC 性能评估 机器学习的模型有很多&#xff0c;我们在选择的时候就需要对各个模型进行对比&#xff0c;这时候就需要一个靠谱的标准&#xff0c;能够评估模…
最新文章