python实验三 实现UDP协议、TCP协议进行服务器端与客户端的交互
实验三
实验题目
1、请利用生成器构造一下求阶乘的函数Factorial(),定义一个函数m(),在m()中调用生成器Factorial()生成小于100的阶乘序列存入集合s中,输出s。
【代码】
def factorial():n=1f=1while 1: f *= n yield (f) n+=1def m():s=set()for f in factorial(): if f<100: s.add(f) else: breakprint(s)m()
【实例】

2、利用UDP协议编写一个小型交互软件,要求如下:
(1)建立文件UDPT.py,在该文件中定义类UDPTalk,其析构函数传入ip地址和端口号,成为其私有属性;
(2)定义类UDPTalk的成员函数ServerU,建立一个服务器端应用,用于接收客户端的信息,并输出客户端发来的信息;
(3)定义类UDPTalk的成员函数ClientU,建立一个客户端应用,用于向服务器端发送信息
(4)建立文件SUT.py,在该文件中引入UDPTalk类,并定义一个ServerApp函数,在该函数中声明一个该类的对象,调用ServerU函数,创建接收信息服务器,运行这个函数,等待客户端发来信息。
(5)建立文件CUT.py,在该文件中引入UDPTalk类,并定义一个ClientApp函数,声明一个该类的对象,调用ClientU函数,向(4)中的服务器发信息
【代码】
UDPT.pyimport socketclass UDPTalk:def __init__(self, ip, port): self.ip = ip self.port = port self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)def ServerU(self): self.sock.bind((self.ip, self.port)) print(f"服务器已启动,正在监听 {self.ip}:{self.port}...") while 1: data, addr = self.sock.recvfrom(1024) received_msg = data.decode() print(f"客户端 [{addr[0]}:{addr[1]}] 发送的消息:{received_msg}")def ClientU(self): server_addr = (self.ip, self.port) print(f"连接到服务器 {self.ip}:{self.port}...") while 1: message = input("请输入要发送的消息(输入 'quit' 退出):") if message == 'quit': print("已退出客户端应用。") break self.sock.sendto(message.encode(), server_addr) print("消息已发送。")def __del__(self): self.sock.close()SUT.pyfrom UDPT import UDPTalkdef ServerApp():server = UDPTalk('localhost', 12345)server_alive = Truetry: server.ServerU()except KeyboardInterrupt: server_alive = False print("客户端已退出。")finally: if server_alive: print("客户端已退出。")if __name__ == '__main__':ServerApp()CUT.pyfrom UDPT import UDPTalkdef ClientApp():client = UDPTalk('localhost', 12345)client.ClientU()if __name__ == '__main__':ClientApp()
【实例】


3、利用TCP协议编写一个小型交互软件,要求如下:
(1)建立文件TCPT.py,在该文件中定义类TCPTalk,其构造函数传入ip地址和端口号,成为其私有属性;
(2)定义类TCPTalk的成员函数ServerU,建立一个服务器端应用,用于接收客户端的信息,并输出客户端发来的信息;
(3)定义类TCPTalk的成员函数ClientU,建立一个客户端应用,用于向服务器端发送信息
(4)建立文件STT.py,在该文件中引入TCPTalk类,并定义一个ServerApp函数,在该函数中声明一个该类的对象,调用ServerU函数,创建接收信息服务器,运行这个函数,等待客户端发来信息。
(5)建立文件CTT.py,在该文件中引入TCPTalk类,并定义一个ClientApp函数,声明一个该类的对象,调用ClientU函数,向(4)中的服务器发信息。
【代码】
CTT.pyfrom TCPT import TCPTalk
def ClientApp():client = TCPTalk('localhost', 12345)client.ClientU()
if __name__ == '__main__':ClientApp()STT.pyfrom TCPT import TCPTalkdef ServerApp():server = TCPTalk('localhost', 12345)server.ServerU()if __name__ == '__main__':ServerApp()TCPT.pyimport socketclass TCPTalk:def __init__(self, ip, port): self.ip = ip self.port = port self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)def ServerU(self): self.sock.bind((self.ip, self.port)) self.sock.listen(1) print(f"服务器已启动,正在监听 {self.ip}:{self.port}...") while 1: conn, addr = self.sock.accept() print(f"客户端 [{addr[0]}:{addr[1]}] 已连接。") while 1: data = conn.recv(1024) if not data: break received_msg = data.decode() print(f"客户端 [{addr[0]}:{addr[1]}] 发送的消息:{received_msg}") print(f"客户端 [{addr[0]}:{addr[1]}] 已断开连接。") conn.close()def ClientU(self): server_addr = (self.ip, self.port) self.sock.connect(server_addr) print(f"连接到服务器 {self.ip}:{self.port}...") while 1: message = input("请输入要发送的消息(输入 'quit' 退出):") if message == 'quit': print("已退出客户端应用。") break self.sock.send(message.encode()) print("消息已发送。") self.sock.close()
【实例】


4、请修改题目3中的TCPTalk类,将题目1中求阶乘的函数Factorial()和m()变为TCPTalk类的成员函数,当客户端函数ClientU向服务器发送信息“1” (即ServerU函数接收到的数据为“1”)时,则ServerU调用m()。分别运行ServerU和ClientU程序,测试上述设计。
【代码】
改变后的TCPT.py
import socket
class TCPTalk:def __init__(self, ip, port):self.ip = ipself.port = portself.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)def factorial(self): self.n = 1 self.f = 1 while 1: self.f *= self.n yield (self.f) self.n += 1def m(self): self.s = set() for self.f in self.factorial(): if self.f < 100: self.s.add(self.f) else: break print(self.s)def ServerU(self):self.sock.bind((self.ip, self.port))self.sock.listen(1)print(f"服务器已启动,正在监听 {self.ip}:{self.port}...")while 1:conn, addr = self.sock.accept()print(f"客户端 [{addr[0]}:{addr[1]}] 已连接。")while 1:data = conn.recv(1024)if not data:breakreceived_msg = data.decode()print(f"客户端 [{addr[0]}:{addr[1]}] 发送的消息:{received_msg}")if received_msg == '1':result = self.m(5) # 示例调用 m() 函数,参数为 5print(f"调用 m() 函数的结果:{result}")print(f"客户端 [{addr[0]}:{addr[1]}] 已断开连接。")conn.close()def ClientU(self):server_addr = (self.ip, self.port)self.sock.connect(server_addr)print(f"连接到服务器 {self.ip}:{self.port}...")while 1:message = input("请输入要发送的消息(输入 'quit' 退出):")if message == 'quit':print("已退出客户端应用。")breakself.sock.send(message.encode())print("消息已发送。")self.sock.close()
【实例】


相关文章:
python实验三 实现UDP协议、TCP协议进行服务器端与客户端的交互
实验三 实验题目 1、请利用生成器构造一下求阶乘的函数Factorial(),定义一个函数m(),在m()中调用生成器Factorial()生成小于100的阶乘序列存入集合s中,输出s。 【代码】 def factorial():n1f1while 1: f * n yield (f) n1…...
ServiceNow 研究:通过RAG减少结构化输出中的幻觉
论文地址:https://arxiv.org/pdf/2404.08189 原文地址:rag-hallucination-structure-research-by-servicenow 在灾难性遗忘和模型漂移中,幻觉仍然是一个挑战。 2024 年 4 月 18 日 灾难性遗忘: 这是在序列学习或连续学习环境中出现…...
ADS基础教程10-多态性(动态模型选择)
目录 一、多态性定义二、操作步骤1.模型建立2.模型选择3.执行仿真 一、多态性定义 ADS中支持一个Symbol中,可以同时存在多个子图。在仿真时可以动态选择不同的子图继续宁仿真。 二、操作步骤 1.模型建立 在上一章A…...
代码随想录第四十六天|单词拆分
题目链接:. - 力扣(LeetCode)...
RabbitMQ的介绍和使用
1.同步通讯和异步通讯 举个例子,同步通讯就像是在打电话,因此它时效性较强,可以立即得到结果,但如果你正在和一个MM打电话,其他MM找你的话,你们之间是不能进行消息的传递和响应的 异步通讯就像是微信&#…...
前端get请求日期类型参数向后端传参失败
1、背景 get请求,通过url上传参,因此日期类型是string类型数据 2、异常信息 nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.time.LocalDate] for…...
【docker 】 push 镜像提示:denied: requested access to the resource is denied
往 Docker Registry (私服)push 镜像提示:denied: requested access to the resource is denied 镜像push 语法:docker push <registry-host>:<registry-port>/<repository>:<tag> docker push 192.16…...
浏览器各类好用插件使用及常见问题(技巧)总结
目录 Vimium C快捷键问题为什么Vimium C - 全键盘操作浏览器插件在百度页面中, x ,o,f等快捷键不起作用如何使用viminum c插件进行自定义快捷键?vimucm 为什么在浏览器首页时快捷键不起作用? 网页截图问题firefox 网页截图使用 idm问题浏览器点击idm 不下载? 待续、更新中 V…...
Python批量计算多张遥感影像的NDVI
本文介绍基于Python中的gdal模块,批量基于大量多波段遥感影像文件,计算其每1景图像各自的NDVI数值,并将多景结果依次保存为栅格文件的方法。 如下图所示,现在有大量.tif格式的遥感影像文件,其中均含有红光波段与近红外…...
6.k8s中的secrets资源
一、Secret secrets资源,类似于configmap资源,只是secrets资源是用来传递重要的信息的; secret资源就是将value的值使用base64编译后传输,当pod引用secret后,k8s会自动将其base64的编码,反编译回正常的字符…...
git 更换远程仓库地址三种方法总结
git 更换远程仓库地址三种方法总结 一、前言 由于私服的 gitlab 的地址变更,导致部分项目代码提交不上去,需要修改远端仓地址。 其它需要修改远程仓地址的情况如:切换git clone 协议由ssh变为https。 二、环境 windows 10git version 2.3…...
快速找出存(不存在)在某个(或多个)文件的文件夹
首先,需要用到的这个工具: 度娘网盘 提取码:qwu2 蓝奏云 提取码:2r1z 想要找出有下面这个文件存在的文件夹 切换到批量文件复制版块,快捷键Ctrl5 右侧,搜索添加 选定范围,勾选搜索文件夹、包…...
Linux USB转串口设备路径的查找方法
1、USB转串口设备 USB转串口设备是在嵌入式软件开发过程中经常要使用的,常常用于对接各种各样的串口设备。如果一台linux主机上使用多个usb转串口设备时,应用程序中就需要知道自己操作的是哪个串口设备。串口设备在系统上电时,由于驱动加载的…...
【初阶数据结构】单链表之环形链表
目录标题 前言环形链表的约瑟夫问题环形链表环形链表|| 前言 前面我们已经学习了关于单链表的一些基本东西,今天我们来学习单链表的一个拓展——环形链表,我们将用力扣和牛客网上的三道题目来分析讲解环形链表问题。 环形链表的约瑟夫问题 我们首先来看…...
【积分,微分,导数,偏导数公式推导】
1. 积分 积分是微积分的一个分支,用于计算曲边梯形的面积或者变速直线运动的总距离等。积分分为不定积分和定积分。 不定积分:给出一个函数,求出其所有可能的原函数。定积分:计算一个函数在特定区间上的积分。 2. 微分 微分是…...
java:递归实现的案例
//求第20个月兔子的对数 //每个月兔子对数:1,1,2,3,5,8 public class Test {//求第20个月兔子的对数//每个月兔子对数:1,1,2,3,5,8pu…...
Arxml文件解析03- 自动驾驶Radar服务radar_svc.arxml
<AR-PACKAGES><AR-PACKAGE><SHORT-NAME>bosch</SHORT-NAME><AR-PACKAGES>...</AR-PACKAGES>...
Elasticsearch安装步骤
引言 Elasticsearch是一个基于Lucene构建的开源、分布式、RESTful搜索和分析引擎。它设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。Elasticsearch为所有类型的数据提供近乎实时的搜索和分析。无论…...
Windows系统和unbtun系统连接usb 3.0海康可见MVS和红外艾睿相机
一.海康可见USB3.0工业面阵相机 海康usb相机需要去海康官网上下载对应系统的MVS客户端及SDK开发包 海康机器人-机器视觉-下载中心 选择Windows系统和unbtun(我是linux aarch64,所以选择了对应压缩包解压) Windows系统 1.双击安装包进入安装界面&…...
深入Django:用户认证与权限控制实战指南
title: 深入Django:用户认证与权限控制实战指南 date: 2024/5/7 18:50:33 updated: 2024/5/7 18:50:33 categories: 后端开发 tags: AuthDecoratorsPermissionsGuardianRESTAuthSessionMgmtMFA 第1章:入门Django与设置 1.1 Django安装与环境配置 在…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...
