20213305 实验三《Python程序设计》实验报告
20213305《Python程序设计》实验三报告
课程:《Python程序设计》
班级: 2133
姓名: 张桉源
学号:20213305
实验教师:王志强
实验日期:2020年4月21日
必修/选修: 公选课
(一)实验内容
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
(二)实验要求
(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
(2)要求包含文件的基本操作,例如打开和读写操作。
(3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
(4)程序代码托管到码云。
(三)实验过程及实验结果
3.1客户端代码(老师提供):
3.2服务器端代码(老师提供):
3.3运行结果:
3.4加密后客户端代码:
# client.py
import socket
# HOST = 'localhost'
HOST = '192.168.10.191'
PORT = 5050
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
while True: #while里面只能有send和recieve
msg=input("请输入你想传达的信息,传入exit则退出\n")
if msg=="exit":
break
# client先发送消息再接收
s.sendall(msg.encode())
data = s.recv(1024)
print(f"他说 {data.decode()}")
3.5加密后服务端代码:
import socket
HOST = '' #主机
PORT = 5050 #端口
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
#bind(address), 传输层为AF_INET时address是(主机host,端口port)格式
s.listen(2)
conn, addr = s.accept()
#conn新的套接字对象,用于接收发送数据,
# addr客户端地址为元组(hostname, port)
with conn: #while里面只能有recieve和send
print('Connected by', addr)
while True: #server先接收再发送
data = conn.recv(1024)
print(f"{addr}说:{data.decode()}")
server_msg=input("请输入你想回复的内容,输入exit则退出:\n")
conn.sendall(server_msg.encode())
if server_msg=="exit":
break
3.6上传代码到gitee:
(四)实验中遇到的问题和解决过程
- 问题1:不会加密传输的信息。
- 问题1解决方案:查看老师发的资料并自己上知乎搜索相关内容,询问已经提交作业的同学。
- 问题2:运行终端时显示无法连接。
- 问题2解决方案:应该先运行服务端,再运行客户端。
import socket
HOST = '' #主机PORT = 5050 #端口with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:s.bind((HOST, PORT))#bind(address), 传输层为AF_INET时address是(主机host,端口port)格式s.listen(2)conn, addr = s.accept()#conn新的套接字对象,用于接收发送数据,# addr客户端地址为元组(hostname, port)
with conn: #while里面只能有recieve和sendprint('Connected by', addr)while True: #server先接收再发送data = conn.recv(1024)print(f"{addr}说:{data.decode()}")server_msg=input("请输入你想回复的内容,输入exit则退出:\n")conn.sendall(server_msg.encode())if server_msg=="exit":break