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

实验三

实验题目

1、请利用生成器构造一下求阶乘的函数Factorial(),定义一个函数m(),在m()中调用生成器Factorial()生成小于100的阶乘序列存入集合s中,输出s。

【代码】

def factorial():

  n=1

  f=1

  while 1:

​    f *= n

​    yield (f)

​    n+=1

 

def m():

  s=set()

  for f in factorial():if f<100:

​      s.add(f)else:break

  print(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.py

import socket

class 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.py

from UDPT import UDPTalk

def ServerApp():

  server = UDPTalk('localhost', 12345)

  server_alive = True

  try:

​    server.ServerU()

  except KeyboardInterrupt:

​    server_alive = Falseprint("客户端已退出。")

  finally:if server_alive:print("客户端已退出。")

if __name__ == '__main__':

ServerApp()

CUT.py

from UDPT import UDPTalk

def 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.py

from TCPT import TCPTalk
def ClientApp():
  client = TCPTalk('localhost', 12345)
  client.ClientU()
if __name__ == '__main__':
  ClientApp()

STT.py

from TCPT import TCPTalk

def ServerApp():

  server = TCPTalk('localhost', 12345)

  server.ServerU()

if __name__ == '__main__':

  ServerApp()

TCPT.py

import socket

class 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 = 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 factorial(self):

​    self.n = 1

​    self.f = 1while 1:

​      self.f *= self.n

​      yield (self.f)

​      self.n += 1

  def 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:
          break
        received_msg = data.decode()
        print(f"客户端 [{addr[0]}:{addr[1]}] 发送的消息:{received_msg}")
        if received_msg == '1':
          result = self.m(5)  # 示例调用 m() 函数,参数为 5
          print(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("已退出客户端应用。")
        break
      self.sock.send(message.encode())
      print("消息已发送。")
    self.sock.close()

【实例】

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

做安卓应用开发的我,转前端开发了

距离转前端开发已经快3个月了&#xff0c;现在自己也慢慢的熟悉了开发。 在2月份的时候。领导找我们移动小组的谈话&#xff0c;主要是关于转前端或者后端的问题。由于公司移动端的选型&#xff0c;对安卓原生的需求降低&#xff0c;问下我们转其他开发的需求。 我毫不犹豫的选…

一文了解栈

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、栈是什么&#xff1f;二、栈的实现思路1.顺序表实现2.单链表实现3.双向链表实现 三、接口函数的实现1.栈的定义2.栈的初始化3.栈的销毁4.入栈5.出栈6.返回栈…

MFC列表控件用ADO添加数据实例

1、本程序基于前期我的博客文章《MFC用ADO连接ACESS数据库实例(免费源码下载)》 程序功能通过编辑框、组合框实时将数据写入ACESS数据库并在列表控件上显示。 2、在主界面资源视图上加上一个按钮控件、两个静态文本、一个编辑框IDC_EDIT1变量名name、一个组合框IDC_COMBO1变量名…

【从零开始学习Minio | 第一篇】快速介绍什么是Minio

前言&#xff1a; 在当今数字化时代&#xff0c;数据的存储和管理已经成为了企业发展中的关键一环。随着数据量的不断增长和数据安全性的日益受到重视&#xff0c;传统的数据存储解决方案往往面临着诸多挑战。为了应对这些挑战&#xff0c;云存储技术应运而生&#xff0c;并在…

VMware下Ubuntu的安装教程

文章目录 一、Ubuntu如何下载1.下载官方地址https://ubuntu.com/2.点选Ubuntu服务器版本3.点击下载Ubuntu服务器版本iso镜像二、VMware安装Ubuntu服务器系统1.创建虚拟机2.选择下载好的Ubuntu服务器镜像3.创建安装完成三、Ubuntu Server如何设置1.Ubuntu Server没有中文所以全都…

Skywalking数据持久化与自定义链路追踪

学习本篇文章之前首先要了解一下Sky walking的基础知识 分布式链路追踪工具Skywalking详解 一&#xff0c;Sky walking数据持久化 Sky walking提供了es&#xff0c;MySQL等数据持久化方案&#xff0c;默认使用h2基于内存的数据库&#xff0c;重启之后数据即会丢失。 在实际工…

asp.net成绩查询系统

说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于asp.net架构和sql server数据库 功能模块&#xff1a; asp.net成绩查询系统 学生功能有查看成绩和修改账号密码等 后台管理员可以进行用户管理 管理员添加管理员查询注…

element-plus el-time-picker 时间段选择(可多选)

实现一个如图的时间段选择器 处理好时间回显逻辑&#xff0c;组件内[‘’,‘’],后端数据[{startTime:‘’,endTime:‘’}]处理好加和减的显示逻辑 <template><div><div v-for"(item, index) in currentChoose" :key"index" class"fl…

[Java EE] 多线程(九):ReentrantLock,Semaphore,CountDownLatch与线程安全的集合类(多线程完结)

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (91平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;Java …

C++之类与对象

1、类声明 2、共有、私有、保护成员。&#xff08;就比如说你一个变量是private的&#xff0c;然后在main函数中&#xff0c;就调用不了&#xff0c;只能在这个类.cpp中调用&#xff09; 3、数据抽象和封装 4、内联函数 内存体积会增大&#xff0c;以空间换时间&#xff1a;编…

php使用服务器端和客户端加密狗环境部署及使用记录(服务器端windows环境下部署、linux环境宝塔面板部署、客户端部署加密狗)

php使用服务器端和客户端加密狗环境部署及使用记录 ViKey加密狗环境部署1.windows环境下部署开发文档验证代码提示Fatal error: Class COM not found in 2.linux环境下部署&#xff08;宝塔面板&#xff09;开发文档验证代码提示Fatal error: Uncaught Error: Call to undefine…

【软测学习笔记】Python入门Day02

&#x1f31f;博主主页&#xff1a;我是一只海绵派大星 &#x1f4da;专栏分类&#xff1a;软件测试笔记 &#x1f4da;参考教程&#xff1a;黑马教程❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ python安装 1、进入Python的官方下载页面&#xff1a; Download Python | Py…

Java+SpringBoot+JSP实现在线心理评测与咨询系统

前言介绍 随着互联网技术的高速发展&#xff0c;人们生活的各方面都受到互联网技术的影响。现在人们可以通过互联网技术就能实现不出家门就可以通过网络进行系统管理&#xff0c;交易等&#xff0c;而且过程简单、快捷。同样的&#xff0c;在人们的工作生活中&#xff0c;也就…

用PowerPoint创建毛笔字书写动画

先看看下面这个毛笔字书写动画&#xff1a; 这个动画是用PowerPoint创建的。下面介绍创建过程。 1、在任何一款矢量图片编辑软件中创建一个图片&#xff0c;用文字工具输入文字内容。我用的是InkScape。排好版后将图片保存为.svg格式的矢量图片文件。 2、打开PowerPoint&…

RTT潘多拉开发板上实现电源管理

简介 随着物联网(IoT)的兴起&#xff0c;产品对功耗的需求越来越强烈。作为数据采集的传感器节点通常需要在电池供电时长期工作&#xff0c;而作为联网的SOC也需要有快速的响应功能和较低的功耗。 在产品开发的起始阶段&#xff0c;首先考虑是尽快完成产品的功能开发。在产品…

C++变量的作用域与存储类型

一 变量的作用域和存储类型 1 变量的作用域(Scope) 指在源程序中定义变量的位置及其能被读写访问的范围分为局部变量(Local Variable)和全局变量(Global Variable) 1&#xff09;局部变量(Local Variable) 在语句块内定义的变量 形参也是局部变量 特点&#xff1a; 生存期是…

web 基础之 HTTP 请求

web 基础 网上冲浪 就是在互联网(internet)上获取各种信息&#xff0c;进行工作&#xff0c;或者娱乐&#xff0c;他的英文表示surfing the Internet&#xff0c;因 “surfing”d的意思是冲浪&#xff0c;即成为网上冲浪&#xff0c;这是一种形象说法&#xff0c; 也是一个非…

交易复盘-20240507

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 蔚蓝生物 (5)|[9:25]|[36187万]|4.86 百合花…

SpringBootWeb入门

SpringBoot可以帮助我们快速的构建应用程序、简化开发、提高效率 创建SpringBoot工程&#xff0c;并勾选web开发相关依赖 定义HelloController类&#xff0c;添加方法&#xff0c;并添加注解 运行测试 创建SpringBoot工程(联网下载) 在File里面点击new Module 点击next 修…

Linux\_c输出

第一条Linux_c输出 初界面 : ls # 显示目录下的文件cd # 进入到某个目录 # 比如 我进入了Codels # 发现没有显示, 说明为文件下为空vim cpucdoe.c # 创建一个 .c的源码文件进入到了vim的编辑界面: i # 按i 就可以进行编辑 , 下面显示插入标识在编辑模式下, 可以通…