20222207 实验三《Python程序设计》实验报告

20222207刘璟瑜 2024-04-21 18:33:16

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

课程:《Python程序设计》
班级: 2222
姓名: 刘璟瑜
学号:20222207
实验教师:王志强
实验日期:2020年4月17日
必修/选修: 公选课

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

## 2. 实验过程及结果

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

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

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

本次实验有两种通信方式,一种只能通信一次,另一种可以实现多次通信(只能发送一次并接受一次回复,多次发送的消息需要同等数目的回复)

(1)单次通信服务器

import socket
import os
from DesModule import *
file1 = open("秘密", "w+")#"w"
file1.write("20222212收到请回复")
file1.seek(0)
cryptostring = file1.readline()
print(cryptostring)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("localhost", 8000))
# s.connect(("192.168.249.46", 8000))
s.sendall(cryptostring.encode())
data = s.recv(1024)
print("从服务器接收的数据为:",data.decode())
s.close()

单次通信客户端

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("192.168.249.240", 8000))# s.bind("localhost") 0-65535
s.listen()
conn, address = s.accept()#阻塞
data = conn.recv(1024)#接收
print("从客户端收到的信息为:", data.decode())
conn.sendall("20222207收到已回复!".encode())

s.close()

(2)多次通信服务器

import socket

tcpclient = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpclient.connect(("192.168.249.46", 8000))
while True:
    while True:
        data = input('>>>').strip()
        tcpclient.send(data.encode('utf-8'))
        ret = tcpclient.recv(1024)
        print(ret.decode('utf-8'))
tcpclient.close()
多次通信客户端
import socket
tcpclient = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpclient.connect(("192.168.249.46", 8000))
while True:
    while True:
        data = input('>>>').strip()
        tcpclient.send(data.encode('utf-8'))
        ret = tcpclient.recv(1024)
        print(ret.decode('utf-8'))
tcpclient.close()

加密算法DES

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)

实验结果:

(1)作为服务器端 端口号为8000

通信过程:

我方界面

 

 

对方界面

 

(2)作为客户端 端口号为8000

通信过程:

我方界面

 

 

对方界面

img

 

 

3.实验结果:

## 3. 实验过程中遇到的问题和解决过程
问题1:遇到了 [WinError 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次 的问题
问题1解决方案:在csdn上找到,在任务管理器里将其他的pycharm项目关掉
 

4.代码托管

 


## 其他(感悟、思考等)

## 参考资料

-  [《Java程序设计与数据结构教程(第二版)》](https://book.douban.com/subject/26851579/)

-  [《Java程序设计与数据结构教程(第二版)》学习指导](http://www.cnblogs.com/rocedu/p/5182332.html)

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

110

社区成员

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

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