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

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.xdnf.cn/news/299917.html

相关文章:

  • 【Python】一键提取视频音频并生成MP3的完整指南 by `MoviePy`
  • 基于Jetson Nano与PyTorch的无人机实时目标跟踪系统搭建指南
  • 20250506异形拼图块(圆形、三角、正方,椭圆/半圆)的中2班幼儿偏好性测试(HTML)
  • 【ArcGISPro】属性规则--属性联动
  • 记一次ffmpeg延迟问题排查
  • 个人码支付免签系统三网免挂支付宝微信QQ钱包即时到账收款二维码聚合支付源码
  • 使用 OpenSSL 吊销 Kubernetes(k8s)的 kubeconfig 里的用户证书
  • uv全功能更新:统一管理Python项目、工具、脚本和环境的终极解决方案
  • 嵌入式学习--江协51单片机day1
  • GCC编译器安装详细说明(举例arm-2013q3)
  • pywinauto通过图片定位怎么更加精准的识别图片?
  • 抖音代播领航者——品融电商(PINKROON)的运营实力与服务解析
  • 使用 AddressSanitizer 检测堆越界错误
  • 【CPU占用率查看】
  • 创建简易个人关系图谱(Neo4j )
  • 【落羽的落羽 C++】list及其模拟实现
  • On the Biology of a Large Language Model——论文学习笔记——拒答和越狱
  • 华为私有协议Hybrid
  • 5月6日日记
  • QtGUI模块功能详细说明,图像处理(三)
  • 目标检测(Object Detection)研究方向常用数据集简单介绍
  • 【Bootstrap V4系列】学习入门教程之 组件-卡片(Card)高级用法
  • 数据初步了解
  • 论文速读:《CoM:从多模态人类视频中学习机器人操作,助力视觉语言模型推理与执行》
  • 电池热管理CFD解决方案,为新能源汽车筑安全防线
  • TikTok 矩阵账号运营实操细节:打造爆款矩阵
  • SpringBoot整合Kafka、Flink实现流式处理
  • 三种信号本振
  • Redis 7.0中5种新特性及实战应用
  • 【ArcGISPro】创建要素和刷新数据库后卡顿