20192221 2019-2020-2 《Python程序设计》实验x报告
课程:《Python程序设计》
班级: 1922
姓名: 叶蕊馨
学号:20192221
实验教师:王志强老师
实验日期:2020年5月16日
必修/选修: 公选课
1.实验内容
(一)实验内容
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
(二)实验要求
(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
(2)要求包含文件的基本操作,例如打开和读写操作。
(3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
(4)程序代码托管到码云。
2. 实验过程及结果
本实验可以分为三部分,一是对socket网络编程的使用(其中又分为服务端和客户端),二是加密解密的操作,三是对文件的操作。
1.client部分
- 1.将client和sever连接
- 2.将传输的文字写入文件并读取
- 3.加密并合成字符串
- 4.传输
s.sendall(unknown.encode())
print("已发送加密后的内容")
print(unknown)
s.close()
2.sever部分
- 1.连接并监听接收
- 2.写好一个解密函数
- 3.将传过来的内容进行解密并写入文件
3.完整代码
import os
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('127.0.0.1',8001))
os.makedirs("C:\\Users\\10522\\Desktop\\1922")
file = open("C:\\Users\\10522\\Desktop\\1922\\20192221client-send.txt", 'w')
file.write("钻石路虽然扎脚,但熠熠生辉啊\n")
file.write("只有手写的信才能被泪水打湿")
file.close()
file = open("C:\\Users\\10522\\Desktop\\1922\\20192221client-send.txt", 'r')
content = file.readlines()
str = ''
for item in content:
str += item
print("读取到的内容:\n",str)
file.close()
unknown = '' # 加密
for i in range(len(str)):
if ord(str[i]) < 125 and str[i] != '\n':
temp = chr(ord(str[i]) + 1)
unknown += temp+' '
else:
unknown += str[i]+' '
s.sendall(unknown.encode())
print("已发送加密后的内容")
print(unknown)
s.close()
import socket
import os
def decode(unknown):
"""
:param unknown: 未知字符,用来拿去解密
:return: known,已经完成解密的字符
"""
known = ''
for i in range(len(unknown)-1):
if unknown[i] == '\n':
known += '\n'
elif ord(unknown[i]) <= 125:
known += chr(ord(unknown[i])-1)
return known
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('127.0.0.1',8001))
s.listen()
conn, address = s.accept()
unknown = conn.recv(1024)
file = open("C:\\Users\\10522\\Desktop\\1922\\20192221sever.txt","w")
unknown = unknown.decode()
print("正在解码中.....")
unknown = unknown.split(' ')
known = decode(unknown)
file.write(known)
file.close()
print("已将收到的内容写到\"C:\\Users\\10522\\Desktop\\1922\\20192221sever.txt\"中,请注意查收!")
s.close()
4.运行结果
5.码云链接
3. 实验过程中遇到的问题和解决过程
- 问题1:对顺序的不熟悉,不清楚是先把要传的写入文件还是先加密
- 问题1解决方案:
-
总体来说还是对文件操作的不熟悉,百度了一下后发现可以写入文件再读出文件,和加密并没有什么冲突
- 问题2:对加密算法运用
-问题2的解决方案
- 百度了一些比较简单的加密算法(但对有的算法还是不太理解原理),于是用了超级简单的一种(没学过也能看懂的)
其他(感悟、思考等)
1.不要常问老师或者同学,要学会自己解决问题,自己再搜索网页上寻找想要的答案,会比问老师同学来得更有成就感
2.对于网络编程的不熟悉在这次实验中体现的淋漓尽致,今后要多加练习学习新的部分(感觉网络编程在python更上一步的路上还是很重要的)
3.不过两周左右没写博客,连markdown的基本用法都要忘了,熟能生巧,多多练习吧