学号2022420 2022-2023-2 《Python程序设计》实验三报告

SAltriaPendragon 2023-04-17 20:47:47

课程:《Python程序设计》
班级: 2224
姓名: 戴天锐
学号:20222420
实验教师:王志强
实验日期:2023年4月13日
必修/选修: 公选课

1.实验内容

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

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

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

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

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

2. 实验过程及结果

编码并与同学进行通信

服务端代码

import socket
import os
import DesModule

if os.path.exists("Host"):
    file_1=open("Host","r+")
else:
    file_1=open("Host", "w+")
file_1.write("Hi!My name is Dai Tianrui.")
file_1.seek(0)

inf=DesModule.des_encrypt(file_1.readline(),"12345678")
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(("172.16.224.229",8010))
s.listen()
conn,address=s.accept()
data=conn.recv(1024)
print("The information received from the client is:",DesModule.des_descrypt(data.decode(),"12345678"))
conn.sendall(inf.encode())
file_1.close()
s.close()

服务端运行结果

 客户端代码

import socket
import os
import DesModule

if os.path.exists("Client"):
    file_2 = open("Client", "r+")
else:
    file_2 = open("Client", "w+")
file_2.write("Hi!What is your name?")
file_2.seek(0)
inf = DesModule.des_encrypt(file_2.readline(), "12345678")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("172.16.214.136",8010))
s.sendall(inf.encode())
data = s.recv(1024)
plaintext = DesModule.des_descrypt(data.decode(), "12345678")
print("The received data is:", plaintext)
file_2.close()
s.close()

 客户端运行结果

 DES加密算法

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解决方案:服务端地址是自己

其他(感悟、思考等)

参考资料

...全文
66 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

144

社区成员

发帖
与我相关
我的任务
社区描述
开展Python教学和技术交流
python 高校 北京·丰台区
社区管理员
  • blackwall0321
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧