20234320 罗子林 《Python程序设计》实验三报告

20234320 罗子林 2024-04-24 23:30:52

20234320罗子林 《Python程序设计》实验三报告

课程:《Python程序设计》
班级: 2324
姓名: 罗子林
学号:20234320
实验教师:王志强
实验日期:2024年4月24日
必修/选修: 公选课

1.实验内容

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

2. 实验过程及结果

(1)第一类服务端与客户端只执行一次相互传输操作,客户端先使用Des模块加密,再编码,将数据传输给服务端,服务端接收后将数据解码再解密,打印数据;

第一类服务端

import socket
from DesModule import des_descrypt,des_encrypt
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("172.16.208.90", 2025))
s.listen()
conn, address = s.accept()
data = conn.recv(1024)
plaintext = des_descrypt(data.decode(), "12345678")
print("从客户端收到的信息为:", plaintext)
ciphertext = des_encrypt("20234320", "12345678")
conn.sendall(ciphertext.encode())

s.close()

第一类客户端

import socket
import os
from DesModule import *
file1 = open("秘密", "w+")#"w"
ciphertext = des_encrypt("hello", "12345678")
file1.write(ciphertext)
file1.seek(0)
cryptostring = file1.readline()
print(cryptostring)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("172.16.211.247", 8000))
s.sendall(cryptostring.encode())
data = s.recv(1024)
data=des_descrypt(data.decode(), "12345678")
print("从服务器接收的数据为:",data)
s.close()

(2)第二类服务端与客户端可执行多次对话操作,传输及加密原理同上,增加了循环操作实现对话功能,并进行了异常处理保证程序正确运行不会中断;

第二类客户端

import socket
from DesModule import*
tcpclient = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpclient.connect(("172.16.211.247", 9000))
while True:
    while True:
        data: str = input('>>>').strip()
        ciphertext = des_encrypt(data, "12345678")
        tcpclient.send(ciphertext.encode('utf-8'))
        ret = tcpclient.recv(1024)
        ret = ret.decode('utf-8')
        plaintext = des_descrypt(ret, "12345678")
        print(plaintext)

tcpclient.close()

第二类服务端

import socket
import DesModule

tcpserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpserver.bind(("172.16.211.247", 9000))
tcpserver.listen(5)

while True:
    conn, addr = tcpserver.accept()
    print(conn)
    while True:
        try:
            data = conn.recv(1024)
            decrypted_data = DesModule.des_descrypt(data.decode("utf-8"), "12345678")
            print("收到来信:", decrypted_data)
            ret_data = input("请回复:")
            encrypted_ret_data = DesModule.des_encrypt(ret_data, "12345678")
            conn.send(encrypted_ret_data.encode('utf-8'))
        except Exception as wrong:
            print("发生异常:",wrong)
            break
    conn.close()

(3)运行结果(与20232402 王艺瑶进行通话)

img

img

img

img

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

  • 问题1:编码与加密顺序不对,导致传入数据类型错误;
  • 问题1解决方案:查询模块,找到传入数据的要求,将加密与编码的顺序调换;
  • 问题2:运行中加密时提示字符串未编码;
  • 问题2解决方案:Des模块仅支持英文加密,对话只能使用英文

4.感悟

在调用函数或是模块时,要搞清楚需要传入的参数类型,返回的参数以及函数的功能,往往能避免错误,减少调试时间。

5.参考资料

Python——加密算法DES
DES加密算法及Python实现

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

110

社区成员

发帖
与我相关
我的任务
社区描述
人生苦短,我用Python!
python3.11 高校
社区管理员
  • blackwall0321
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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