20193223 2020-2021-2 《Python程序设计》实验三报告

课程:《Python程序设计》
班级: 1932
姓名: 张中怀
学号:20193223
实验教师:王志强
实验日期:2021年5月30日
必修/选修: 公选课

1.实验内容

1.1 实验内容 

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

1.2 实验要求

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

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

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

2. 实验过程及结果

2.1实验代码

'''
文件名称:Science_3_client
姓名:张中怀
学号:20193223
时间:2021/5/30
'''
import socket
import os.path
import base64#算法
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)     #创造TCP Socket
s.connect(('127.0.0.1', 80))
test = input("请输入要传输的文件名:")
s.sendall(test.encode())     #完整发送TCP数据
os.chdir(r"C:\\Users\Administrator\Desktop\client")   #设置为当前工作目录,只读。
file = open(test, 'r')      #文件打开
text = file.read()
text = text.encode('utf-8')
encode_text = base64.b32encode(text)
s.sendall(encode_text)
file.close()    #关闭文件
data = s.recv(1024)       #接受TCP套接字的数据,且MAX=1024
print("来自 ('127.0.0.1') 的信息:", data.decode())
s.sendall("收到".encode())
name = s.recv(1024)
print("来自 ('127.0.0.1') 的文件:", name.decode())
data = s.recv(1024)
f = open("answer.txt", "w")   #写模式
f.write(data.decode())
f.close()    #关闭
print("文件内容已加密发送")
s.sendall("已成功接收,中断连接!".encode())     #把命令发送给对端
s.close()     #关闭连接
'''
文件名称:Science_3_server
姓名:张中怀
学号:20193223
时间:2021/5/30
'''
import socket
import os.path
import base64
os.chdir(r"C:\\Users\Administrator\Desktop\client")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 80))#绑定
s.listen()#监听
conn, address = s.accept()#阻塞
name = conn.recv(1024)
print("来自", address, "的文件:", name.decode())
data = conn.recv(1024)
f = open("receive.txt", "w")
data1 = base64.b32decode(data)
f.write(data1.decode())
f.close()
print("来自", address, "加密的信息:", data.decode(), "解密后已保存为receive.txt")
conn.sendall("服务器已经收到了数据内容,准备传输文件,请注意接收!".encode())
data1 = conn.recv(1024)
conn.sendall("answer.txt".encode())
f = open("receive.txt", "r")
data1 = f.read()
conn.sendall(data1.encode())
f.close()
data1 = conn.recv(1024)
print("收到来自", address, "的信息", data1.decode())
s.close()

2.2实验结果

客户端结果:

服务端结果:

上传码云:

 

 码云连接:https://gitee.com/zhang-zhonghuai/python_20193223

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

  • 问题1:[WinError 10061] 由于目标计算机积极拒绝,无法连接。
  • 解决措施:(1)控制面板 — 网络和Internet — 网络和共享中心 —  Internet选项 — 连接 — 局域网设置 — 自动检测设置  。

                            (2)关闭防火墙。

                            (3)服务端与客户端分开,先运行服务端,再运行客户端。

  • 问题2:[Errno 2] No such file or directory
  • 解决措施:(1)重命名原文件,更改原文件后缀名。或更改程序中读取文件名。

                             (2)采用绝对路径的方法来打开文件。

4.其他(感悟、思考等)

这次实验,由于课上听的一知半解,课下没有进行过多训练,所以进行的并不是非常顺利,好多知识点没有掌握,耗费了大量的时间在知识点的复习上。此外通过对socket模块的复习,我发现还有很多有意思的东西,还需要更深入的去学习,最后非常感谢王老师课上的讲解,也感谢帮助我解决问题的同学们。

参考资料

    

 

posted on 2021-05-30 23:14  Zzh拉钩  阅读(53)  评论(0编辑  收藏  举报