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.hqwc.cn/news/312616.html

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

相关文章

文献阅读:LoRA: Low-Rank Adaptation of Large Language Models

文献阅读:LoRA: Low-Rank Adaptation of Large Language Models 1. 文章简介2. 方法介绍3. 实验 & 结论 1. 基础实验 1. Bert系列模型2. GPT系列模型 2. 消解实验 1. 作用矩阵考察2. 中间维度考察3. 扰动程度分析 4. 总结 & 思考 文献链接:htt…

如何下载Sentinel-1数据

Sentinel-1是欧洲空间局(ESA)的一组地球观测卫星,属于Copernicus计划的一部分。该计划旨在为全球环境监测提供数据,并支持应对气候变化、自然灾害和人类活动的挑战。Sentinel-1卫星的主要任务是提供全天候、全时段、高分辨率的合成…

MySQL数据库学习一

1 什么是数据库的事务&#xff1f; 1.1 事务的典型场景 在项目里面&#xff0c;什么地方会开启事务&#xff0c;或者配置了事务&#xff1f;无论是在方法上加注解&#xff0c;还 是配置切面。 <tx:advice id"txAdvice" transaction-manager"transactionMa…

「Verilog学习笔记」乘法与位运算

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 观察乘数的特点&#xff1a; 1111_1011 1_0000_0000 - 1 - 100 timescale 1ns/1nsmodule dajiang13(input [7:0] A,output [15:0] B);//*************code*********…

Python从入门到精通之线程与进程

系列 Python从入门到精通之安装与快速入门-CSDN博客 Python从入门到精通之基本数据类型和变量-CSDN博客 Python从入门到精通之集合&#xff08;List列表、Tuple元组、Dict字典、Set&#xff09;-CSDN博客 Python从入门到精通之条件语句、循环语句和函数-CSDN博客 Python从…

二叉树的后序遍历,力扣

目录 建议先刷一下中序遍历 题目地址&#xff1a; 题目&#xff1a; 我们直接看题解吧&#xff1a; 解题方法&#xff1a; 注&#xff1a; 解题分析&#xff1a; 解题思路&#xff1a; 代码实现&#xff1a; 代码实现&#xff08;递归&#xff09;&#xff1a; 代码实现&#x…

二叉树详解(深度优先遍历、前序,中序,后序、广度优先遍历、二叉树所有节点的个数、叶节点的个数)

目录 一、树概念及结构(了解) 1.1树的概念 1.2树的表示 二、二叉树概念及结构 2.1概念 2.2现实中的二叉树&#xff1a; 2.3数据结构中的二叉树&#xff1a; 2.4特殊的二叉树&#xff1a; 2.5 二叉树的存储结构 2.51 顺序存储&#xff1a; 2.5.2 链式存储&…

第十四章 Sentinel实现熔断与限流

Sentinel实现熔断与限流 gitee&#xff1a;springcloud_study: springcloud&#xff1a;服务集群、注册中心、配置中心&#xff08;热更新&#xff09;、服务网关&#xff08;校验、路由、负载均衡&#xff09;、分布式缓存、分布式搜索、消息队列&#xff08;异步通信&#x…

【小沐学NLP】Python实现K-Means聚类算法(nltk、sklearn)

文章目录 1、简介1.1 机器学习1.2 K 均值聚类1.2.1 聚类定义1.2.2 K-Means定义1.2.3 K-Means优缺点1.2.4 K-Means算法步骤 2、测试2.1 K-Means&#xff08;Python&#xff09;2.2 K-Means&#xff08;Sklearn&#xff09;2.2.1 例子1&#xff1a;数组分类2.2.2 例子2&#xff1…

图片预览 element-plus 带页码

vue3、element-plus项目中&#xff0c;点击预览图片&#xff0c;并显示页码效果如图 安装 | Element Plus <div class"image__preview"><el-imagestyle"width: 100px; height: 100px":src"imgListArr[0]":zoom-rate"1.2":max…

HTML+CSS+JS制作三款雪花酷炫特效

🎀效果展示 🎀代码展示 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html

2021-06-25 51蛋骗鸡按键切合LED

缘由ISIS 7 Professional_有问必答-CSDN问答 #include "REG52.h" sbit K1 P3^0; sbit K2 P3^1; sbit K3 P3^2; sbit K4 P3^3; void main() {unsigned char Xd0,xz0,cs0;unsigned int wei0;P1255;while(1){if(K10&&Xd0){P10;while(K10);}if(K20&&…