UDP套接字搭建简易服务器与客户端

使用UDP套接字搭建


文章目录

  • 使用UDP套接字搭建
  • 前言
  • 一、基本结构
  • 二、使用步骤
    • 1.服务器端
    • 2.客户端
  • 三、效果展示
  • 总结


前言

这次较上个版本《Python 网络编程之搭建简易服务器和客户端》https://only-me.blog.csdn.net/article/details/135251171增加了:

  1. UDP协议来进行通信,服务器在收到客户端发来的消息时候,会标注上是哪个IP+Port发来的什么消息。
  2. 当客户端发送某个关键字给到服务器,服务器收到后会主动断开与客户端的连接。

一、基本结构

需要新建两个py文件,一个用来运行服务器端,一个用来运行客户端。进行测试时,需要保证服务器端和客户端都在运行。


二、使用步骤

1.服务器端

代码如下:

import sockets = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('', 25555))print('[+] Server started........')
while True:try:data, client_addr = s.recvfrom(1024)print('[+] From: ', client_addr)print('[+] Received: ', data.decode('utf-8'))message = data.decode('utf-8')s.sendto(message.encode('utf-8'), client_addr)if message == '0':breakexcept KeyboardInterrupt:breakprint('[+] Server Close.........')
s.close()

可能看不懂的代码解释如下:

  1. socket.socket(socket.AF_INET, socket.SOCK_DGRAM):创建一个基于IPv4(socket.AF_INET)的UDP(socket.SOCK_DGRAM)类型套接字。UDP是一种无连接、不可靠的数据报协议。
  2. s.bind((‘’, 25555)):使用bind()方法将服务器套接字绑定到本地主机上的特定端口,这里的地址是空字符串 ‘’ 表示服务器将监听所有可用的网络接口(即任意IP地址),端口号为25555。
  3. data, client_addr = s.recvfrom(1024):在循环内部,尝试接收来自客户端的最大1024字节的数据,并获取客户端的地址信息。recvfrom() 方法是UDP套接字特有的,可以同时返回数据和发送方地址。
  4. s.sendto(message.encode(‘utf-8’), client_addr):将接收到的消息解码后重新赋值给变量message,然后将其编码回UTF-8格式并发送回客户端。这里体现了UDP的“请求-响应”模式。
  5. if message == ‘0’::如果接收到的消息内容是’0’,则跳出循环,关闭服务。

2.客户端

代码如下:

import socketc = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)while True:try:message = input("please input:")c.sendto(message.encode('utf-8'), ('127.0.0.1', 25555))data, server_address = c.recvfrom(1024)print(data.decode('utf-8'))except KeyboardInterrupt:breakc.close()

可能看不懂的代码解释如下:

  1. socket.socket(socket.AF_INET, socket.SOCK_DGRAM):创建一个基于IPv4(socket.AF_INET)的UDP(socket.SOCK_DGRAM)类型套接字。UDP是一种无连接、不可靠的数据报协议。
  2. c.sendto(message.encode(‘utf-8’), (‘127.0.0.1’, 25555)):将用户输入的消息编码为UTF-8格式后通过UDP套接字发送至服务器,服务器地址为’127.0.0.1’,端口号为25555。
  3. data, server_address = c.recvfrom(1024):使用 recvfrom() 方法等待从服务器接收最多1024字节的数据,并获取服务器的地址信息。由于UDP是无连接的,所以每次都需要通过这种方式获取响应。
  4. except KeyboardInterrupt::如果在上述操作过程中捕获到键盘中断(即用户按下Ctrl+C),则跳出循环,停止客户端程序。
  5. c.close():在循环结束后关闭客户端套接字,释放系统资源。

三、效果展示

在这里插入图片描述


总结

服务器端代码:
该代码创建了一个UDP服务器,监听本地主机(所有网络接口)的25555端口。服务器在接收到客户端发送的消息后,将接收到的消息原样返回给客户端。当服务器接收到消息内容为’0’时,会跳出循环并关闭服务。

客户端代码:
该代码创建了一个UDP客户端,它不断接收用户的输入,并将输入的消息发送至服务器(127.0.0.1:25555)。然后,客户端等待服务器的响应并打印出来。如果用户按下Ctrl+C,则客户端将停止运行并关闭连接。

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

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

相关文章

机器学习部分相关概念

数据集(Data Set)即数据的集合,每一条单独的数据被称为样本(Sample)。 对于每个样本,它通常具有一些属性(Attribute)或者特征(Feature), 特征所具体取得值被称为特征值(Feature Value)。 西瓜数据集 色泽根蒂纹理青绿稍蜷模糊乌黑蜷缩清晰 …

学Python的正确顺序千万别弄反了,到时候后悔就来不及了

学Python的正确顺序:从基础到高级,步步为营 在当今数字化时代,Python已成为最受欢迎的编程语言之一。它不仅广泛应用于数据分析、人工智能和Web开发等领域,还为初学者提供了一个友好且功能强大的平台。然而,学习Python…

matalb实践(十二):减肥

1.题目 2.解答 2.1模型假设 1.体重增加正比于吸收的热量,平均每8000kcal增加体重1kg 2.身体正常代谢引起的体重减少正比于体重,每周每千克体重消耗热量一般在200kcal至320kcal之间,且因人而异,这相当于体重70kg的人每天消耗2000k…

【Spark精讲】一文讲透Spark RDD

MapReduce的缺陷 MR虽然在编程接口的种类和丰富程度上已经比较完善了,但这些系统普遍都缺乏操作分布式内存的接口抽象,导致很多应用在性能上非常低效 。 这些应用的共同特点是需要在多个并行操 作之间重用工作数据集 ,典型的场景就是机器学习…

Apollo自动驾驶:改变交通运输的游戏规则

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 ChatGPT体验地址 文章目录 前言1. Apollo缓存层2. 本地状态管理库3. 离线同步和冲突解决4. 离线数据同步和离线优先策略结论 📲🔌 构建离线应用:Apollo…

ssm基于web 的个人时间管理系统+vue论文

基于web 的个人时间管理系统的设计与实现 摘要 当下,正处于信息化的时代,许多行业顺应时代的变化,结合使用计算机技术向数字化、信息化建设迈进。传统的个人时间信息管理模式,采用人工登记的方式保存相关数据,这种以人…

【数据结构】排序之交换排序(冒泡 | 快排)

交换目录 1. 前言2. 交换排序3. 冒泡排序3.1 分析3.2 代码实现 4. 快速排序4.1 hoare版本4.1.1 分析4.1.2 hoare版本代码 4.2 挖坑法4.2.1 分析4.2.2 挖坑法代码实现 4.3 前后指针版本4.3.1 分析4.3.2 前后指针版本代码实现 1. 前言 在之前的博客中介绍了插入排序,…

Linux基础知识学习2

tree命令的使用 可以看到dir2目录下的这些文件,要想显示dir2的具体结构,可用tree命令 mv命令 它可以实现两个功能 1.将文件移动到另一个目录中 2.对某一个文件进行重命名 1.将文件移动到另一个目录中 这里将dir1中的2.txt移动到他的子目录dir3中 执行…

“C语言与人生:手把手教你玩转C语言数组,从此编程无难题“

各位少年,我是博主那一脸阳光,由我来给大家介绍C语言的数组的详解。 在C语言中,数组是一种极其重要的数据结构,它允许我们存储和管理相同类型的一系列相关数据。通过理解并熟练掌握数组的使用,开发者能够高效地处理大量…

超真实随身WiFi测评,你确定不看一下?随身WiFi靠谱吗? 看完这篇文章你就懂了?随身WiFi真实评测

用了一年多的格行随身wifi,屏幕都磨花了。直接看图,都是自己实测! 设备是去年买的,到现在也快1年了,一直有朋友蹲后续,现在把后续给大家!到底是大牌子,确定是不跑路的随身wifi&…

Vue独立组件开发-递归组件

文章目录 一、前言二、实现三、总结四、最后 一、前言 递归组件就是指组件在模板中调用自己。 二、实现 开启递归组件的必要条件&#xff0c;就是在组件中设置一个 name 选项。 <template><div><my-component></my-component></div> </te…

提取 PE 文件的各种信息

前段时间项目需要实现对 Windows PE 文件版本信息的提取&#xff0c;如文件说明、文件版本、产品名称、版权、原始文件名等信息。获取这些信息在 Windows 下当然有一系列的 API 函数供调用&#xff0c;简单方便。 我们先看一下PE文件结构&#xff0c;PE文件由DOS首部&#xff0…

2023-12-21 LeetCode每日一题(美丽塔 II)

2023-12-21每日一题 一、题目编号 2866. 美丽塔 II二、题目链接 点击跳转到题目位置 三、题目描述 给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。 你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i &#xff0c;高度为 heights[i] 。 如果以下条件满足&a…

linux驱动(一):led

本文主要探讨210的led驱动相关知识。 驱动 操作系统驱动硬件的代码,驱动上层是系统调用API,下层是硬件 宏内核&#xff1a;内核整体上为一个过程实现,运行在同一地址空间,相互调用简单高效 微内核&#xff1a;功能为独立过程,过程间通过IPC通信 …

【华为OD机试真题2023CD卷 JAVAJS】测试用例执行计划

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 测试用例执行计划 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 某个产品当前迭代周期内有N个特性()需要进行覆盖测试,每个特性都被评估了对应的优先级,特性使用其ID作为下标进行标识。 设计了M个测试用…

在Linux运行LaTeX

共有三个步骤1. 装LaTexTeX Live - TeX Users Group 下载对应版本安装包安装 文件比较大&#xff0c;这步花的时间多一点&#xff0c;不过也不会太多&#xff0c;感觉5分钟十分钟的样子吧 2. 装TexStidio 这一步是安装一个类似在windows系统下的TaTeX GUI软件 图标是这样3. 配置…

Tensorflow2.X的GPU版框架最快最稳搭建方法

一、环境基础 Windows10以上 已装Anaconda 支持GPU 二、搭建步骤 1. 在Anaconda中创建并进入虚拟环境 conda create -n envname python3.8 conda activate envname 注意&#xff1a;envname 替换为你自己想命名的&#xff0c;下文将以“Ljdenv”出现 2.安…

【实用工具】Tmux使用指南

Tmux 三个重要概念 session&#xff08;会话&#xff09;、window&#xff08;窗口&#xff09;、pane&#xff08;面板&#xff09; 一个会话可以有多个窗口&#xff0c;一个窗口可以划分为多个面板 注意在tmux中使用快捷命令的话&#xff0c;需要加上前缀ctrlb 关于session的…

2024 GMF|The Sandbox 为创作者赋能的新时代

以新的 GMF 模型和专门的参与池奖励来开启 2024 年吧。 11 月 3 日&#xff0c;我们在香港全球创作者日上宣布&#xff0c;The Sandbox 已为所有创作者分配了100,000,000 SAND&#xff0c;将通过 GMF 进行分发。作为首次启动的建设者挑战&#xff0c;我们准备了专门的 SAND 参与…

linux 防火墙查看放行端口,追加放行端口命令

linux 查看防火墙已经放行端口列表 firewall-cmd --list-ports 运行结果如下&#xff1a; linux 追加防火墙经放行端口&#xff08;如追加443&#xff09; firewall-cmd --zonepublic --add-port443/tcp --permanent 亲测有效&#xff01;