当前位置: 首页 > news >正文

72-UDP协议工作原理及实战

#ifndef UDPCOMM_H
#define UDPCOMM_H#include <QMainWindow>
#include <QUdpSocket> // 用于发送和接收UDP数据报
#include <QtNetwork>QT_BEGIN_NAMESPACE
namespace Ui { class udpComm; }
QT_END_NAMESPACEclass udpComm : public QMainWindow
{Q_OBJECTpublic:udpComm(QWidget *parent = nullptr);~udpComm();private slots:void on_pushButton_start_clicked();void on_pushButton_stop_clicked();void on_pushButton_sengmsg_clicked();void on_pushButton_broadastmsg_clicked();private:Ui::udpComm *ui;// 自定义函数获取本机的IP地址
public:QUdpSocket *udpsocket;QString GetLocalIpAddress(); // 获取本机IP地址// 自己定义槽
private slots:void  SocketReadyReadData(); // 读取socket传输数据信息
};
#endif // UDPCOMM_H//.c#include "udpcomm.h"
#include "ui_udpcomm.h"
#include <QMessageBox>udpComm::udpComm(QWidget *parent): QMainWindow(parent), ui(new Ui::udpComm)
{ui->setupUi(this);QString strip=GetLocalIpAddress(); // 调用此函数返回对应本机IP地址QMessageBox::information(this,"结果",strip,QMessageBox::Yes);ui->comboBoxtargetip->addItem(strip); // 将IP地址显示到comboBox控件udpsocket=new QUdpSocket(this);connect(udpsocket,SIGNAL(readyRead()),this,SLOT(SocketReadyReadData()));}udpComm::~udpComm()
{delete ui;
}void udpComm::on_pushButton_start_clicked()
{quint16 port=ui->spinBoxbindport->value(); // 本机UDP端口if(udpsocket->bind(port)){ui->plainTextEditdispmsg->appendPlainText("**********绑定成功**********");ui->plainTextEditdispmsg->appendPlainText("$$$$$$$$$$绑定端口$$$$$$$$$$:"+QString::number(udpsocket->localPort()));ui->pushButton_start->setEnabled(false);ui->pushButton_stop->setEnabled(true);}else{ui->plainTextEditdispmsg->appendPlainText("**********绑定失败**********");}
}void udpComm::on_pushButton_stop_clicked()
{udpsocket->abort();ui->pushButton_start->setEnabled(true);ui->pushButton_stop->setEnabled(false);ui->plainTextEditdispmsg->appendPlainText("**********已经停止服务**********");}void udpComm::on_pushButton_sengmsg_clicked()
{QString targetIpAddress=ui->comboBoxtargetip->currentText(); // 获取目标IP地址QHostAddress targetaddress(targetIpAddress);quint16 targetport=ui->spinBoxtargetport->value(); // 获取端口QString strmsg=ui->lineEditmsg->text(); // 获取发送消息内容QByteArray str=strmsg.toUtf8();udpsocket->writeDatagram(str,targetaddress,targetport); // 发送数据报信息ui->plainTextEditdispmsg->appendPlainText("[out]:"+str);ui->lineEditmsg->clear(); // 清除编辑框控件内容ui->lineEditmsg->setFocus(); // 将光标焦点定位到编辑框控件}void udpComm::on_pushButton_broadastmsg_clicked()
{quint16 targetport=ui->spinBoxtargetport->value(); // 获取端口QString strmsg=ui->lineEditmsg->text(); // 获取发送消息内容QByteArray str=strmsg.toUtf8();udpsocket->writeDatagram(str,QHostAddress::Broadcast,targetport); // 发送数据报信息ui->plainTextEditdispmsg->appendPlainText("[broadcast]:"+str);ui->lineEditmsg->clear(); // 清除编辑框控件内容ui->lineEditmsg->setFocus(); // 将光标焦点定位到编辑框控件
}QString udpComm::GetLocalIpAddress()
{// 根据主机名称,获取IP地址QString strHostName=QHostInfo::localHostName();QHostInfo hostinfo=QHostInfo::fromName(strHostName); //  通过主机名称获取IP地址QString strLocalIp="";QList<QHostAddress> addresslist=hostinfo.addresses(); // IP地址列表if(!addresslist.isEmpty()){for(int i=0;i<addresslist.count();i++){QHostAddress hostaddr=addresslist.at(i);if(QAbstractSocket::IPv4Protocol==hostaddr.protocol()){strLocalIp=hostaddr.toString();break;}}}return strLocalIp;
}void udpComm::SocketReadyReadData()
{// 读取接收到的数据报信息// 用此函数返回true至少有一个数据报需要读取while(udpsocket->hasPendingDatagrams()){QByteArray datagrams;datagrams.resize(udpsocket->pendingDatagramSize());QHostAddress paddress;quint16 pport;// 通过readDatagram()此函数读取数据报,udpsocket->readDatagram(datagrams.data(),datagrams.size(),&paddress,&pport);QString strs=datagrams.data();QString peer="[From:"+paddress.toString()+":"+QString::number(pport)+"]:";ui->plainTextEditdispmsg->appendPlainText(peer+strs);}
}

 

相关文章:

72-UDP协议工作原理及实战

#ifndef UDPCOMM_H #define UDPCOMM_H#include <QMainWindow> #include <QUdpSocket> // 用于发送和接收UDP数据报 #include <QtNetwork>QT_BEGIN_NAMESPACE namespace Ui { class udpComm; } QT_END_NAMESPACEclass udpComm : public QMainWindow {Q_OBJECT…...

数据结构——顺序表的实现

数据结构——顺序表的实现 一 关于顺序表的简单知识二 动态顺序表 一 关于顺序表的简单知识 1.顺序表的底层结构是数组&#xff0c;在数组的基础上增加了增&#xff0c;删&#xff0c;查&#xff0c;改等方法。 2.顺序表的分类&#xff1a;静态顺序表和动态顺序表 静态顺序表的…...

【牛客面试必刷TOP101】Day33.BM70 兑换零钱(一)和BM71 最长上升子序列(一)

文章目录 前言一、BM70 兑换零钱(一)题目描述题目解析二、BM71 最长上升子序列(一)题目描述题目解析总结 前言 一、BM70 兑换零钱(一) 题目描述 描述&#xff1a; 给定数组arr&#xff0c;arr中所有的值都为正整数且不重复。每个值代表一种面值的货币&#xff0c;每种面值的货币…...

重构与优化-优化函数调用(5)

Rename Method Rename Method(“函数改名”),它的核心目标是通过修改方法的名称来更好地反映其功能,提高代码的可读性和维护性。这项重构不仅适用于Java,也同样适用于其他面向对象的编程语言。下面是进行Rename Method重构时的一些关键点和步骤: 关键目的 提升代码清晰…...

6月18日(周二)A股行总结:A股震荡收涨,车路云概念全日强势,10年、30年国债期货齐创新高

车路云概念股发力上涨&#xff0c;中海达、华铭智能等多股20CM涨停。半导体板块走强&#xff0c;中芯国际港股上涨近&#xff13;% 。白酒板块下跌&#xff0c;贵州茅台跌1.3% 。30年期及10年期国债期货主力合约均创上市以来新高。 周二&#xff0c;A股全日窄幅震荡 沪指收涨0…...

今年的618,似乎很平淡!

电商平台取消预售制度的第一个大促&#xff0c;快递业表现如何&#xff1f; 今年的618大促与往年有些不同&#xff0c;自4月起&#xff0c;天猫、京东、快手等主流平台相继官宣取消预售&#xff0c;打出“现货开卖”标签&#xff0c;这意味着消费者不用再被“烧脑”的优惠计算…...

嵌入式中间件_3.嵌入式中间件的一般架构

根据嵌入式中间件的不同类型和其应用对象的不同&#xff0c;其架构也有所不同&#xff0c;通常嵌入式中间件没有统一的架构&#xff0c;这里仅仅列举两种中间件架构。 1.消息中间件 1.1消息中间件原理架构 消息中间件是消息传输过程中保存消息的一种容器。它将消息从它的源中…...

Java基础 - 练习(二)打印菱形

Java基础练习 打印菱形&#xff0c;先上代码&#xff1a; // 方法一&#xff1a;基础&#xff0c;好理解 public static void diamond() {//控制行数for (int i 1; i < 4; i) {//空格的个数for (int k 1; k < 4 - i; k) {System.out.print(" ");}//控制星星…...

链表OJ--超详细解析

链表OJ 文章目录 链表OJ1. 反转链表2. 返回K值3. 链表的中间节点4. 回文链表5. 相交链表6. 带环链表6.1 为什么一定会相遇&#xff0c;有没有可能会错过&#xff0c;或者出现永远追不上的情况&#xff0c;请证明6.2 slow一次走一步&#xff0c;fast如果一次走3步&#xff0c;走…...

JavaFX 分隔符

Separator类表示水平或垂直分隔线。它分割元素&#xff0c;不产生任何动作。 我们可以设计风格&#xff0c;应用视觉效果&#xff0c;并为分隔符设置动画。 默认情况下&#xff0c;分隔符是水平的。我们可以使用setOrientation方法改变它的方向。 Separator类扩展了Node类。…...

mysql安装配置教程(Linux+Windows)

mysql安装配置教程&#xff08;LinuxWindows&#xff09; 文章目录 mysql安装配置教程&#xff08;LinuxWindows&#xff09;摘要在 Linux 上安装和配置 MySQL1. 安装 MySQLUbuntu/DebianCentOS/RHEL 2. 配置 MySQL初始化 MySQL登录 MySQL创建数据库和用户配置 MySQL 文件 3. 测…...

MySQL数据库与基本操作(增删改查)

一、数据库的基本概念 数据库要学习的四个基本概念&#xff0c;主要是&#xff1a;数据、数据库系统、数据库、数据管理系统。数据&#xff08;Date&#xff09;是描述事物的记录&#xff0c;数据库系统&#xff08;DBS&#xff09;&#xff0c;数据库管理系统&#xff08;DBMS…...

【学习总结】SpringBoot中使用单例模式+ScheduledExecutorService实现异步多线程任务(若依源码学习)

最近在学习若依这个开源项目&#xff0c;发现他记录登录日志的时候使用了异步线程去记录日志&#xff0c;觉得这个方案也挺不错的&#xff0c;在此学习记录下来&#xff0c;以后在工作中也能提供一种思路&#xff0c;其他小伙伴如果有觉得不错的方案也可以在评论区里留言&#…...

shell脚本编程(概念、编程和语句)

一、shell脚本概述 1、shell脚本概念 Shell 脚本是利用 shell 的功能所写的一个程序。这个程序是使用纯文本文件&#xff0c;将一些 shell 的语法与命令&#xff08;含外部命令&#xff09;写在里面&#xff0c;搭配正则表达式、管道命令与数据流重定向等功能。 2、Shell 脚…...

设置角色运动的动画

(1) 打开Assets-UnityTechnologies-Animation-Animators&#xff0c;Create-Animation-Controller,命名为JohnLemon (2) 打开JohnLemon&#xff0c;出现下图 (3) 依次将Assets-UnityTechnologies-Animation-Animation中的JohnIdle和JohnWalk拖放到Base Layer窗口中 (4) 右击Idl…...

OKR:2024年目标和关键成果常见问题

什么是目标和关键结果&#xff08;OKR&#xff09;&#xff1f; 目标和关键结果&#xff08;#OKR#&#xff09;是一种由结果驱动的目标制定方法。在企业中&#xff0c;OKR经常被用来指导基于结果的成功。使用结果而不是任务作为驱动力&#xff0c;OKRs 鼓励通过度量指标对实现成…...

轻量级 ioc/aop 框架 loveqq 1.0 发布,完全替换掉若依底层 spring 及其 starter

loveqq-framework 轻量级 ioc/aop 框架&#xff0c;比 spring 更强大的条件注解推断&#xff0c;打包后支持 jar index 启动。 本次更新&#xff1a; 正式更名为&#xff1a;loveqq-famework 新增&#xff1a;loveqq-boot-starter-mybatis 新增&#xff1a;loveqq-boot-start…...

【递归、搜索与回溯】DFS解决FloodFill算法

一、经验总结 之前我们已经研究过了BFS解决FloodFill算法&#xff1a;【优选算法】BFS解决FloodFill算法-CSDN博客 DFS只是遍历顺序发生了变化&#xff0c;其他需要注意的点大差不差。 二、相关编程题 2.1 图像渲染 题目链接 733. 图像渲染 - 力扣&#xff08;LeetCode&am…...

【Spine学习12】之 事件帧

1、新建事件帧&#xff1a; 2、选择第8s的攻击帧&#xff0c;点击第一步新建的attack事件帧前面的钥匙 这样每次动作到8s的时候会自动跳出事件帧提示 这个文字实际动画不会显示 事件是动画过程中所发生情况的触发器。 给程序员识别的...

【C语言习题】31.冒泡排序

文章目录 作业标题作业内容2.解题思路3.具体代码 作业标题 冒泡排序 作业内容 实现一个对整形数组的冒泡排序 2.解题思路 先了解一下冒泡排序&#xff1a; 两两相邻的元素进行比较&#xff0c;如果前面元素大于后面元素就交换两个元素的位置&#xff0c;最终的结果是最大的…...

【Spring Cloud应用框架】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…...

Repetition Improves Language Model Embeddings论文阅读笔记

文章提出了一种提高decoder-only LLM的embedding能力的方法&#xff0c;叫echo embeddingslast-token pooling&#xff08;即直接选最后一个token作为句子的embedding&#xff09;和直接mean pooling都不如文章提出的echo embedding&#xff0c;做法是把句子重复两次&#xff0…...

工具清单 - Bug追踪管理

# 工具清单 Bugzilla在新窗口打开 - General-purpose bugtracker and testing tool originally developed and used by the Mozilla project. MPL-2.0 PerlBumpy Booby在新窗口打开 - Simple, responsive and highly customizable PHP bug tracking system. (Source Code在新窗…...

企业内网是如何禁用U盘的?电脑禁用U盘有哪些方法?

在当今企业环境中&#xff0c;数据安全和信息保护至关重要。 为了防止数据泄露和恶意软件传播&#xff0c;很多企业选择在内网中禁用U盘&#xff0c;以控制数据的物理传输。 小编这就来给大家总结一份详细指南&#xff01;&#xff01; 关于企业内网如何禁用U盘的指南&#x…...

怎样打印微信文档文件?

在日常生活和工作中&#xff0c;我们经常需要打印微信中的文档文件&#xff0c;无论是工作资料、学习笔记还是其他重要信息。随着科技的发展&#xff0c;我们不再需要前往打印店进行繁琐的操作&#xff0c;而是可以通过一些便捷的在线打印平台轻松实现。今天&#xff0c;我们就…...

【讲解下Pip换源】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…...

分享:2024年(第12届)“泰迪杯”数据挖掘挑战赛省级奖项获奖名单公示

本次竞赛有评选省奖的省份有广东省、广西壮族自治区、河北省、湖北省。各省奖项依据“泰迪杯”全国评审专家组统一评阅的最终成绩区分省份后从高到低依序按比例产生。 广东省 省级奖项获奖名单公示 奖项设置&#xff1a; 一等奖&#xff1a;约占该省份队伍总数的5%&#xff0…...

后端开发中缓存的作用以及基于Spring框架演示实现缓存

缓存的作用及演示 现在我们使用的程序都是通过去数据库里拿数据然后展示的 长期对数据库进行数据访问 这样数据库的压力会越来越大 数据库扛不住了 创建了一个新的区域 程序访问去缓存 缓存区数据库 缓存里放数据 有效降低数据访问的压力 我们首先进行一个演示 为了演示…...

Redis原理篇——分布式锁

Redis原理篇——分布式锁 分布式锁是什么&#xff1f;分布式锁有哪些特性&#xff1f;分布式锁常用实现方式Redis 实现分布式锁一、简单的 Redis 锁二、带过期时间的 Redis 锁三、加上 Owner 的 Redis 锁四、Lua 脚本确保原子性 分布式锁是什么&#xff1f; 分布式锁是在分布式…...

css3多列布局

css3多列布局 colmns属性 columns属性是一个简写属性 column-count属性&#xff1a;定义列的数量或者允许的最大列数 auto 为默认值&#xff0c;用于表示列的数量由其他css属性决定number 必须是正整数&#xff0c;用于定义列数量 column-width属性&#xff1a;定义列的宽度 …...

深圳横岗做网站的/app推广策略

转载&#xff1a;https://blog.csdn.net/u011762993/article/details/40898871 一、使用方法 假设创建的对话框的类名是CMyDlg&#xff0c;具体过程如下&#xff1a; 步骤一&#xff1a;在CMyDlg对话框界面单击右键进入对话框的属性设置界面&#xff0c;将Border设置为Resiz…...

猎头公司网站建设/交易平台

摘 要&#xff1a;撰文主要介绍了图像处理的发展趋势&#xff0c;对图像处理智能化的理论研究、智能高效的算法和并行处理硬件系统等几个有关智能处理的问题进行了综诉和评论。无论从分析现代自身发展的能力或是对现代的对数字所处理的信号等有关问题&#xff0c;并列举与科技图…...

wordpress bbs插件/深圳招聘网络推广

1. 前言&#xff1a;前几篇文章分享了下 MyBatis 拦截器的相关知识&#xff0c;这里再分享下自己项目中遇到的一个问题&#xff0c;然后通过自定义的拦截器快速的解决了问题。2. 项目用到的技术&#xff1a;SpringBoot&#xff0c;MyBatis.....3. 业务需求&#xff1a;最近项目…...

电商网站建设思维导图/武汉seo关键字推广

如何确定域在结构中的字节偏移&#xff1f;ANSI C 在<stddef.h> 中定义了offsetof() 宏, 用offsetof(struct s, f) 可以计算出域f 在结构s 中的偏移量。如果出于某种原因, 你需要自己实现这个功能, 可以使用下边这样的代码: #define offsetof(type, f) ((size_t) \ (…...

打造网站品牌/seo排名分析

英文名&#xff1a;DotNetTextBox V6.0 WYSWYG Web Control For Asp.Net2.0/3.0/3.5 Retail and Free 中文名&#xff1a;DotNetTextBox V6.0 所见即所得编辑器控件 For Asp.Net2.0/3.0/3.5 商业版&免费版 类型: 盈利性质网站及商业用户使用(商业版),个人网站及非盈利性用户…...

做地方网站数据哪里来/信息流优化师没经验可以做吗

链接地址&#xff1a;http://blog.csdn.net/niuox/article/details/7527876 在以往的关于事件处理的程序中&#xff0c;我们更多的是采用一种循环等待的方式&#xff0c;即为了检测某个事件是否发生&#xff0c;循环的检测某个变量是否发生变化但这样会占用大量的资源。而C# …...