python教学上机实验报告_20192217 实验三《Python程序设计》实验报告

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

课程:《Python程序设计》

班级: 1922

姓名: 程子轩

学号:20192217

实验教师:王志强

实验日期:2020年5月16日

必修/选修: 公选课

1.实验内容

创建服务端和客户端,服务端在特定端口监听多个客户请求。

客户端和服务端通过Socket套接字(TCP/UDP)进行通信。

2. 实验过程及结果

1.导入需要的模块

import os from socket import * import base64

2.创建客户端与服务端,并选择好端口、缓冲区大小

服务器端

HOST = '127.0.0.1' #对bind()方法的标识,表示可以使用任何可用的地址 PORT = 8001 #设置端口 BUFSIZ = 1024 #设置缓存区的大小 ADDR = (HOST, PORT)

客户端

HOST = '127.0.0.1' PORT = 8001 BUFSIZ = 1024 ADDR = (HOST, PORT)

3.定义套接字,绑定地址

服务器端

tcpSerSock = socket(AF_INET, SOCK_STREAM) #定义了一个套接字 tcpSerSock.bind(ADDR) #绑定地址 tcpSerSock.listen(5) #规定传入连接请求的最大数,异步的时候适用

客户端

tcpCliSock = socket(AF_INET, SOCK_STREAM) tcpCliSock.connect(ADDR)

4.下面进入客户端与服务器端具体代码编写,放图,并着图讲解

客户端

1939331-20200517155421337-1642580674.png

服务器端

1939331-20200517155455848-214104016.png

1939331-20200517155515302-1595863354.png

首先,我们要传输的文件可能不止一个,故设置while循环,直至输入的文件名为空才跳出循环,

接着我们连接服务端与客户端,为判断是否连接成功,设置一个print来输出状态,

做完这些工作后我们就可以开始收发数据了!

先传输传送的文件的相关信息,如文件名、文件大小等,可按需求进行传输。此时,我设置了一个if语句

,如果用户输入了错误数据或者对应的文件里面是空的,就会跳出此次循环,提醒用户在输出一个正确的由内容的文件名。

这些预备动作完成后,我们正式传输文件里的数据:

打开对应文件,提取文件里的内容,然后

进行加密:

把加密后的内容发送到客户端进行解密,并保存到一个新的文件中。

这样就完成啦!

**小提示:1.记得加密也要对应解密,不要忘了。

2.我用的这种原始的文件操作方法在write后,一定要先close(),再open()、read(),否则无法read到文件内容。

3.最后不要忘记close(),不然占用着内存还是有一定风险。

4.最好在过程中多做一些print()便于发现代码中的bug。

结果展示:

1939331-20200517163641878-2121600962.jpg

1939331-20200517163658345-689813723.jpg

1939331-20200517163714488-631818678.jpg

1939331-20200517163745463-1914077352.png

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

问题1:编码与解码问题

问题1解决方案:记住xxx.xxx.xxx是有先后顺序的,不能有如:f.decode().read() 这样的操作,一定是f.read().decode()

问题2:客户端能接受到服务端发送的文件信息,但收不到文件的密文(这问题整死我了)。

问题2解决方案:因为代码运行时没有报错,没有错误信息所以处理起来更加棘手。

1939331-20200517162926528-251628791.png

1939331-20200517162946839-1125440789.png

1939331-20200517163020999-610799147.png

通过debug定位到问题出在了服务器的第33行代码上,但无从下手修改,在网上找了好多东西也解决不了。后来通过询问老师与同学,按照老师

的办法将关键代码拉出来debug修改,经过一天的努力终于发现了错误所在,即小tips里提到的“在write后,一定要先close(),再open()、read(),否则无法read到文件内容。”,最终解决了问题。

其他(感悟、思考等)

编程序一定要有耐心,对于一个问题一段时间解决不了不能轻易放弃,可以暂时性略过但是不能就此不管,不然学习漏洞百出,最后难以完成相应的任务

而且需要发散思维,从不同角度看问题,同时也要多咨询老师与同学,他们也许有更多的经验以及解决方案。

还有,多看网上大神的代码,很有帮助。

参考资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值