学号 2019-2020-2 《Python程序设计》实验三报告

课程:《Python程序设计》
班级: 1912
姓名: 何应霆
学号:20191221
实验教师:王志强
实验日期:2020年5月16日
必修/选修: 公选课

1.实验内容

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

2. 实验过程及结果

客户端代码如下:
import socket
c=0
key = 0
d = 0
n = 0
for o in range(1,1000):
key = key10 + 1
a = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
a.connect(('192.168.56.1',8001))
p = input("请输入文件的位置:")
File = open(p,"r")
list1 = File.readlines()
for i in list1:
n = n+1
a.sendall(str(n).encode())
for i in list1:
for j in i:
b = ord(j)
d = d
256+b
e = d^key
a.sendall(str(e).encode())
File.close()
c = a.recv(1024)
print(c.decode())
a.close()
服务器代码如下:
import os
import socket
key = 0
b = "".encode()
for o in range(1,1000):
key = key*10 + 1
g = ""
coon = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
coon.bind(('192.168.56.1',8001))
coon.listen()
coon,daress = coon.accept()
File = open("C:\Users\ginjzlbg\Desktop\test\Filerecived","w+")
n = coon.recv(1024)
n1 = int(n.decode())
for i in range(0,n1):
b = coon.recv(1024)
d = int(b.decode())
d = d ^ key
while d != 0:
e = d % 256
d = d - e
d = int(d // 256)
m = chr(e)
g = m + g
File.write(g)
File.close()
coon.sendall("已收到文件".encode())
这是文件C:\Users\ginjzlbg\Desktop\test\Filesend以及运行后多出的文件Filerecived

这里我采用的是xor加密算法,key用100个1组成的一百位数充当,由客户端加密后传输到服务器,再由服务器解密后传输到文件中

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

虽然只遇到了一个问题,但是确确实实被困扰了很久

  • 问题1:多行接收的问题
  • 问题1解决方案:引入了变量n,在开始传输文件前先用n将行数记录下来并且传输到服务器,再利用for循环接收

其他(感悟、思考等)

以前自己写过的代码一定要保存,比如这次中XOR加密的方式和解密的方式全部来自于我之前写的代码中
想要自己以后也看得懂代码一定要注释,比如这次我花了许多时间来搞懂之前自己写的代码,是很不划算的。