20194220 2019-2020-2 《Python程序设计》实验三报告

课程:《Python程序设计》

班级: 1942

姓名: 梁勇

学号:20194220

实验教师:王志强

实验日期:2020年5月16日

必修/选修: 公选课

1.实验内容

(1)内容:

创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。

(2)要求:

(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;

(2)要求包含文件的基本操作,例如打开和读写操作。

(3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。

(4)程序代码托管到码云。

2. 实验过程及结果

(1)实验思路

首先明确题目要求用套接字Socket进行网络编程。python中就提供了Socket模块,用来建立具有TCP\UDP的简单服务器。因此要先明确是选择TCP编程还是UDP编程。TCP用于建立可靠连接,并且双方是可以以流的形式发送数据。相对于TCP,UDP面向无连接的协议。用UDP协议不需要建立连接,只需要知道IP地址和端口,只能确定发送,不保证到达,但是优点是速度快。因此,为保证实验正常进行,选择TCP编程。

关于文件的操作,就主要用到file方法和os模块,直接import函数调用就好了

关于加密解密,老师没做要求,便选择较为简单好操作调试的使用base64进行算法加密解密(不过此方法别人拿到密文亦可以转换为明文,较为不安全)

(2)代码介绍

首先是创建服务器和客户端,之前在作业中已经创建过,并且成功进行内容传输,因此只需要稍作修改。下图面是初始原本服务器和客户端代码

客户端:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect(('127.0.0.1', 9999))

str = input("请输入要传输的内容:")

s.sendall(str.encode())

data = s.recv(1024)

print(data)

s.close()

服务器:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind(('127.0.0.1', 9999))

s.listen()

conn, address = s.accept()

data = conn.recv(1024)

print("服务器已经接收到了数据内容:"+ data.decode())

conn.sendall((str(data)).encode())

s.close()

其中,127.0.0.1是本机IP地址(通用)

然后就用file方法、os模块和base64加密进行完善

得到以下代码

客户端:

import socket

import os

import base64

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.connect(('127.0.0.1', 8001))

str1 = input("请输入要传输的文件名:")

s.sendall(str1.encode())

os.chdir(r"E:\程序设计\20194220\text")

file = open(str1,'r')

text = file.read()

text = text.encode('utf-8')

encode_text = base64.b32encode(text)

s.sendall(encode_text)

file.close()

data = s.recv(1024)

print("来自 ('127.0.0.1') 的信息:",data.decode())

s.sendall("收到".encode())

name = s.recv(1024)

print("来自 ('127.0.0.1') 的文件:",name.decode())

data = s.recv(1024)

f = open("reply.txt","w")

f.write(data.decode())

f.close()

print("文件内容已加密发送")

s.sendall("已成功接收,中断连接!".encode())

s.close()

服务器:

import socket

import os

import base64

os.chdir(r"E:\程序设计\20194220\text")

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind(('127.0.0.1', 8001))

s.listen()

conn, address = s.accept()

name = conn.recv(1024)

print("来自", address, "的文件:", name.decode())

data = conn.recv(1024)

f = open("receive.txt", "w")

data1 = base64.b32decode(data)

f.write(data1.decode())

f.close()

print("来自", address, "加密的信息:", data.decode(), "解密后已保存为receive.txt")

conn.sendall("服务器已经收到了数据内容,准备传输文件,注意接收!".encode())

data1 = conn.recv(1024)

conn.sendall("reply.txt".encode())

f = open("receive.txt", "r")

data1 = f.read()

conn.sendall(data1.encode())

f.close()

data1 = conn.recv(1024)

print("来自", address, "的信息", data1.decode())

s.close()

下面是一些关键步骤截图:

创建文件,输入要发送的内容:

先打开服务器:

再打开客户端:

然后在客户端输入要传送的文件名:

3. 实验过程中遇到的问题和解决过程

问题1:找不到文件

问题1解决方案:经过询问同学得知,文件要先自己创建并且写入内容,不然就再加一步写入内容

问题2:输入文件名时“文件”时出现FileNotFoundError

问题2解决方案:文件名要加后缀,.tx

其他(感悟、思考等)一些新知识的学习

关于chird和makedirs方法

os.chdir() 方法用于改变当前工作目录到指定的路径。

s.makedirs() 方法用于递归创建目录。像 mkdir(), 但创建的所有intermediate-level文件夹需要包含子目录。

关于端口设置

小于1024的端口要管理员权限。所以可以往大了写

参考资料

python语言程序设计实验教程答案实验三_20194220 实验三《Python程序设计》实验报告...相关推荐

  1. python语言设计二级教程答案2019_全国计算机等级考试二级教程2019年版——Python语言程序设计参考答案...

    第二章 Python语言基本语法元素 一.选择题 C B B C A D B A D B 二.编程题 1.获得用户输入的一个整数N,计算并输出N的32次方. 在这里插入图片描述 2.获得用户输入的一段 ...

  2. python语言程序设计2019版第二章课后答案-python语言程序设计基础课后答案第二章...

    python语言程序设计基础课后答案第二章 以下合法的用户自定义标识符是____________. 导入模块或者模块中的元素要使用关键字________ . 下列哪个函数是用来控制画笔的尺寸的____ ...

  3. 计算机硬件实验教程pdf,计算机硬件技术基础实验教程答案(重庆大学)

    计算机硬件技术基础实验教程答案(重庆大学) 计算机硬件技术基础实验教程答案 实验一:简单程序设计实验 (1)编写一个 32 位无符号数除法的程序,要求将存放在 NUM1 中的 32 位无符号数与存放 ...

  4. 计算机应用基础实验教程练习题答案,计算机应用基础实验教程答案.doc

    计算机应用基础实验教程答案 [篇一:大学计算机基础习题与实验指导 --课后习题答 案] ss=txt> 习题答案 第二章 1,简述计算机中如何区分汉字编码和 ascii 码 asc Ⅱ码与汉字编 ...

  5. [学习笔记]黑马程序员Spark全套视频教程,4天spark3.2快速入门到精通,基于Python语言的spark教程

    文章目录 视频资料: 思维导图 一.Spark基础入门(环境搭建.入门概念) 第二章:Spark环境搭建-Local 2.1 课程服务器环境 2.2 Local模式基本原理 2.3 安装包下载 2.4 ...

  6. python语言包含的错误,Python语言程序中包含的错误,一般分为三种,以下____________不是其中的一种...

    Python语言程序中包含的错误,一般分为三种,以下____________不是其中的一种 答:编译错误 人体体温能自动调控在37度,其原因是( ). 答:人体内产生的热能是分批放出的 人体内有完善的 ...

  7. python语言入门m-Python2 教程

    Python是什么? Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明 ...

  8. c4d python使用方法_C4D Python语言代码编程教程 Cineversity - Introduction to Python in C4D | 龋齿一号GFXCamp...

    C4D Python语言代码编程教程 Cineversity –  Introduction to Python in C4D 讲解C4D Python语法,利用Python制作和编辑简单的物体,改变 ...

  9. python语言智慧树期末答案_Python语言应用智慧树答案章节作业期末答案

    Python语言应用智慧树答案章节作业期末答案 更多相关问题 [单选题]112.定义如下变量: int n=10; 则下列循环的输出结果是_______. while(n>7) { n--; p ...

  10. python语言程序设计实验教程答案实验三_20182204 实验三《Python程序设计》实验报告...

    20182204 <Python程序设计>实验三报告 课程:<Python程序设计> 班级:1822 姓名:20182204zwp 学号:20182204 实验教师:王志强老师 ...

最新文章

  1. 光刻技术的“鬼斧”之变
  2. android otp接口,Android-高通平台调试camera的OTP参数
  3. 全面布局大数据平台,银科控股签约神策数据
  4. Spring JSF集成教程
  5. TortoiseSVN 配合 Beyond Compare 3 或 WinMerge 的设置
  6. Spring框架的本质:3了解一点儿JavaConfig
  7. 05 基于H3 + RH850 的智能座舱功能安全设计
  8. 操作系统安全与系统攻击
  9. 为什么会有hash冲突?
  10. 【PAT_1054】The Dominant Color
  11. IBM阿蒙克公司已经与纪念斯隆-凯特琳癌症中心合作,用“沃森”来帮助癌症治疗
  12. 二、H5全景图-朋友圈全景图-720°全景-VR ---- 项目简单分析
  13. stm32f4 CubeMX生成IAR工程 移植ST官方 Bootloader 教程
  14. 【034】翼辉信息获得“核高基”重大专项支持
  15. 《赢在中国》精彩评语
  16. 河南理工大学计算机学院张磊,河南理工大学关于表彰2010—2011学年学生创先争优活动先进集体和先进.doc...
  17. RPA机器人有哪三大优势?
  18. Prometheus-基于Consul的自动注册
  19. 在itext2.1.4中的pdfPcell没有行合并(setRowspan),只有列合并的处理方法
  20. 北京邮电大学22级信通 实验三 二叉树

热门文章

  1. c语言程序设计立体化教程,C语言程序设计立体化教程
  2. 数据库 SQL 学习(入门篇)
  3. jquery文档就绪的三种书写方式
  4. python可视化拖拽编程平台_PythonEditor可视化拼插编辑器:编程不用写代码,拖拖拽拽就可以!...
  5. oracle regexp
  6. 计算机工程 目录 2014年第1期 pdf,2013科技核心期刊目录有效期至2014年).pdf
  7. JAVA 发送邮件功能
  8. WPS中如何启用宏,附wps.vba.exe下载链接(百度云盘,永久有效)
  9. Mac OS下Axure RP 8.0.0.3312安装及注册汉化
  10. 教育平台在线,教育平台源码 类似eduline教育平台系统源码下载