python语言程序设计实验教程答案实验三_20194220 实验三《Python程序设计》实验报告...
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程序设计》实验报告...相关推荐
- python语言设计二级教程答案2019_全国计算机等级考试二级教程2019年版——Python语言程序设计参考答案...
第二章 Python语言基本语法元素 一.选择题 C B B C A D B A D B 二.编程题 1.获得用户输入的一个整数N,计算并输出N的32次方. 在这里插入图片描述 2.获得用户输入的一段 ...
- python语言程序设计2019版第二章课后答案-python语言程序设计基础课后答案第二章...
python语言程序设计基础课后答案第二章 以下合法的用户自定义标识符是____________. 导入模块或者模块中的元素要使用关键字________ . 下列哪个函数是用来控制画笔的尺寸的____ ...
- 计算机硬件实验教程pdf,计算机硬件技术基础实验教程答案(重庆大学)
计算机硬件技术基础实验教程答案(重庆大学) 计算机硬件技术基础实验教程答案 实验一:简单程序设计实验 (1)编写一个 32 位无符号数除法的程序,要求将存放在 NUM1 中的 32 位无符号数与存放 ...
- 计算机应用基础实验教程练习题答案,计算机应用基础实验教程答案.doc
计算机应用基础实验教程答案 [篇一:大学计算机基础习题与实验指导 --课后习题答 案] ss=txt> 习题答案 第二章 1,简述计算机中如何区分汉字编码和 ascii 码 asc Ⅱ码与汉字编 ...
- [学习笔记]黑马程序员Spark全套视频教程,4天spark3.2快速入门到精通,基于Python语言的spark教程
文章目录 视频资料: 思维导图 一.Spark基础入门(环境搭建.入门概念) 第二章:Spark环境搭建-Local 2.1 课程服务器环境 2.2 Local模式基本原理 2.3 安装包下载 2.4 ...
- python语言包含的错误,Python语言程序中包含的错误,一般分为三种,以下____________不是其中的一种...
Python语言程序中包含的错误,一般分为三种,以下____________不是其中的一种 答:编译错误 人体体温能自动调控在37度,其原因是( ). 答:人体内产生的热能是分批放出的 人体内有完善的 ...
- python语言入门m-Python2 教程
Python是什么? Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明 ...
- c4d python使用方法_C4D Python语言代码编程教程 Cineversity - Introduction to Python in C4D | 龋齿一号GFXCamp...
C4D Python语言代码编程教程 Cineversity – Introduction to Python in C4D 讲解C4D Python语法,利用Python制作和编辑简单的物体,改变 ...
- python语言智慧树期末答案_Python语言应用智慧树答案章节作业期末答案
Python语言应用智慧树答案章节作业期末答案 更多相关问题 [单选题]112.定义如下变量: int n=10; 则下列循环的输出结果是_______. while(n>7) { n--; p ...
- python语言程序设计实验教程答案实验三_20182204 实验三《Python程序设计》实验报告...
20182204 <Python程序设计>实验三报告 课程:<Python程序设计> 班级:1822 姓名:20182204zwp 学号:20182204 实验教师:王志强老师 ...
最新文章
- 光刻技术的“鬼斧”之变
- android otp接口,Android-高通平台调试camera的OTP参数
- 全面布局大数据平台,银科控股签约神策数据
- Spring JSF集成教程
- TortoiseSVN 配合 Beyond Compare 3 或 WinMerge 的设置
- Spring框架的本质:3了解一点儿JavaConfig
- 05 基于H3 + RH850 的智能座舱功能安全设计
- 操作系统安全与系统攻击
- 为什么会有hash冲突?
- 【PAT_1054】The Dominant Color
- IBM阿蒙克公司已经与纪念斯隆-凯特琳癌症中心合作,用“沃森”来帮助癌症治疗
- 二、H5全景图-朋友圈全景图-720°全景-VR ---- 项目简单分析
- stm32f4 CubeMX生成IAR工程 移植ST官方 Bootloader 教程
- 【034】翼辉信息获得“核高基”重大专项支持
- 《赢在中国》精彩评语
- 河南理工大学计算机学院张磊,河南理工大学关于表彰2010—2011学年学生创先争优活动先进集体和先进.doc...
- RPA机器人有哪三大优势?
- Prometheus-基于Consul的自动注册
- 在itext2.1.4中的pdfPcell没有行合并(setRowspan),只有列合并的处理方法
- 北京邮电大学22级信通 实验三 二叉树
热门文章
- c语言程序设计立体化教程,C语言程序设计立体化教程
- 数据库 SQL 学习(入门篇)
- jquery文档就绪的三种书写方式
- python可视化拖拽编程平台_PythonEditor可视化拼插编辑器:编程不用写代码,拖拖拽拽就可以!...
- oracle regexp
- 计算机工程 目录 2014年第1期 pdf,2013科技核心期刊目录有效期至2014年).pdf
- JAVA 发送邮件功能
- WPS中如何启用宏,附wps.vba.exe下载链接(百度云盘,永久有效)
- Mac OS下Axure RP 8.0.0.3312安装及注册汉化
- 教育平台在线,教育平台源码 类似eduline教育平台系统源码下载