图形化UDP发包小工具

2023-05-16

文章目录

  • 前言
  • 一、构思
  • 二、用到的python模块
    • tkiner模块
      • tkiner模块下载
    • socket模块
    • ThreadPoolExecutor模块
      • 导入方式
    • 编码实现
      • 客户端
      • 服务端代码
  • 三、运行结果
    • 客户端
    • 发送消息
    • 服务端


前言

工具编写用的语言是python,组件采用的是tkiner组件,可以对指定目标地址和端口,发送消息,界面简单清晰


一、构思

在主窗口,用户填写对应的IPV4地址,服务器的端口号,要发送的消息内容,线程数量,发送消息的数量,点击发送按钮,即可发送UDP包给指定的服务器,并且将发送的数据包的大小以及服务器返回的内容,通过子窗口文本的形式展示出来

二、用到的python模块

tkiner模块

目前很火的编程语言:java,python等都有自己GUI界面编写模块,tkiner是python中用于图形化界面编写的模块

tkiner模块下载

win+R 打开运行框,输入cmd

需要安装python环境,并加入到环境变量,才可执行如下的命令

在DOS窗口输入如下命令

pip install tkiner

socket模块

socket模块是python中网络编程必用的模块,编写客户端和服务端的代码,必须采用socket模块进行连接,通信,数据的传输等,在java中也有相应的网络编程模块,socket(AF_INET,SOCK_DGRAM)返回的是一个非连接的通信对象,采用UDP传输,socket(AF_INET,SOCK_STRAM)返回的是一个面向连接的通信对象,采用TCP传输

ThreadPoolExecutor模块

ThreadPoolExecutor模块是python中线程池需要的模块,本次的udp发包小工具,用到了线程池,所以这个模块也是必须的

导入方式

from concurrent.futures import ThreadPoolExecutor

编码实现

由于本次测试的环境都是本地机器,所以客户端代码和服务端代码都是在本地上,话不多说,下面附上代码

客户端

from tkinter import *
import tkinter.messagebox
from socket import *
from concurrent.futures import ThreadPoolExecutor
# 客户端代码
if __name__ == '__main__':
    root = Tk()
    root.geometry("600x600+300+300")
    send_result = []
    get_result_index = 0
    def get_result(args):
        server_address = args[0]
        server_port = args[1]
        send_msg = args[2]
        client_socket = socket(AF_INET,SOCK_DGRAM)
        return_result = client_socket.sendto(send_msg.encode('utf8'),(server_address,int(server_port)))
        serverMsg,serverAddress = client_socket.recvfrom(1024)
        result_Text_Obj = args[3]
        result_Text_Obj.insert('end',"发送字节大小为"+str(return_result)+'\n服务器返回内容#'+serverMsg.decode('utf8')+'\n')

    def sendMsg(ipv4addr,msg,serverPort,thread_pool_number=10,msg_number=100):
        # ipv4addr = ipv4_entry.get()
        # msg = msg_entry.get()
        if (ipv4addr == "" or msg == "" or serverPort==""):
            tkinter.messagebox.showinfo(title="数据异常", message="请填写完整的数据")
        else:
            # 开始连接服务端,发送数据
            # from socket import *
            # serverName = '192.168.3.8'
            # serverPort = 12345
            # clientSocket = socket(AF_INET, SOCK_DGRAM)
            # while 1:
            #     message = input().encode()
            #     clientSocket.sendto(message, (serverName, serverPort))
            #     modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
            #     print(modifiedMessage)
            # clientSocket.close()
            serverName=ipv4addr
            sport = serverPort
            root2 = Tk()
            root2.title("获得结果")
            root2.geometry('300x300+100+100')
            result_Text = Text(root2, width=200, height=200)
            result_Text.place(x=10, y=10, width=280, height=280)
            pool = ThreadPoolExecutor(int(thread_pool_number))
            for i in range(int(msg_number)+1):
                pool.submit(get_result,args=(serverName,sport,msg,result_Text))
            root2.mainloop()


    root.title("UDP消息发送客户端")
    label = Label(root,justify="center",text="IPV4addr",padx="10",pady="10",relief="groove").place(x=100,y=100,width=80,height=50)
    ipv4_entry = Entry(root,justify="center",width="100",relief="groove")
    ipv4_entry.place(x=180,y=100,width=180,height=50)
    ipv4_info_text = Label(root,justify="center",text="例如:192.168.10.100,无需掩码",padx="10",pady="10").place(x=380,y=100,width=180,height=50)
    send_msg_info_text = Label(root,justify="center",text="消息",padx="10",pady="10",relief="groove").place(x=100,y=160,width=80,height=50)
    msg_entry = Entry(root,justify="center",width="100",relief="groove")
    msg_entry.place(x=180,y=160,width=200,height=50)
    port_label = Label(root, justify="center", text="端口号", padx="10", pady="10").place(x=100, y=220,width=100, height=50)
    port_entry = Entry(root,justify="center",width="100",relief="groove")
    port_entry.place(x=210,y=220,width=100,height=50)
    #获取线程数量,使用线程去跑
    thread_pool_number_label = Label(root,justify="center",padx="10",pady="10",text="线程").place(x=100,y=290,width=100,height=50)
    thread_pool_number_entry = Entry(root,justify="center",width="100",relief="groove")
    thread_pool_number_entry.place(x=210,y=290,width=100,height=50)
    thread_pool_info_label = Label(root,justify="center",padx="10",pady="10",text="默认线程数量10").place(x=320,y=290,width=100,height=50)
    #设置发送消息数量
    msg_number_label = Label(root,justify='center',padx="10",pady="10",text="发送数量").place(x=100,y=360,width=100,height=50)
    msg_number_entry = Entry(root,justify="center",width=100,relief="groove")
    msg_number_entry.place(x=210,y=360,width=100,height=50)
    msg_number_info_label = Label(root,justify="center",padx="10",pady="10",text="默认数量100").place(x=320,y=360,width=100,height=50)
    #防止按钮自动触发函数,添加 lambda 函数添加一个参数, 或者去掉括号,不带参数
    send_Btn = Button(root,justify="center",padx="10",pady="10",text="发送",command=lambda:sendMsg(ipv4_entry.get(),msg_entry.get(),port_entry.get(),thread_pool_number_entry.get(),msg_number_entry.get()),width=100,height=50)
    send_Btn.place(x=100,y=420,width=100,height=50)
    root.mainloop()

服务端代码

from socket import *
import datetime
#udp服务端代码
# from socket import *
# serverPort=12345
# serverSocket=socket(AF_INET,SOCK_DGRAM)
# serverSocket.bind(('192.168.3.8',serverPort))
# print('ready')
# while 1:
#     message,clientAddress=serverSocket.recvfrom(2048)
#     modifiedMessage=message.upper()
#     print(modifiedMessage)
#     serverSocket.sendto(modifiedMessage,clientAddress)
serverport = 12345
serverSocket = socket(AF_INET,SOCK_DGRAM)
serverSocket.bind(('127.0.0.1',serverport))
while 1:
    message,clientAddress = serverSocket.recvfrom(1024)
    print(message.decode('utf8')+"####"+str(datetime.datetime.now()))
    serverSocket.sendto(('服务端已收到'+message.decode('utf8')).encode('utf8'),clientAddress)


三、运行结果

客户端

在这里插入图片描述

发送消息

在这里插入图片描述

在这里插入图片描述

服务端

在这里插入图片描述


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图形化UDP发包小工具 的相关文章

随机推荐

  • 蓝桥杯嵌入式(STM32F103RBT6)备赛手册(一)

    文章目录 一 基础篇一 点亮LED二 驱动蜂鸣器三 Systick定时器四 定时器五 独立按键 三行代码消抖六 IIC协议七 LCD显示八 串口接收与发送九 ADC采样十 RTC时钟十一 PWM输出及输入捕获 一 基础篇 一 点亮LED 由
  • Asahi Linux的Alpha 版本已匹配Mac 设备

    导读Asahi Linux 是一个旨在将 Linux 移植到配备 Apple Silicon 芯片 Mac 设备上的项目 xff0c 项目的目标不仅仅是让 Linux 能够在这些设备上运行 xff0c 而是要将它打磨到可以用作日常操作系统的
  • Linux的优缺点

    导读Linux 是一个流行词 xff0c 你到处都能听到与 Linux 相关的内容 人们在技术论坛上讨论它 Linux 是课程中的一部分 xff1b 你最喜欢的 YouTube 技术主播在兴奋地展示构建他们的 Linux 内核 xff1b
  • 不敢想象!Vim使用者的“大脑”竟是这样

    原始状态 我曾经观看过小提琴家非常有激情地拉弦演奏 xff0c 我有了这种想法 xff1a 也许我投入到文本编辑器中的脑细胞数量和他为投入所喜好的乐器的演奏中差不多吧 我还有种奇异的想象 xff0c 当他独奏的时候 xff0c 脑中的核磁共
  • Windows 10的子系统不是非Ubuntu不可

    Ubuntu 的制造商 Canonical 早已和微软进行合作 xff0c 让我们体验了极具争议的 Bash on Windows 外界对此也是褒贬不一 xff0c 许多 Linux 重度用户则是质疑其是否有用 xff0c 以及更进一步认为
  • 绝对空前!!!互联网史上的最大ddos攻击惊艳登场

    美国遭遇史上最大黑客攻击 xff0c 知名网站全部瘫痪 全世界一半的网络被黑客攻陷 xff0c 大网站无一幸免 就在 xff08 10月22日 xff09 xff0c 美国早上我们见证了互联网建立以来的最大ddos攻击 xff0c twit
  • snprintf()函数探讨

    printf sprintf snprintf 区别 先贴上其函数原型 printf const char format 格式化输出字符串 xff0c 默认输出到终端 stdout sprintf char dest const char
  • 3D创作元素将入住下一代Windows 10和HoloLens中

    新 Windows 10 将会带来崭新的 3D 特性 xff0c 任何用户都可以通过内置的工具来制作发布有关 3D 增强现实 AR 和混合现实 mixed reality 的游戏和素材 北京时间 10 月 26 号晚 10 点 xff0c
  • Chrome 又不支持 HTTP/2 网站的原因

    导读昨晚偶尔清理 Chrome 插件时发现我的 HTTP 2 and SPDY indicator 插件好像好久没亮了 这个插件在你访问到一个支持 HTTP 2 xff08 或之前的 SPDY 协议 xff09 的网站时会点亮 xff0c
  • Win10/11后:Linux启动AMD处理器fTPM出现同款间歇性卡顿

    导读早在2022年3月 xff0c AMD就曾确认 xff0c 在Win10与Win11系统下 xff0c 开启锐龙处理器的fTPM xff0c 将可能导致系统出现间歇性的卡顿 死机等情况 xff0c 并发布BIOS更新进行了修复 但出乎预
  • 12 个好用且不花钱的网络监控工具

    导读要让一个多级机构运行良好而且平稳的话 xff0c 一个非常艰巨重大的任务就是做好网络管理 每个机构都配备专门的人员 xff0c 即网络分析师 xff0c 来进行网络管理 他们 使用了 许多工具来监视网络的运行状况 xff0c 并查看网络
  • Solus Linux 改变发展方向

    导读Solus 是一个独立开发的 Linux 发行版 xff0c 它的一大特色就是 Solus 自创的 Budgie 桌面环境 xff08 最新的 Fedora 也已经新增了这个桌面环境 xff09 xff0c 当然用户也可以选择其他常见的
  • 虚拟机与主机互传文件方法分享

    现在虚拟机的使用已经非常普及 xff0c 无论新手学习 xff0c 还是运维工程师搭建虚拟化平台 xff0c 都会使用到虚拟机 对个人用户来说 xff0c 非常方便就能搭建很多操作系统进行学习 xff1b 对企业用户来说更是降低了服务器的硬
  • RethinkDB成为Linux基金会的一员

    导读日前 xff0c RethinkDB项目有了新的动态 Cloud Native Computing基金会 xff08 CNCF xff09 宣布它购买了NoSQL分布式文件存储数据库RethinkDB的源代码版权 xff0c 将授权协议
  • STM32 汇编程序——串口输出 Hello world

    STM32 汇编程序 串口输出 Hello world 一 USART介绍二 Keil项目 xff08 一 xff09 新建项目 xff08 二 xff09 Hello s代码 xff08 三 xff09 编译生成hex文件 三 电路接法四
  • C语言笔记-头文件

    复习 xff1a 1 输出缓冲区 程序输出的数据并没有立即写入 文件 xff0c 而是先存储到输出缓冲区 xff0c 当满足一定条件时才写入文件中 xff1a 1 遇到 39 n 39 2 遇到输入语句 3 缓冲区满4k 4 程序结束 5
  • 不使用strcat()的字符串连接

    问题描述 在不使用strcat 的前提下 xff0c 实现两个字符串的连接 输入形式 以 39 39 为结束符的两行字符串 输出形式 将第一行字符串连接到第二行字符串 xff0c 然后打印输出 样例输入 abc def 样例输出 defab
  • pixhawk 整体架构的认识

    此篇blog的目的是对px4工程有一个整体认识 xff0c 对各个信号的流向有个了解 xff0c 以及控制算法采用的控制框架 PX4自动驾驶仪软件 可分为三大部分 xff1a 实时操作系统 中间件和飞行控制栈 1 NuttX实时操作系统 提
  • 光流定位原理

    无人机上光流定位通常是借助于无人机底部的一个摄像头采集图像数据 xff0c 然后采用光流算法计算两帧图像的位移 xff0c 进而实现对无人机的定位 xff0c 这种定位手段配合GPS可以在室外实现对无人机的精准控制 xff0c 并且在市内没
  • 图形化UDP发包小工具

    文章目录 前言一 构思二 用到的python模块tkiner模块tkiner模块下载 socket模块ThreadPoolExecutor模块导入方式 编码实现客户端服务端代码 三 运行结果客户端发送消息服务端 前言 工具编写用的语言是py