pyqt写一个TCP(UDP)检测工具

         先用电脑连接到目标WIFI,再运行以下代码。

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtNetwork import *class NetTestTool(QWidget):def __init__(self):super().__init__()self.init_ui()self.tcp_socket = QTcpSocket()self.udp_socket = QUdpSocket()self.udp_socket.readyRead.connect(self.udp_receive)self.add_connection_check()def add_connection_check(self):# 新增连接检测组件check_btn = QPushButton("检测连接", clicked=self.check_connection)self.status_light = QLabel("◌")self.layout().insertWidget(1, check_btn)self.layout().insertWidget(2, self.status_light)# TCP连接信号绑定self.tcp_socket.connected.connect(lambda: self.update_status(True))self.tcp_socket.errorOccurred.connect(lambda: self.update_status(False))def check_connection(self):ip = self.ip_input.text()port = int(self.port_input.text())if self.protocol.currentText() == "TCP":self.tcp_socket.abort()  # 终止旧连接self.tcp_socket.connectToHost(ip, port, QIODevice.ReadWrite)# 设置5秒超时QTimer.singleShot(5000, lambda: self.update_status(False)if self.tcp_socket.state() == QAbstractSocket.ConnectingStateelse None)else:  # UDP检测self.udp_socket.writeDatagram(b"PING", QHostAddress(ip), port)QTimer.singleShot(3000, lambda: self.update_status(False)if "[UDP响应]" not in self.recv_text.toPlainText()else None)def update_status(self, is_connected):color = "green" if is_connected else "red"text = "连接正常" if is_connected else "连接失败"self.status_light.setStyleSheet(f"color:{color}; font-size:24px;")self.status_light.setText("●" if is_connected else "◌")self.status.showMessage(text)def udp_receive(self,data):# 原有代码...if data == "PONG":  # 设备需返回PONG响应self.recv_text.append(f"[UDP响应] {data}")self.update_status(True)def init_ui(self):self.setWindowTitle("网络调试工具")layout = QVBoxLayout()# 协议选择self.protocol = QComboBox()self.protocol.addItems(["TCP", "UDP"])# 地址端口输入ip_layout = QHBoxLayout()self.ip_input = QLineEdit("192.168.4.2")self.port_input = QLineEdit("8080")ip_layout.addWidget(QLabel("地址:"))ip_layout.addWidget(self.ip_input)ip_layout.addWidget(QLabel("端口:"))ip_layout.addWidget(self.port_input)# 数据发送区域send_layout = QHBoxLayout()self.send_text = QTextEdit()self.send_btn = QPushButton("发送")self.send_btn.clicked.connect(self.send_data)send_layout.addWidget(self.send_text)send_layout.addWidget(self.send_btn)# 接收显示区域self.recv_text = QTextBrowser()self.clear_btn = QPushButton("清空")self.clear_btn.clicked.connect(self.recv_text.clear)# 状态栏self.status = QStatusBar()# 布局组装layout.addWidget(self.protocol)layout.addLayout(ip_layout)layout.addLayout(send_layout)layout.addWidget(QLabel("接收数据:"))layout.addWidget(self.recv_text)layout.addWidget(self.clear_btn)layout.addWidget(self.status)self.setLayout(layout)def send_data(self):protocol = self.protocol.currentText()data = self.send_text.toPlainText().encode()ip = self.ip_input.text()port = int(self.port_input.text())try:if protocol == "TCP":self.tcp_socket.connectToHost(ip, port)self.tcp_socket.write(data)self.tcp_socket.readyRead.connect(self.tcp_receive)else:self.udp_socket.writeDatagram(data, QHostAddress(ip), port)self.status.showMessage("发送成功")except Exception as e:self.status.showMessage(f"错误: {str(e)}")def tcp_receive(self):data = self.tcp_socket.readAll().data().decode()self.recv_text.append(f"[TCP接收] {data}")def udp_receive(self):while self.udp_socket.hasPendingDatagrams():datagram = self.udp_socket.receiveDatagram()data = datagram.data().data().decode()self.recv_text.append(f"[UDP接收] {data}")if __name__ == "__main__":app = QApplication(sys.argv)window = NetTestTool()window.resize(600, 400)window.show()sys.exit(app.exec_())

测试结果

        连接正常

         连接错误

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

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

相关文章

趣味编程:梦幻万花筒

目录 1.效果展示 2.源码展示 3.代码逻辑详解 3.1 头文件与宏定义 3.2 HSV函数转RGB颜色函数 3.3 主函数 初始化部分 循环部分 线条绘制部分 刷新和延时部分 结束部分 4.小结 本篇博客主要介绍趣味编程用C语言实现万花筒小程序。 1.效果展示 2.源码展示 #define…

软件开发各阶段的自动化测试技术详解

引言 在当今快速迭代的软件开发环境中,自动化测试已成为保证软件质量、提高测试效率的重要手段。本文将深入探讨软件开发生命周期各个阶段的自动化测试技术,包括单元测试、代码级集成测试、Web Service测试和GUI测试的自动化实现方法。 单元测试的自动…

Elasticsearch:我们如何在全球范围内实现支付基础设施的现代化?

作者:来自 Elastic Kelly Manrique SWIFT 和 Elastic 如何应对基础设施复杂性、误报问题以及日益增长的合规要求。 金融服务公司在全球范围内管理实时支付方面面临前所未有的挑战。SWIFT(Society for Worldwide Interbank Financial Telecommunication -…

day009-用户管理专题

文章目录 1. 创建包含时间的文件2. 与用户相关的文件3. 用户分类4. 与用户相关的命令4.1 添加用户4.2 删除用户4.3 查看用户4.4 修改用户密码 5. sudo6. 思维导图7. 老男孩思想-学习方法 1. 创建包含时间的文件 或$()是替换符号,可以将命令的结果作为字符串或变量的…

shell脚本实现远程重启多个服务器

直接deepseek帮写脚本 remoteReboot.sh #!/bin/bash # 配置文件路径&#xff08;格式&#xff1a;每行一个服务器地址&#xff09; SERVER_FILE"servers.list" # 读取服务器列表 mapfile -t SERVERS < "$SERVER_FILE" for server in "${SERVER…

如何利用 QuickAPI 生成 PostgreSQL 样本测试数据:全面解析与实用指南

目录 一、什么是 QuickAPI&#xff1f; 二、为什么需要生成样本测试数据&#xff1f; 三、如何在 QuickAPI 中生成 PostgreSQL 样本测试数据&#xff1f; 1. 登录 QuickAPI 平台 2. 选择 PostgreSQL 数据库和目标表 3. 配置样本数据生成规则 4. 导出或直接插入数据 四、…

黑马点评day04(分布式锁-setnx)

4、分布式锁 4.1 、基本原理和实现方式对比 分布式锁&#xff1a;满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁&#xff0c;只要大家使用的是同一把锁&#xff0c;那么我们就能锁住线程&#xff0c;不让线程并行&#x…

‌人工智能在农作物病虫害识别中的应用前景分析

近年来&#xff0c;全球气候变化加剧、农业种植规模化发展&#xff0c;农作物病虫害对粮食安全的威胁日益凸显。据统计&#xff0c;全球每年因病虫害造成的农作物损失约占总产量的20%-40%&#xff0c;而传统依赖人工经验的防治方式效率低、成本高&#xff0c;难以满足现代农业需…

C++ 完美转发

C 完美转发逐步详解 1. 问题背景与核心目标 在 C 模板编程中&#xff0c;若直接将参数传递给其他函数&#xff0c;参数的 值类别&#xff08;左值/右值&#xff09;和 类型信息&#xff08;如 const&#xff09;可能会丢失。例如&#xff1a; template<typename T> voi…

Midjourney 绘画 + AI 配音:组合玩法打造爆款短视频!

一、引言:AI 重构短视频创作范式 在某短视频工作室的深夜剪辑室里,资深编导正在为一条古风剧情视频发愁:预算有限无法实拍敦煌场景,人工绘制分镜耗时 3 天,配音演员档期排到一周后。而使用 Midjourney 生成敦煌壁画风格的场景图仅需 15 分钟,AI 配音工具实时生成多角色台…

AI基础知识(02):机器学习的任务类型、学习方式、工作流程

03 机器学习(Machine Learning)的任务类型与学习方式 广义的机器学习主要是一个研究如何让计算机通过数据学习规律,并利用这些规律进行预测和决策的过程。这里的Machine并非物理意义上的机器,可以理解为计算机软硬件组织;Learning可以理解为一个系统或平台经历了某些过程…

数据结构、刷leetcode返航版--二分5/7

1.排序 快排&#xff1a; 第一章 基础算法&#xff08;一&#xff09; - AcWing 如何调整范围 经典二分 递归结束条件&#xff1b;条件满足时&#xff0c;进行处理&#xff1b;递归左边&#xff0c;递归右边 分界点划分可以是l,r,(lr)/2,但是如果是选l&#xff0c;比如是1…

LeetCode 267:回文排列 II —— Swift 解法全解析

文章目录 摘要描述题解答案题解代码分析统计字符频率判断是否可能构成回文构建半边字符数组回溯生成半边排列 示例测试及结果时间复杂度空间复杂度实际使用场景&#xff1a;回文排列在真实项目里能干啥&#xff1f;文本处理、数据清洗类系统游戏开发&#xff1a;名字合法性验证…

JumpServer批量添加资产

环境说明&#xff1a;我的环境是H3C网络设备环境 一、在linux系统环境下通过Python脚本获取交换机信息&#xff0c;IP地址和设备名称一一对应&#xff0c;脚本如下&#xff1a; cat get_device-sysname.py import re from netmiko import ConnectHandler from concurrent.fut…

理解字、半字与字节 | 从 CPU 架构到编程实践的数据类型解析

注&#xff1a;本文为 “字、半字、字节” 相关文章合辑。 略作重排&#xff0c;未全校。 如有内容异常&#xff0c;请看原文。 理解计算机体系结构中的字、半字与字节 在计算机科学中&#xff0c;理解“字 (Word)”、“半字 (Half-Word)”和“字节 (Byte)”等基本数据单元的…

数据库实验10 函数存储

数据库实验10 一、实验目的 掌握函数和存储过程的定义方法&#xff0c;包括标量函数、表值函数、存储过程的语法结构。理解函数和存储过程的作用及原理&#xff0c;区分标量函数与表值函数的应用场景&#xff0c;掌握存储过程的参数传递、逻辑控制和错误处理机制。能够熟练运…

2025 RSAC|大语言模型应用风险与厂商攻防新策略

RSA大会全球影响力及2025年LLM热议概览 作为全球规模最大、影响力最深远的网络安全盛会之一&#xff0c;RSA大会每年汇聚数万名业界人士共商安全趋势。在2025 RSAC上&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;尤其是大型语言模型&#xff08;LLM&#x…

网页版部署MySQL + Qwen3-0.5B + Flask + Dify 工作流部署指南

1. 安装MySQL和PyMySQL 安装MySQL # 在Ubuntu/Debian上安装 sudo apt update sudo apt install mysql-server sudo mysql_secure_installation# 启动MySQL服务 sudo systemctl start mysql sudo systemctl enable mysql 安装PyMySQL pip install pymysql 使用 apt 安装 My…

Transformer数学推导——Q55 证明跨层残差跳跃(Cross-Layer Skip Connections)的信息融合效率

该问题归类到Transformer架构问题集——残差与归一化——残差连接。请参考LLM数学推导——Transformer架构问题集。 1. 引言 在深度学习的发展历程中&#xff0c;网络结构的不断创新推动着模型性能的持续提升。跨层残差跳跃&#xff08;Cross-Layer Skip Connections&#xf…

41.寻找缺失的第一个正数:原地哈希算法详解

文章目录 引言问题描述方法思路&#xff1a;原地哈希算法算法步骤 完整代码实现关键代码解析复杂度分析示例说明总结 引言 在算法面试和数据处理中&#xff0c;寻找缺失的第一个正数是一个经典问题。题目要求给定一个未排序的整数数组&#xff0c;找到其中缺失的最小正整数&am…