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

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

课程:《Python程序设计》
班级: 2213
姓名: 冯泰瑞
学号:20221320
实验教师:王志强
实验日期:2022年4月13日
必修/选修: 公选课

1.实验内容

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

2. 实验过程及结果

(1)创建好服务端和客户端,以本机IP地址建立通信
(2)加入文件操作,让信息存入文件,再通过文件读取进行传输(包含文件的基本操作,例如打开和读写操作)
(3)加入加解密算法并与本机的IP地址建立通信(发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中)
(4)程序代码托管到码云
(5)加入加解密算法并与他人(20221312付安旭同学)的IP地址建立通信(发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中)
(6)程序代码托管到码云
与本机的IP地址做通信时:
服务器原码:

#server
import socket
import os
from DesModule import *

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("192.168.1.108", 8000))
s.listen()
conn, address = s.accept()
data = conn.recv(1024)
ciphertext = des_encrypt("Hello,I am 20221320 ftr", "12345678")
print("Before decode:", data.decode())
plaintext = des_descrypt(data, "12345678")
print("The message received from the server is:", plaintext)
if os.path.exists("D:\\pythonproject1\\hello"):
    file1 = open("hello", 'a+')
    file1.write(plaintext)
else:
    file1 = open("hello", 'w+')
    file1.write(plaintext)
    file1.seek(0)
file1.close()
conn.sendall(ciphertext.encode())

客户端原码:

#client
import socket
import os
from DesModule import *

if os.path.exists("E:\Python\pythonProject"):
    file1 = open("hello", 'r+')
else:
    file1 = open("hello", 'w+')
    file1.write("Hey 20221320ftr!I'm 20221320ftr!")
    file1.seek(0)
mima = file1.readline()
ciphertext = des_encrypt(mima, "12345678")

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.1.108", 8000))
s.sendall(ciphertext.encode())
data = s.recv(1024)
print("Before decode:", data.decode())
plaintext = des_descrypt(data, "12345678")
print("The message received from the server is:", plaintext)
file1.write(plaintext)
file1.close()
s.close()

加密模块

# -*- coding: utf-8 -*-

# 文件名: DesModule
# 描  述:
# 作  者: besti
# 日  期: 2023/4/11
#  Have you ever seen Los Angeles at 4 a.m?
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("Before decode:",ciphertext)
    plaintext = des_descrypt(ciphertext, "12345678")
    print("The message received from the server is:", plaintext)

客户端通信结果
在这里插入图片描述
服务端通信结果
在这里插入图片描述
有关文件
在这里插入图片描述
上传代码至码云
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
与他人(20221312付安旭同学)的IP地址做通信时:
服务器原码

import socket
import os
from DesModule import *

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("192.168.1.112", 8002))
s.listen()
conn, address = s.accept()
data = conn.recv(1024)
ciphertext = des_encrypt("Hello,I am 20221320 ftr", "12345678")
print("Before decode:", data.decode())
plaintext = des_descrypt(data, "81097581")
print("The message received from the server is:", plaintext)
if os.path.exists("D:\\pythonproject1\\hello"):
    file1 = open("hello", 'a+')
    file1.write(plaintext)
else:
    file1 = open("hello", 'w+')
    file1.write(plaintext)
    file1.seek(0)
file1.close()
conn.sendall(ciphertext.encode())

客户端原码:

import socket
import os
from DesModule import *

if os.path.exists("E:\\Python\\pythonProject\\hello"):
    file1 = open("hello", 'r+')
else:
    file1 = open("hello", 'w+')
    file1.write("Hey 20221320ftr!I'm 20221320ftr!")
    file1.seek(0)
mima = file1.readline()
ciphertext = des_encrypt(mima, "12345678")

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.1.111", 8000))
s.sendall(ciphertext.encode())
data = s.recv(1024)
print("Before decode:", data.decode())
plaintext = des_descrypt(data, "81097581")
print("The message received from the server is:", plaintext)
file1.write(plaintext)
file1.close()
s.close()

加密模块原码

# -*- coding: utf-8 -*-

# 文件名: DesModule
# 描  述:
# 作  者: besti
# 日  期: 2023/4/11
#  Have you ever seen Los Angeles at 4 a.m?
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)

我做服务器的通信结果:
在这里插入图片描述
对方(20221312付安旭同学)做客户端的通信结果:
在这里插入图片描述
我做客户端的通信结果:
在这里插入图片描述
对方(20221312付安旭同学)做服务器的通信结果:
在这里插入图片描述
上传代码至码云:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

  • 问题1:没有安装第三方库pyDes
  • 问题1解决方案:使用了pip安装
  • 问题2:在与对方进行通信时无法实现
  • 问题2解决方案:关闭防火墙

参考资料

实验三 Socket编程技术

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值