---恢复内容开始---

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的更多相关文章

  1. 小课堂Week8 例外处理设计的逆袭Part1

    小课堂Week8 例外处理设计的逆袭Part1 今天和大家讲一本书,书名是<例外处理设计的逆袭>. 为什么想讲这本书,是因为,例外处理在程序代码中到处存在,但是这些到底该如何写好,总觉得有 ...

  2. 20165214 2018-2019-2 《网络对抗技术》Exp5 MSF基础应用 Week8

    <网络对抗技术>Exp5 MSF基础应用 Week8 一.实验目标与内容 1.实践内容(3.5分) 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体我 ...

  3. 【week8 in ricoh】 Learning CNN

    week8:5.27 1.做CNN practical[1]里的example1,了解CNN模块中的每一个部分 (1)卷积层的卷积过程,输入输出维度变化(2)ReLU(3)Pooling层(4)Nor ...

  4. Python笔记总结week8

    面向对象第二节 要点: 1. 封装,对象中嵌套对象 2. pickle,load,切记,一定要先导入相关的类 回顾上一节: 面向对象三大特性: 封装.继承.多态(多种类型.多种形态) 关于多态,任意参 ...

  5. 团队作业week8

    每个团队编写一个团队项目的功能规格说明书.

  6. Week8 软件规格说明书

    1.概述 本项目组所开发的软件为一个基于Android的手机端的时间管理软件,主要功能为时间管理软件,可以用于管理待办事项,记录一些需要提醒的信息等.有事件提醒.与Google账户同步.课程表等功能. ...

  7. 《Linux内核分析》 week8作业-Linux加载和启动一个可执行程序

    一.ELF文件格式 ELF(Executable and Linking Format)是x86 Linux系统下常用的目标文件格式,有三种主要类型: 适于连接的可重定位文件,可与其他目标文件一起创建 ...

  8. Week8(10月28日)

    Part I:提问  =========================== 1. Lazy.Eager.Explicit Loading的关键字是什么? 2. 请比较三种加载方式的性能. Part ...

  9. Week8(10月31日):并发

    Part I:提问  =========================== 1. 更新关联.删除关联数据,需要注意哪些问题?以Instructor类为例说明. 2. 已知某请假系统,请实现以下界面的 ...

随机推荐

  1. ajax的三次封装简单概况

    原生ajax:                readyState         准备状态                status             页面状态               ...

  2. class的真相

    Java中Class类及用法 Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识,即所谓的RTTI.这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方 ...

  3. HttpRequest,HttpResponse,乱码,转发和重定向

    HttpServletRequest简介 Web服务器收到客户端的http请求,会针对每一次请求,创建一个用于代表请求的HttpServletRequest类型的request对象,并将"H ...

  4. NOIP 2017 逛公园 - 动态规划 - 最短路

    题目传送门 传送门 题目大意 给定一个$n$个点$m$条边的带权有向图,问从$1$到$n$的距离不超过最短路长度$K$的路径数. 跑一遍最短路. 一个点拆$K + 1$个点,变成一个DAG上路径计数问 ...

  5. SpringBoot服务器部署

    注释本地tomcat jar包 jdk版本必须1.8以上 tomcat版本必须8以上 配置tomcat server.xml文件 Swagger 配置

  6. 王之泰201771010131《面向对象程序设计(java)》第十五周学习总结

    第一部分:理论知识学习部分 第13 章 部署应用程序 1.jar文件 a) java 程序的打包:编译完成后,员 将.class 文件压缩打包为 .jar 文件后, GUI 界面 程序就可以直接双击图 ...

  7. C# Winform 中DataGridView 实现单元格输入下拉框功能

    https://blog.csdn.net/ad13adsa/article/details/82108969 private void dataGridViewX1_EditingControlSh ...

  8. Java解析XML文件的常用方法介绍

    XML是一个可扩展标记语言.很多时候我们需要进行数据交换,同时也存在跨平台使用,XML文件对这些需求提供了很好的帮助! 对于Java来说,XML常见的用途就是保存数据和配置,这就涉及了对XML文件的增 ...

  9. python数据库多字段插入

    # -*- co;ding: utf-8 -*-#企业详细信息写入数据库+征信得分import pymysqlfrom impala.dbapi import connect conn = pymys ...

  10. 【python 3】 字典方法操作汇总

    基础数据类型:tuple 1.1  新增 dic["key"] = value                            字典中没有key就添加,有key就覆盖 dic ...