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

news/2024/5/18 16:09:12 标签: udp, 服务器, 网络协议, python

使用UDP套接字搭建


文章目录

  • 使用UDP套接字搭建
  • 前言
  • 一、基本结构
  • 二、使用步骤
  • 三、效果展示
  • 总结


前言

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

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

一、基本结构

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


二、使用步骤

1.服务器

代码如下:

python">import socket

s = 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':
            break
            
    except KeyboardInterrupt:
        break
        
print('[+] 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.客户端

代码如下:

python">import socket

c = 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:
        break
        
c.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.niftyadmin.cn/n/5297245.html

相关文章

Django 学习教程-介绍与安装

系列 Django 学习教程-第一个 Django 应用-CSDN博客 介绍 Django 是一个高级 Python Web 框架,它鼓励快速开发和干净、实用的设计。 它由经验丰富的开发人员构建,解决了 Web 开发的大部分麻烦,因此您可以专注于在编写应用程序时无需重新发…

strlen的自定义函数的三种实现方法

文章目录 一,概要二,题目三,方法1,方法一2,方法二3,方法三 四,总结 一,概要 在求字符串长度的时候我们会遇到求解字符串的长度,此时我们想到的是strlen,头文件…

控制台命令行工具 : A nonsense activity generator

介绍 GenAct地址https://github.com/svenstaro/genact ,是一款可以假装你的电脑正在工作的命令行工具。支持在 Linux、OSX 和 Windows平台运行。 安装 下载可执行文件即可,这些二进制文件应该在没有任何依赖项的情况下运行。 使用 $ chmod x ./genac…

vue3 element plus el-table封装(二)

上文是对el-table的基本封装&#xff0c;只能满足最简单的应用&#xff0c;本文主要是在上文的基础上增加slot插槽&#xff0c;并且对col插槽进行拓展&#xff0c;增加通用性 // BaseTable.vue <template><el-table><template v-for"name in tableSlots&…

股票价格预测 | Python实现Autoformer, FEDformer和PatchTST等模型用于股价预测

文章目录 效果一览文章概述环境描述源码设计效果一览 文章概述 Autoformer、FEDformer和PatchTST是一些用于时间序列预测,包括股价预测的模型。它们都是在Transformer模型的基础上进行了改进和扩展,以更好地适应时间序列数据的特点。 Autoformer:Autoformer是一种自适应Tran…

使用keepalived时虚拟IP漂移注意事项

什么是Keepalived服务 keepalived是一个开源的软件项目&#xff0c;用于实现高可用性&#xff08;HA&#xff09;的网络服务器负载均衡和故障转移。它允许将多台服务器组合在一起&#xff0c;形成一个虚拟服务器集群&#xff0c;实现负载均衡和故障转移。 keepalived的核心功…

JavaFX:MVC模式学习01-使用PropertyValueFactory将模型与视图绑定

PropertyValueFactory类是“TableColumn cell value factory”,绑定创建列表中的项。示例如下&#xff1a; TableColumn<Person,String> firstNameCol new TableColumn<Person,String>("First Name");firstNameCol.setCellValueFactory(new PropertyVal…

2023-12-20 LeetCode每日一题(判别首字母缩略词)

2023-12-20每日一题 一、题目编号 2828. 判别首字母缩略词二、题目链接 点击跳转到题目位置 三、题目描述 给你一个字符串数组 words 和一个字符串 s &#xff0c;请你判断 s 是不是 words 的 首字母缩略词 。 如果可以按顺序串联 words 中每个字符串的第一个字符形成字符…