当前位置: 首页 > news >正文

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()

【实例】

在这里插入图片描述

在这里插入图片描述

相关文章:

python实验三 实现UDP协议、TCP协议进行服务器端与客户端的交互

实验三 实验题目 1、请利用生成器构造一下求阶乘的函数Factorial()&#xff0c;定义一个函数m()&#xff0c;在m()中调用生成器Factorial()生成小于100的阶乘序列存入集合s中&#xff0c;输出s。 【代码】 def factorial():n1f1while 1:​ f * n​ yield (f)​ n1…...

ServiceNow 研究:通过RAG减少结构化输出中的幻觉

论文地址&#xff1a;https://arxiv.org/pdf/2404.08189 原文地址&#xff1a;rag-hallucination-structure-research-by-servicenow 在灾难性遗忘和模型漂移中&#xff0c;幻觉仍然是一个挑战。 2024 年 4 月 18 日 灾难性遗忘&#xff1a; 这是在序列学习或连续学习环境中出现…...

ADS基础教程10-多态性(动态模型选择)

目录 一、多态性定义二、操作步骤&#xff11;.模型建立&#xff12;.模型选择&#xff13;.执行仿真 一、多态性定义 ADS中支持一个Symbol中&#xff0c;可以同时存在多个子图。在仿真时可以动态选择不同的子图继续宁仿真。 二、操作步骤 &#xff11;.模型建立 在上一章A…...

代码随想录第四十六天|单词拆分

题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09;...

RabbitMQ的介绍和使用

1.同步通讯和异步通讯 举个例子&#xff0c;同步通讯就像是在打电话&#xff0c;因此它时效性较强&#xff0c;可以立即得到结果&#xff0c;但如果你正在和一个MM打电话&#xff0c;其他MM找你的话&#xff0c;你们之间是不能进行消息的传递和响应的 异步通讯就像是微信&#…...

前端get请求日期类型参数向后端传参失败

1、背景 get请求&#xff0c;通过url上传参&#xff0c;因此日期类型是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 &#xff08;私服&#xff09;push 镜像提示&#xff1a;denied: requested access to the resource is denied 镜像push 语法&#xff1a;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模块&#xff0c;批量基于大量多波段遥感影像文件&#xff0c;计算其每1景图像各自的NDVI数值&#xff0c;并将多景结果依次保存为栅格文件的方法。 如下图所示&#xff0c;现在有大量.tif格式的遥感影像文件&#xff0c;其中均含有红光波段与近红外…...

6.k8s中的secrets资源

一、Secret secrets资源&#xff0c;类似于configmap资源&#xff0c;只是secrets资源是用来传递重要的信息的&#xff1b; secret资源就是将value的值使用base64编译后传输&#xff0c;当pod引用secret后&#xff0c;k8s会自动将其base64的编码&#xff0c;反编译回正常的字符…...

git 更换远程仓库地址三种方法总结

git 更换远程仓库地址三种方法总结 一、前言 由于私服的 gitlab 的地址变更&#xff0c;导致部分项目代码提交不上去&#xff0c;需要修改远端仓地址。 其它需要修改远程仓地址的情况如&#xff1a;切换git clone 协议由ssh变为https。 二、环境 windows 10git version 2.3…...

快速找出存(不存在)在某个(或多个)文件的文件夹

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 想要找出有下面这个文件存在的文件夹 切换到批量文件复制版块&#xff0c;快捷键Ctrl5 右侧&#xff0c;搜索添加 选定范围&#xff0c;勾选搜索文件夹、包…...

Linux USB转串口设备路径的查找方法

1、USB转串口设备 USB转串口设备是在嵌入式软件开发过程中经常要使用的&#xff0c;常常用于对接各种各样的串口设备。如果一台linux主机上使用多个usb转串口设备时&#xff0c;应用程序中就需要知道自己操作的是哪个串口设备。串口设备在系统上电时&#xff0c;由于驱动加载的…...

【初阶数据结构】单链表之环形链表

目录标题 前言环形链表的约瑟夫问题环形链表环形链表|| 前言 前面我们已经学习了关于单链表的一些基本东西&#xff0c;今天我们来学习单链表的一个拓展——环形链表&#xff0c;我们将用力扣和牛客网上的三道题目来分析讲解环形链表问题。 环形链表的约瑟夫问题 我们首先来看…...

【积分,微分,导数,偏导数公式推导】

1. 积分 积分是微积分的一个分支&#xff0c;用于计算曲边梯形的面积或者变速直线运动的总距离等。积分分为不定积分和定积分。 不定积分&#xff1a;给出一个函数&#xff0c;求出其所有可能的原函数。定积分&#xff1a;计算一个函数在特定区间上的积分。 2. 微分 微分是…...

java:递归实现的案例

//求第20个月兔子的对数 //每个月兔子对数&#xff1a;1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;8 public class Test {//求第20个月兔子的对数//每个月兔子对数&#xff1a;1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;8pu…...

Arxml文件解析03- 自动驾驶Radar服务radar_svc.arxml

<AR-PACKAGES><AR-PACKAGE><SHORT-NAME>bosch</SHORT-NAME><AR-PACKAGES>...</AR-PACKAGES>...

Elasticsearch安装步骤

引言 Elasticsearch是一个基于Lucene构建的开源、分布式、RESTful搜索和分析引擎。它设计用于云计算中&#xff0c;能够达到实时搜索&#xff0c;稳定&#xff0c;可靠&#xff0c;快速&#xff0c;安装使用方便。Elasticsearch为所有类型的数据提供近乎实时的搜索和分析。无论…...

Windows系统和unbtun系统连接usb 3.0海康可见MVS和红外艾睿相机

一.海康可见USB3.0工业面阵相机 海康usb相机需要去海康官网上下载对应系统的MVS客户端及SDK开发包 海康机器人-机器视觉-下载中心 选择Windows系统和unbtun&#xff08;我是linux aarch64,所以选择了对应压缩包解压&#xff09; Windows系统 1.双击安装包进入安装界面&…...

深入Django:用户认证与权限控制实战指南

title: 深入Django&#xff1a;用户认证与权限控制实战指南 date: 2024/5/7 18:50:33 updated: 2024/5/7 18:50:33 categories: 后端开发 tags: AuthDecoratorsPermissionsGuardianRESTAuthSessionMgmtMFA 第1章&#xff1a;入门Django与设置 1.1 Django安装与环境配置 在…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

【WebSocket】SpringBoot项目中使用WebSocket

1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖&#xff0c;添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...

Redis上篇--知识点总结

Redis上篇–解析 本文大部分知识整理自网上&#xff0c;在正文结束后都会附上参考地址。如果想要深入或者详细学习可以通过文末链接跳转学习。 1. 基本介绍 Redis 是一个开源的、高性能的 内存键值数据库&#xff0c;Redis 的键值对中的 key 就是字符串对象&#xff0c;而 val…...