Qt建立服务端和客户端

news/2024/5/19 4:02:49

一. 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.mrgr.cn/p/14878518

相关文章

笔记-用Python脚本启停JAR程序

用Python脚本启停JAR程序&#xff0c;需要用到python中的以下内置模块 subprocess 是 Python 的一个标准库模块&#xff0c;用于在新进程中执行子命令&#xff0c;获取子进程的输入/输出/错误以及返回码等os 是 Python 的一个标准库模块&#xff0c;它提供了与操作系统交互的功…

社区版pycharm下载安装教程

参考:韩顺平——下载 在浏览器输入 www.jetbrains.com/进入pycharm官网 指向Developer Tools,点击Pycharm 点击Download 为了更好得跟踪韩老师的教程,我这里选择下载与韩老师一致的版本(对版本无要求的话直接点击download)找到2023.2.2的版本,在PyCharm Community Editio…

嵌入式笔记4.2 USART

目录一、USART 简介二、USART 寄存器详解寄存器基础信息寄存器地址寄存器名称与作用USART 寄存器组简表寄存器详解1. 控制寄存器 1(USART_CR1)2. 控制寄存器 2(USART_CR2)3. 控制寄存器 3(USART_CR3)4. 波特率寄存器(USART_BRR)5. 保护时间和预分频器寄存器(USART_GTP…

嵌入式笔记4.3 异常和中断详解

目录一、异常和中断的简介1. 外设中断处理流程2. 中断处理与异常处理3. 支持的异常和中断数量二、异常类型三、中断管理简介四、优先级定义五、向量表和向量表重定位六、中断输入和挂起行为七、异常流程简介1. 接受异常请求2. 异常进人流程3. 执行异常处理4. 异常返回八、中断控…

学习3:scrapy请求对象、模拟登录、POST请求、管道的使用、crawlspider爬虫类

请求对象 请求对象参数 scrapy.Request(url[],callback,method"GET",headers,body,cookies,meta,dont_filterFalse)callback 表示当前的url响应交给那个函数去处理method 指定请求方式headers 接受一个字典&#xff0c;其中不包括cookiesbody 接收json字符串&#…

数字旅游以科技创新为核心:推动旅游服务的智能化、精准化、个性化,为游客提供更加贴心、专业、高效的旅游服务

目录 一、引言 二、数字旅游以科技创新推动旅游服务智能化 1、智能化技术的应用 2、提升旅游服务的效率和质量 三、数字旅游以科技创新推动旅游服务精准化 1、精准化需求的识别与满足 2、精准化营销与推广 四、数字旅游以科技创新推动旅游服务个性化 1、个性化服务的创…

HTUCTF2024 河南师范大学招新赛

CRYPTO easyMath 题目 中国古代有很多人同名譬如同样叫孙子,有的人会兵法,有的人会数学你能帮我求解出这道题的答案吗?请开启容器后下载对应输出文件难度:简单 from secret import flag from Crypto.Util.number import *def s2n(string):return int(string.encode("u…

2024 年 5 月 1 日 周三 小雨 冷(384 字)

正文祖父见到我和见长,第一句话是好久都没看到我们的孙子了。然后第二句话直接把我们俩都干懵了。“你们有没有阿托品啊?”我第一反应是懵,第二反应是想笑。上哪儿给你找这种处方药去…… 这种 M 受体阻断剂管得还严,严重有机磷中毒的时候,一掰就是几十支。而且这药不是最…

安装库后JupyterLab一直报ModuleNotFoundError问题解决

背景&#xff1a; 先安装的Python3.10&#xff0c;安装在默认路径&#xff1a; C:\Users\#用户名省略#\AppData\Local\Programs\Python\Python310\ 后安装的Anaconda&#xff0c;更改过路径在D盘&#xff1a; D:\ProgramData\anaconda3 此时C盘Python安装路径下Scripts文件…

linux搭建个人博客wordpress(LNMP)

目录 准备阶段&#xff1a; 1.部署LNMP环境 2.配置数据库 3.上线WordPress博客平台 4.来到web界面安装博客平台 5.WordPress博客平台优化 总结&#xff1a; 利用LNMPWordPress搭建博客网站平台 WordPress是一款使用PHP语言开发的博客平台 1.易用性高&#xff1a;操作简单…

linuxI2C驱动核心梳理

参考文章《linux设备驱动开发详解》第15章 【linux iic子系统】i2c整体框图【精髓部分】(五)_bus_for_each_drv-CSDN博客 linux设备驱动程序——i2c总线的添加与实现_如何填充i2c_client-CSDN博客 【linux iic子系统】i2c设备与驱动匹配过程(三)_i2c_add_driver 如何和clen…

Python异步Redis客户端与通用缓存装饰器

前言 这里我将通过 redis-py 简易封装一个异步的Redis客户端&#xff0c;然后主要讲解设计一个支持各种缓存代理&#xff08;本地内存、Redis等&#xff09;的缓存装饰器&#xff0c;用于在减少一些不必要的计算、存储层的查询、网络IO等。 具体代码都封装在 HuiDBK/py-tools: …

Java web第五次作业

1.在idea中配置好数据源 2、视频案例中只给出了查询所有结果的示例&#xff0c;请自己完成添加、删除、修改操作的代码。以下供参 考。 Delete("delete from emp where id#{id}") public void delete(Integer id); 测试代码 Test public void testDelete(){ empMa…

mac安装虚拟机linux系统

需要下载的有&#xff1a;centos8镜像 , 虚拟器 VMware 软件包 , Termius 或者xshell 1. CentOS系统下载 linux系统一般有&#xff1a; CentOS、ubuntu、redhat&#xff0c;选择一种进行安装就可以 CentOS 2024 年开始停止维护和发布 CentOS8的下载与安装(windows下安装) 镜…

【初中英语提分神器】中考高频词汇大全001-A开头单词高频,轻松掌握,考试无忧!速来围观!

PDF格式公众号回复关键字:ZKGCH001副词 1 already 已经 She has already finished her homework. (她已经完成了她的作业。) 2 also 也,同样地,而且 They went to the movies, and I also went. (他们去看了电影,我也去了。) 3 almost 几乎,差不多 Ive almost finished…

循环神经网络模块介绍(Pytorch 12)

到目前为止&#xff0c;我们遇到过两种类型的数据&#xff1a;表格数据和图像数据。对于图像数据&#xff0c;我们设计了专门的卷积神经网络架构(cnn)来为这类特殊的数据结构建模。换句话说&#xff0c;如果我们拥有一张图像&#xff0c;我们 需要有效地利用其像素位置&#xf…

双向链表的简单实现

目录 1. 双向链表的结构 2.双向链表的实现 2.1 初始化 2.2 增 2.2.1 尾插 ​编辑 2.2.2 头插 3.删 2.3.1 尾删 2.3.2 头删 4. 找 5.任意位置插入 5.1 任意位置前插入 ​编辑 5.2 任意位置后插入 ​编辑 6. 任意位置删除 ​编辑 7. 改 8. 链表的销毁 3. 顺序…

Python编程——ModuleNotFoundError: No module named learning logs

Python编程:从入门到实践(2)第18章-从Django入手 执行命令 python manage.py makemigrations learning_logs 时报错,如图: 问题原因:learning_logs 错写成 learning logs正确代码如下:INSTALLED_APPS = [# 我的应用程序learning_logs,# 默认添加的应用程序django.contr…

Python第三方库的安装和导入

Python第三方库的安装和导入是Python编程中常见的操作,下面我将为您详细解释这两种操作,并提供相关案例。 Python中最常用的包管理工具是pip,可以方便地安装和管理第三方库。以下是几种常用的安装方法。目录一、Python第三方库的安装1. 使用pip命令行安装2. 使用PyCharm进行…

Python的国内安装源(也称为镜像源)

Python的国内安装源(也称为镜像源)数量会随着时间而增加或减少,因为新的镜像源可能会建立,而一些旧的镜像源可能会停止服务或不再更新。以下是一些常用的Python国内安装源(也称为PyPI镜像源)Python的国内安装源(也称为镜像源)数量会随着时间而增加或减少,因为新的镜像…