python乒乓球程序实验报告 | 您所在的位置:网站首页 › 乒乓球游戏小程序 › python乒乓球程序实验报告 |
20192416 《Python程序设计》实验三报告 课程:《Python程序设计》 班级:1924 姓名:不愿透露姓名的はんたくさん 学号:20192416 实验教师:王志强老师 实验日期:2020年5月16日 必修/选修: 公选课 1.实验内容 创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。 2. 实验过程及结果 功能 实现了两个终端间的实时通信 服务器端创建打开txt文件,读取、编码后发送;客户端接受编码后的内容解码,创建打开txt文件后将其写入。 server端代码 import socket import os os.mkdir(r"C:\\Users\\12786\\Desktop\\发送方")#创建目录 os.chdir("C:\\Users\\12786\\Desktop\\发送方") #移动到这个目录 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind(('127.0.0.1',8001)) s.listen() conn,address = s.accept() print("通信演示程序,输入0结束") client = conn.recv(1024) #先接收客户端的信息 server = 1 while str(server) != "0" and client.decode()!="0": #server是服务器输入内容 print("客户端:",client.decode()) server = str(input("输入:")) if server == "0": break conn.sendall(("服务器:"+str(server)).encode()) client = conn.recv(1024) conn.sendall(("对话结束").encode()) print("对话结束") print("下面进行文件的加密传输") file = open("发送方文件.txt","w") #创造打开文件 file.write("你好\n") #写入信息 file.close() file = open("发送方文件.txt","r") clientf = file.read() file.close() #关闭文件 print("文件内容预览:"+ clientf) print("文件内容加密后预览:"+str((clientf).encode('utf-8'))) conn.send(clientf.encode('utf-8')) #发送加密信息 print("\n文件发送成功") s.close() client端代码 import socket import os os.mkdir(r"C:\\Users\\12786\\Desktop\\接受方")#创建目录 os.chdir("C:\\Users\\12786\\Desktop\\接受方") #移动到这个目录 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(('127.0.0.1',8001)) print("通信演示程序,输入0结束") server = "1" client = 1 client = input("输入:") s.sendall(client.encode()) server = s.recv(1024) while str(client)!="0" and server.decode()!="对话结束": print (server.decode()) #服务器:xxxxxx client = input("输入:") s.sendall(client.encode()) server = s.recv(1024) print(server.decode()) print("下面进行文件的加密传输") serverf = s.recv(1024) #接收文件内容 file = open("接受.txt","w") file.write("加密内容:"+str(serverf)) file.write("\n解密内容:"+serverf.decode("utf-8")) file.close() file = open("接受.txt","r") print(file.read()) file.close() s.close() 实验结果截图 3. 实验过程中遇到的问题和解决过程 问题1:实时通信的内容被弄错成后面的传输文件内容进行了传输 问题1解决方案:将两部分代码分开编写,先将通信的代码完成,彻底杜绝数据交叉的现象 问题2:编写 print("文件内容加密后预览:"+(clientf).encode('utf-8')) 这句时发生了错误TypeError: can only concatenate str (not "bytes") to str如图 问题2解决方案:网上查找错误的相关内容,发现是因为encode转码返回的是bytes类型的数据,不可以和str类型的数据直接相加。所以将其改成了 print("文件内容加密后预览:"+str((clientf).encode('utf-8'))) 问题3:不知道怎么传输文件 问题3解决方案:问了同学,发来一堆奇妙的代码。于是看群里的回放,得到了提示。先用read函数读取内容,再传输,而不是直接传文件。 感悟 本次实验不太顺利,花了比较长的时间。能力有限,被加密过程难住了,只用了utf-8编码代替加密过程非常可惜。问题1的出现再次提醒了我,实现复杂功能的代码时要分块处理,不然很容易出现问题。 |
CopyRight 2018-2019 实验室设备网 版权所有 |