python乒乓球程序实验报告 您所在的位置:网站首页 乒乓球游戏小程序 python乒乓球程序实验报告

python乒乓球程序实验报告

2023-08-18 15:30| 来源: 网络整理| 查看: 265

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 实验室设备网 版权所有