#动态导入   官方建议
import importlib
import_str="lib.aa"
lib=importlib.import_module(import_str)
obj=lib.A("dfasfdasfasfsdfsadfasf")
print(obj) # #动态导入 另一种形式
# import_str = "lib.aa"
# mod= __import__("lib.aa")
# a=mod.aa.A("adasfaf")
# print(a) 断言:
assert type(obj.name) is str 复习Socket:
server=socket.socket(AF>INET,sock.SOCK_STREAM)
server.bind(localhost,9999)
server.listen() conn,addr = server.accept() while True:
  print("new conn",addr)
  data = conn.recv(102400)
  print(data.upper()) 编写一个ssh实例:详见20180807 socket的粘包:即如果socket连续执行两次以上send()可能会合并成一次缓冲发送,接收到的数据会将两个包的内容黏在一起
解决办法:在每两次发送之间,做一次数据接收处理。 Ftp server:
1    读取文件名
2检测文件是否存在
3    打开文件
4    检测文件大小
5    发送文件大小
6    等客户端确认
7    边读边发
8    md5发送及确认 实例实现源码:
socket_ftp_server:
# Author:huhu
import socket,os,time,hashlib
server=socket.socket()
server.bind(("localhost",6970))
server.listen()
while True:
print("开始监听...")
conn,addr = server.accept()
print("建立新连接",addr)
data =conn.recv(1024)
print("ask file name is %s"%data.decode())
if not data:
print("客户端已断开")
break
cmd,filename = data.decode().split()
print(filename)
if os.path.isfile(filename):
f=open(filename,"rb")
m=hashlib.md5()
file_size=os.stat(filename).st_size
conn.send(str(file_size).encode())
conn.recv(1024)
for line in f:
m.update(line)
conn.send(line)
print("md5",m.hexdigest())
f.close()
print("send done")
server_confirm=conn.recv(1024)#等待客户端确认接收完成
conn.send(m.hexdigest().encode())
server.close() socket_ftp_client:
# Author:huhu
import socket,hashlib
client=socket.socket()
client.connect(("localhost",6970))
while True:
cmd = input(">>:".strip())
if len(cmd) == 0:
continue
if cmd.startswith("get"):
client.send(cmd.encode())
server_response = client.recv(1024)
print("server response:",server_response)
client.send(b"ready to recv file")
file_total_size = int(server_response.decode())
received_size=0
filename = cmd.split()[1]
f = open(filename+".new","wb")
m=hashlib.md5()
while received_size<file_total_size:
if file_total_size-received_size >= 1024:
size=1024
else:
size = file_total_size-received_size
print("last receive size:",size) data = client.recv(size)
m.update(data)
received_size +=len(data)
f.write(data)
print("receiving %s %%"%round(received_size/file_total_size*100,2))
else:
print("receiving 100 % done")
print(file_total_size, received_size)
f.close()
new_file_md5=m.hexdigest()
#接收完成后向服务器端确认数据收完
client.send(b"all data been received")
print(new_file_md5)
server_file_md5=client.recv(1024).decode() print("server file md5:",server_file_md5) print("client rev file md5:",new_file_md5) SocketServer:最主要的作用:用来支持多并发
定义:用于将网络服务器的编程更容易更简化
类型:TCPServer、UDPServer、UnixStreamServer、UnixDatagramServer

  创建一个SocketServer的过程:

  1  自己创建一个请求处理类,并且这个类要继承BaseRequestHandler,并且还要重写handle()方法

  2  你必须实例化TCPServer,并且传递server ip 和你上面创建的请求处理类给这个TCPServer

  3  server.serve_forever()来处理多个请求,永远执行

      server.handle_request()只能处理一个请求

  SocketServer:

  

# Author:huhu
import socketserver
class MyTCPHandler(socketserver.BaseRequestHandler):
'''
自定义Socketserver类的请求类
'''
def handle(self):
print("{} connected:".format(self.client_address))
while True:
try:
self.data=self.request.recv(1024).strip()
print("{}:{} wrote:".format(self.client_address[0],self.client_address[1]))
print(self.data)
self.request.send(self.data.upper())
except ConnectionResetError as e:
print("err:",e)
break
if __name__=="__main__":
HOST,PORT="localhost",9999
# server=socketserver.TCPServer((HOST,PORT),MyTCPHandler)
server = socketserver.ThreadingTCPServer((HOST, PORT), MyTCPHandler)
server.serve_forever() 本节作业:开发一个多用户使用的FTP系统
作业要求:
1    用户加密认证
2允许同事多用户登录
3    每个用户有自己的家目录,且只能访问自己的家目录
4    对用户进行磁盘配额,每个用户的可用空间不同
5    允许用户在ftp server上随意切换目录
6    允许用户查看当前目录下文件
7    允许上传和下载文件,保证文件一致性
8    文件传输过程中显示进度条
9    附加功能 :支持文件的断点续传 初步老师带着做了一部分(180808下),剩下的自己研究去一点点的实现吧~~~


Python3.5 学习八的更多相关文章

  1. Python3.5 学习八 附加知识点 paramiko和rsa非对称秘钥的适用

    关于paramiko: SSH SFTP 机器上没有安装该模块,只是初步了解了下,没有细细研究. 可能以后只有做运维的才能用到的吧 利用秘钥,在ssh中不输入用户名密码进行登录 利用秘钥进行FTP操作 ...

  2. 从零开始学习PYTHON3讲义(八)列表类型跟冒泡排序

    <从零开始PYTHON3>第八讲 ​前面我们见过了不少的小程序,也见过了不少不同类型的变量使用的方法.但目前我们涉及到的,还都是单个的变量和单个的立即数.以变量来说,目前我们见到的,基本都 ...

  3. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...

  4. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般 ...

  5. python3.4学习笔记(四) 3.x和2.x的区别,持续更新

    python3.4学习笔记(四) 3.x和2.x的区别 在2.x中:print html,3.x中必须改成:print(html) import urllib2ImportError: No modu ...

  6. python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容

    python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容 Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖 ...

  7. python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容

    python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI,采用Python语言编写 ...

  8. python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例

    python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...

  9. Python Tutorial 学习(八)--Errors and Exceptions

    Python Tutorial 学习(八)--Errors and Exceptions恢复 Errors and Exceptions 错误与异常 此前,我们还没有开始着眼于错误信息.不过如果你是一 ...

随机推荐

  1. yii的layouts的使用

    yii的layouts的使用 我们在控制器中使用render()时,yii会默认的载入布局. 1.在protected/componets下的Controller.php中修改$layout变量, 来 ...

  2. 如何配置Notepad++的C_C++语言开发环境

    相信很多人用notepad++,但把其配置成为C/C++还是需要小折腾一下的.本人在网上找了很长时间,也没有一个统一的答案,而且很多人说的方法根本不管用,而且也不够通用,所以还是自己摸索了一下,分享给 ...

  3. python创建独立虚拟工作环境方法

    前言: python的组件非常之多,有时这个项目依赖m个组件,有时那个项目依赖n个组件,时间一长很容易导致系统python环境的臃肿不堪,由此便有了virtualenv.virtualenvwrapp ...

  4. UI设计不就是画线框,凭什么年薪30W?

    作为一枚界面设计师 我真的很想为UI设计抱不平啊!! UI设计真是一个备受不解的职业 常会被误解,然后出现以下场景 程序欧巴: 界面画好没?按钮圆的方的不都能用吗?纠结那多干嘛? 产品经理: 这次我们 ...

  5. hadoop 学习(四)之java操作hdfs

    1.导入hadoop jar包 将hadoop/share/common/目录.hadoop/share/common/lib/目录.hadoop/hdfs/目录.下的jar包加入eclipse. 2 ...

  6. linux(rhel) rescue修复详解

    修复linux,先准备好一张安装光盘,光驱安装好后开机,选择从光驱启动.等待安装盘显示操作界面时选择"rescue"选项,如果有光标提示的话,也可以输入:linux rescue进 ...

  7. 2018.10.12 NOIP模拟 字符处理(模拟)

    传送门 sb模拟,考试跟着sb了90分. 代码

  8. C程序之修改Windows的控制台大小

    //change the console size #include <stdio.h> #include<stdlib.h> //必须有 int main(int argc, ...

  9. POJ 1458 Common Subsequence (DP+LCS,最长公共子序列)

    题意:给定两个字符串,让你找出它们之间最长公共子序列(LCS)的长度. 析:很明显是个DP,就是LCS,一点都没变.设两个序列分别为,A1,A2,...和B1,B2..,d(i, j)表示两个字符串L ...

  10. Linux 部署 tomcat 常用命令

    1.  文件夹重命名 mv somedir somedir1 2. 授权所有子目录 chmod -R 777 somedir 3.授权单个目录 chmod 777 somedir 4.实时打印控制台日 ...