week8
---恢复内容开始---
week8
1、动态导入模块
2、断言
3、ftp
4、socketserver
1、动态导入模块
import importlib
a = importlib.import_module('aa.aa') # aa目录下的aa模块
print(aa.import_C().name)
2、断言
跟if有点类似,判断是否符合条件,是则继续,否则报错。
a = 'name'
assert type(a) is str
3、FTP(文件传输:单下载)
客户端
1、读取文件名
2、检测文件是否存在
3、打开文件
4、检测文件大小
5、发送文件大小给客户端
6、客户端确认
7、开始边读边发数据
8、md5 import socket,os,hashlib
server = socket.socket()
server.bind(('localhost',9999))
server.lisen()
m = hashlib.md5()
while True:
try:
conn,addr = server.accept()
data = conn.recv(1024)
cmd,filename =data.split()
if os.path.isfile(filename):
f = open(filename,'rb')
filesize = f.stat(filename).st_size
conn.send(str(filesize).encode())
conn.recv(1024)
for line in f:
m.update(line)
conn.send(line)
print(m.hexdigest())
conn.send(str(hexdigest).encode)
f.close
print(send done')
except ConnectionResetError as e:
print('连接错误',e)
server.close()
客户端
import socket,os,hashlib
client = socket.socket()
client.connect(('localhost',9999))
m = hashlib.md5
while True:
cmd = imput('>>>:').strip()
if len(cmd) == 0:continue
filesize = client.recv(1024)
client.send('请求发送’) #无实际意义的交互,防止粘包
filename = cmd.split[1]
f = open(filename+'.new','wb')
rec_filesize = 0
filesize = int(filesize.decode())
while filesize > rec_filesize:
if filesize - rec_filesize > 1024: # 做判断防止最后一次接收出现粘包
res_size = 1024
else:
res_size = filesize - rec_filesize
data = client.recv(res_size)
f.write(data)
rec_filesize += len(data)
m.update(data)
else:
new_file_md5 = m.hexdigest()
print('new file md5:',new_file_md5)
server_file_md5 = client.recv(1024)
print('server file md5',server_file_md5) #接收服务端读取的md5,与自己生成的md5进行比较
client.close
服务端
4、socketserver(面向对象的方法进行文件传输)
创建方式:
创建一个socketserver 至少分以下几步: First, you must create a request handler class by subclassing the BaseRequestHandlerclass and overriding its handle() method; this method will process incoming requests.
Second, you must instantiate one of the server classes, passing it the server’s address and the request handler class.
Then call the handle_request() orserve_forever() method of the server object to process one or many requests.
Finally, call server_close() to close the socket. self.setup 请求处理前进行的事项
self.handle 请求处理中的事项
self.finish 请求处理后的事项
import socketserver class MyTCPServer(socketserver.BaseRequestHandler):
def setup(self): #交互前的动作
pass
def handle(self): #与用户的所有交互都在这里进行
self.data = self.request.recv(1024)
print("{} wrote:".format(self.client_address[0]))
self.request.sendall(self.data.upper)
def finish(self): #与用户交互后的动作
pass if __name__ == '__main__'
HOST , PORT = 'localhost',9999
server = socketserver.ThreadingTCPServer((HOST,PORT),MyTCPServer)
#ThreadingTCPServer 多线程
#ForingTCPServer 多进程 在win不好使
server.server_forever()
客户端
week8的更多相关文章
- 小课堂Week8 例外处理设计的逆袭Part1
小课堂Week8 例外处理设计的逆袭Part1 今天和大家讲一本书,书名是<例外处理设计的逆袭>. 为什么想讲这本书,是因为,例外处理在程序代码中到处存在,但是这些到底该如何写好,总觉得有 ...
- 20165214 2018-2019-2 《网络对抗技术》Exp5 MSF基础应用 Week8
<网络对抗技术>Exp5 MSF基础应用 Week8 一.实验目标与内容 1.实践内容(3.5分) 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体我 ...
- 【week8 in ricoh】 Learning CNN
week8:5.27 1.做CNN practical[1]里的example1,了解CNN模块中的每一个部分 (1)卷积层的卷积过程,输入输出维度变化(2)ReLU(3)Pooling层(4)Nor ...
- Python笔记总结week8
面向对象第二节 要点: 1. 封装,对象中嵌套对象 2. pickle,load,切记,一定要先导入相关的类 回顾上一节: 面向对象三大特性: 封装.继承.多态(多种类型.多种形态) 关于多态,任意参 ...
- 团队作业week8
每个团队编写一个团队项目的功能规格说明书.
- Week8 软件规格说明书
1.概述 本项目组所开发的软件为一个基于Android的手机端的时间管理软件,主要功能为时间管理软件,可以用于管理待办事项,记录一些需要提醒的信息等.有事件提醒.与Google账户同步.课程表等功能. ...
- 《Linux内核分析》 week8作业-Linux加载和启动一个可执行程序
一.ELF文件格式 ELF(Executable and Linking Format)是x86 Linux系统下常用的目标文件格式,有三种主要类型: 适于连接的可重定位文件,可与其他目标文件一起创建 ...
- Week8(10月28日)
Part I:提问 =========================== 1. Lazy.Eager.Explicit Loading的关键字是什么? 2. 请比较三种加载方式的性能. Part ...
- Week8(10月31日):并发
Part I:提问 =========================== 1. 更新关联.删除关联数据,需要注意哪些问题?以Instructor类为例说明. 2. 已知某请假系统,请实现以下界面的 ...
随机推荐
- js 实现json数组集合去重,差集,并集,交集。
let list = [ { id: "1", content: "A" }, { id: "2", content: "B&qu ...
- python操作MongoDB、MySQL、Postgres、Sqlite、redis实例
总结:除了MongoDB.redis,其他三个数据库用python来操作其实是差不多的.所有例子都很简单,实际生产环境中的数据库操作远比这复杂得多,命令也比我例子中的多得多,我这里高级一点的用法就是批 ...
- 翻译 | Placing Search in Context The Concept Revisited
翻译 | Placing Search in Context The Concept Revisited 原文 摘要 [1] Keyword-based search engines are in w ...
- 注解配置spring
1.为什么使用注解配置Spring基于注解配置的方式也已经逐渐代替xml.这个是不可逆的潮流,所以我们必须要掌握使用注解的方式配置Spring 总结:(1)使用注解配置Spring,注解的作用就是用于 ...
- elasticsearch 常用命令
#查看集群状态 curl -XGET "http://localhost:9200/_cluster/health?pretty" #查看所有的快照 curl -XGET &quo ...
- 阿里云ECS相关
RAM授权: https://help.aliyun.com/document_detail/28639.html 安全组: https://jingyan.baidu.com/article/afd ...
- 微信支付之App支付
项目接入微信支付的准备工作: 注册成为开发者,进行资质认证,这里是需要300元的审核费用的: 在微信商户平台创建应用,提交等待审核(大致需要5-7个工作日): 应用审核通过之后,进入应用,开通微信支付 ...
- react的this.setState没有触发render
一.浅比较 出现情况: 明明改变了值, 并且回调函数也触发了, 但是就是不触发render import React, { PureComponent } from 'react' import { ...
- python小游戏
import time,random # 需要的数据和变量放在开头player_list = ['[狂血战士]','[森林箭手]','[光明骑士]','[独行剑客]','[格斗大师]','[枪弹专家] ...
- Apache和Nginx的区别
Nginx 轻量级,采用 C 进行编写,同样的 web 服务,会占用更少的内存及资源 抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的,负载能力比 apa ...