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 = Falseprint("客户端已退出。")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 = 1while 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:breakprint(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()

【实例】

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Map集合的实现类~TreeMap

重复依据&#xff1a;通过对键进行排序 先创建Student类&#xff0c;并在主函数new对象&#xff0c;然后创建TreeMap&#xff1a; 建立红黑树&#xff0c;需要在Student类后面实现类的接口&#xff1a; 重写其中的compareTo方法&#xff1a; 或者可以自定义比较器&#xff1a; …

element-plus el-cascader 懒加载实现-省市区街道选择及回显

大概思路&#xff1a; 准备一个接口可以通过父Id,查询到下一级省市区街道的信息&#xff1b;如下方的getRegionListOne确定后端的数据结构&#xff0c;需要在created里边处理数据回显逻辑el-cascader接收的数据格式是[‘’,‘’,‘’];后端的数据格式多为[{provinceId: ‘’, …

2005-2021年全国各地级市生态环境注意力/环保注意力数据(根据政府报告文本词频统计)

2005-2021年全国各地级市生态环境注意力/环保注意力数据&#xff08;根据政府报告文本词频统计&#xff09; 2005-2021年全国各地级市生态环境注意力/环保注意力数据&#xff08;根据政府报告文本词频统计&#xff09; 1、时间&#xff1a;2005-2021年 2、范围&#xff1a;2…

面试题:String类型长度有限制吗?最大多少?

简介 Java中String是有长度限制的。String还有长度限制?是的有,而且在JVM编译中还有规范,String长度限制的场景(将某固定文件转码成Base64的形式用字符串存储,在运行时需要的时候在转回来,当时文件比较大),那这个规范限制到底是怎么样的,我们分析下。 …

IP证书能免费申请吗

IP SSL证书是一种数字证书&#xff0c;用于保护网络服务器和网络浏览器之间的通信。该证书是一种主要保护公网IP地址的专属信任SSL证书。 IP类型的SSL证书对于直接用IP地址传输数据的技术人员来说&#xff0c;十分重要&#xff01;无论是防洪还是防劫持还是数据加密都起到了关…

奥威-金蝶BI现金流量表模板,可借鉴、可套用

企业现金流一旦出了问题都是大问题&#xff0c;会直接影响到企业的日常运作&#xff0c;甚至直接关系到企业能不能继续存活&#xff0c;因此现金流量表是企业财务分析中重要报表之一&#xff0c;也是企业监控财务监控情况的重要手段之一。那么这么重要的一份现金流量表该怎么做…

rag-embeddings基础流程

什么是检索增强的生成模型 LLM 固有的局限性 LLM 的知识不是实时的LLM 可能不知道你私有的领域/业务知识 检索增强生成 RAG&#xff08;Retrieval Augmented Generation&#xff09;顾名思义&#xff0c;通过检索的方法来增强生成模型的能力。 类比&#xff1a;你可以把这个…

JSP企业快信系统的设计与实现参考论文(论文 + 源码)

【免费】JSP企业快信系统.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89277688 JSP企业快信系统的设计与实现 摘 要 计算机网络的出现到现在已经经历了翻天覆地的重大改变。因特网也从最早的供科学家交流心得的简单的文本浏览器发展成为了商务和信息的中心…

练习项目后端代码解析切面篇(Aspect)

前言 之前注解篇时我说&#xff0c;通常情况下一个自定义注解一般对应一个切面&#xff0c;虽然项目里的切面和注解个数相同&#xff0c;但是好像有一个名字看起来并不对应&#xff0c;无所谓&#xff0c;先看了再说。 ExceptionLogAspect切面 我在里面做了具体注释&#x…

如何用TONGYILingma进行AI辅助编程?

通义灵码&#xff0c;是阿里云出品的一款基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、异常报错排查等能力&#xff0c;并针对阿里云的云服务使用场景调优&#xff0c…

Scroll生态项目Penpad,再获Presto Labs的投资

Penpad是Scroll生态的LaunchPad平台&#xff0c;其整计划像收益聚合器以及RWA等功能于一体的综合性Web3平台拓展&#xff0c;该平台在近期频获资本市场关注&#xff0c;并获得了多个知名投资者/投资机构的支持。 截止到本文发布前&#xff0c;Penpad已经获得了包括Scroll联合创…

基于Flask的岗位就业可视化系统(一)

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 前言 本项目综合了基本数据分析的流程&#xff0c;包括数据采集&#xff08;爬虫&#xff09;、数据清洗、数据存储、数据前后端可视化等 推荐…