20183202 实验三《Python程序设计》实验报告
时间:2020-05-18
本文章向大家介绍20183202 实验三《Python程序设计》实验报告,主要包括20183202 实验三《Python程序设计》实验报告使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
20183202 2019-2020-2 《Python程序设计》实验三报告
课程:《Python程序设计》
班级: 1842
姓名: 李思远
学号:20183202
实验教师:王志强
实验日期:2020年5月16日
必修/选修: 公选课
1.实验内容
(一)实验内容
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
(二)实验要求
(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
(2)要求包含文件的基本操作,例如打开和读写操作。
(3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
(4)程序代码托管到码云。
2. 实验过程及结果
1.服务端的建立:
import socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('127.0.0.1',62470))
with open(r"C:\Users\86152\Desktop\20183202\20183202.txt",'rb') as f:
for i in f:
s.send(i)
data=s.recv(1024)
if data!= b'success':
break
s.send('quit'.encode())
file=s.recv(1024)
with open('file', 'r',encoding='UTF-8') as f:
print(f.readline())
f.close()
2.客户端的建立:
import socket
import struct
FILEINFO_SIZE=struct.calcsize('128s32sI8s')
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('127.0.0.1',62470))
s.listen(5)
conn,address=s.accept()
print("文件接收开始")
with open('file', 'ab' ) as f:
data = conn.recv(1024)
if data == b'quit':
breakpoint()
f.write(data)
conn.send('success'.encode())
print("文件接收完成")
with open('file', 'r',encoding='UTF-8') as f:
print(f.readline())
f.close()
with open("file",'rb') as f:
for i in f:
conn.send(i)
data=conn.recv(1024)
if data!= b'success':
break
conn.send('quit'.encode())
s.close()
3.实验运行结果:
3. 实验过程中遇到的问题和解决过程
- 问题1:在运行代码时频繁报错,从网上寻找解决方式无果。
- 问题1解决方案:经同学帮助后发现,在运行代码时要先运行服务端,再运行客户端。
- 问题2:对于socket代码掌握不熟,不能熟练运用。
- 问题2解决方案:首先回顾了云班课中老师提供的资料,对socket代码又重新进行了理解;之后在编写代码时通过查阅代码表的方式,减轻了工作量。
其他(感悟、思考等)
对于socket代码,在编写过程中感到很吃力,于是上网进行了资料查找,查到如下相关资料:
“网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。”
参考资料
原文地址:https://www.cnblogs.com/alanne0723/p/12910965.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Spring Boot 实现定时任务的动态增删启停等管理!
- Apache NIFI ExecuteScript组件脚本使用教程
- Redis必会的性能监控指标汇总
- 带你体验Apache NIFI新建数据同步流程(NIFI入门)
- Spring JPA 存储库接口定义
- 如何给Apache开源项目贡献代码
- 深入解析Apache NIFI的调度策略
- Linux 帮助命令及工具(tldr,man,help,info)
- Json Jolt教程
- Linux 日常操作
- 回顾|腾讯云 CFS 文件存储给 Serverless 云函数带来的业务新场景
- Apache NIFI Run Duration深入理解
- Controller services are daemons
- 动手体验JVM中Class对象的唯一性
- Java SPI机制