学号 2022-2023-2 《Python程序设计》实验x报告
课程:《Python程序设计》
班级:2212
姓名:王澜
学号:20221211
实验教师:王志强
实验日期:2020年4月20日
必修/选修: 公选课
1.实验内容
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
(2)要求包含文件的基本操作,例如打开和读写操作。
(3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
(4)程序代码托管到码云。
注:在华为ECS服务器(OpenOuler系统)和物理机(Windows/Linux系统)上使用VIM、PDB、IDLE、Pycharm等工具编程实现。
2. 实验过程及结果
(一)客户端代码
from DesModule import des_encrypt
from DesModule import des_descrypt
import socket
import os
if os.path.exists("D:\python作业\实验三\对话.txt"):
file1=open("对话.txt","a+")
else:
file1=open("对话.txt","w+")
file1.write("Do you love watching TV?")
file1.seek(0)
cryptostring = file1.readline()
text = des_encrypt(cryptostring,"12345678")
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("172.20.10.6",8000))
s.sendall(text.encode())
data=s.recv(1024)
print("解密前:",data.decode())
plaintext=des_descrypt(data.decode(),"12345678")
print("接受的数据:",plaintext)
file1.write(plaintext)
file1.close()
s.close()
(二)服务端代码
import socket
import os
from DesModule import *
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("172.20.10.6", 8000))
s.listen()
conn, address = s.accept()
data = conn.recv(1024)
ciphertext = des_encrypt("buchi", "12345678")
print("解密前", data.decode())
plaintext = des_descrypt(data, "12345678")
print("来自客户端的信息是", plaintext)
if os.path.exists("D:\python作业\实验三\对话.txt"):
file = open("对话.txt", 'a+')
file.write(plaintext)
else:
file = open("对话.txt", 'w+')
file.write(plaintext)
file.seek(0)
file.close()
conn.sendall(ciphertext.encode())
(三)加密代码
from pyDes import *
import binascii
def des_encrypt(s, KEY):
secret_key = KEY
iv = secret_key
k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
en = k.encrypt(s, padmode=PAD_PKCS5)
return binascii.b2a_hex(en).decode()
def des_descrypt(s, KEY):
secret_key = KEY
iv = secret_key
k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)
de = k.decrypt(binascii.a2b_hex(s), padmode=PAD_PKCS5)
return de.decode()
if __name__ == "__main__":
ciphertext = des_encrypt("hello, world!", "12345678")
print("密文:",ciphertext)
plaintext = des_descrypt(ciphertext, "12345678")
print("解密后的明文:", plaintext)
(四)运行结果
(五)上传至码云
3. 实验过程中遇到的问题和解决过程
- 问题1:端口始终不正确,要么是计算机积极拒绝、要么是一个端口只允许一次、要么是远程已帮忙关闭一个端口,始终无法传输信息
- 问题1解决方案:更换ip地址,使用个人手机热点,远离校园网,更换手机热点的ip地址,就成功传输了。
- 问题2:出现bug,显示只能和已编码的数据传输。
- 问题2解决方案:后来发现中文不能传输,改成英文加拼音的形式就好。
其他(感悟、思考等)
这个实验我一次提交是4月份,那个时候被python和计算机吓怕了,在上一个帖子中并没有成功得到实验结果,打算后来再提交一个成功的,一直拖到现在,稍微放下了点对编程的畏惧,在寻求了室友的帮助下,成功解决了一直困惑我的疑难杂症。