回顾:
抽象方法
@staticmethod 不能访问类的任何属性
@classmethod 类方法 只能访问公有属性
@property 属性方法 , 把一个方法变成一个静态属性
def sayhi()
pass @sayhi.setter
def sayhi(k): @sayhi.delter
def sayhi(): __call__() : 实例 + ()会触发call method __dict__ 打印实例中所有属性 __getitem__ 以字典的形式操作实例 __new__ 先于 __init__执行, 可以在new中自定义类的实例化过程 __str__ 返回实例的字符串形式 __metaclass__ 元类, type() 可以动态创建一个类 try ... except
IOError
ValueError
IndexError
IndentationError
TypeError
try except (IndexError,IndentationError) as e:
print(e) else: raise assert __import__('day9.testmod') hasattr
getattr
setattr
delattr
**********************************
socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(address)
s.listen(5)
conn,clientaddr = s.accept
conn.send 推荐书籍:
林达美国
百年孤独
追风筝的人
三杯茶
白鹿原
平凡的世界
三体
浪潮之巅
数学之美
推荐电影:
华尔街之狼
上帝之城
焦土之城
绝美之城 阿甘正传
辛德勒的名单
肖申克的救赎
勇敢的心
角斗士
飘 乱世佳人 after all , tomorrow is another day
血钻
卢旺达饭店
战争之王
教父
楚门的世界
革命之路
帝国的覆灭
当幸福来敲门
千与千寻
哈尔的移动城堡
龙猫
百元之恋 ***********************************************************8
sock_server.py
 import socket
import json
s = socket.socket()
s.bind(('localhost',9000))
s.listen(5)
print('start listen.......')
while True:
conn,client_addr = s.accept()
print('got a new conn:',client_addr) while True:
data = conn.recv(1024)
print('recv data',data)
data = json.loads(data.decode()) if data.get('action') is not None:
if data['action'] == 'put':
#client sends file to server
file_obj = open(data['filename'],'wb')
received_size = 0 while received_size < data['size']:
recv_data = conn.recv(1024)
file_obj.write(recv_data)
received_size += len(recv_data)
print(data['size'],received_size)
else:
print('successfully receviced file [%s]---'%data['filename'])
file_obj.close()
elif data['action'] == 'get':
# client downlands file from server
pass

sock_client.py

 import socket
import os
import json
client = socket.socket()
client.connect(('localhost',9000)) while True:
choice = input('>>').strip()
if len(choice) == 0:continue
cmd_list = choice.split()
if cmd_list[0] == 'put':
if len(cmd_list) == 1:
print('no filename follows after put cmd.')
continue
filename = cmd_list[1]
if os.path.isfile(filename):
file_obj = open(filename,'rb')
base_filename = filename.split('/')[-1]
print(file_obj.name,os.path.getsize(filename))
data_header = {
'action':'put',
'filename':base_filename,
'size':os.path.getsize(filename)
}
client.send( json.dumps(data_header).encode())
for line in file_obj:
client.send(line)
print('----send file down-------') else:
print('file is not vaild.')
continue
elif cmd_list[0] == 'get':
pass
socket_server.py
 import socketserver

 class MyTCPHandler(socketserver.BaseRequestHandler):
def handle(self):
while True:
self.data = self.request.recv(1024).strip()
print(self.client_address[0])
print(self.data)
self.request.send(self.data.upper()) if __name__ == '__main__':
host,port = 'localhost',9000 server = socketserver.TCPServer((host,port),MyTCPHandler) server.serve_forever()
												

Python之路,day9-Python基础的更多相关文章

  1. Python之路,Day4 - Python基础4 (new版)

    Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...

  2. Python之路,Day1 - Python基础1

    本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...

  3. Python之路,Day9 - 异步IO\数据库\队列\缓存

    https://www.cnblogs.com/alex3714/articles/5248247.html http://www.cnblogs.com/wupeiqi/articles/51327 ...

  4. Python之路,Day1 - Python基础1(转载Alex)

    本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...

  5. Python之路,Day1 - Python基础1 --转自金角大王

    本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...

  6. Python之路,Day1 - Python基础1 介绍、基本语法、流程控制

    本节内容 1.python介绍 2.发展史 3.python 2.x or python 3.x ? 4.python 安装 5.第一个程序 Hello World 程序 6.变量 7.用户输入 8. ...

  7. Python之路,Day9, 进程、线程、协程篇

    本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...

  8. Python之路:Python简介

    Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间他为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承 ...

  9. Python之路:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  10. Python之路-初识python及环境搭建与测试(Python安装、Anaconda安装、PyCharm安装)

    一.认识Python 起源 Python的作者是著名的“龟叔”Guido van Rossum,他希望有一种语言,这种语言能够像C语言那样,能够全面调用计算机的功能接口,又可以像shell那样,可以轻 ...

随机推荐

  1. php项目中使用memcache

    memcache为分布式内存缓存系统,通过在内存中存取数据和对象减少对数据库的访问从而减轻数据库的负载,memcache分为客户端和服务端,服务端为C实现,有现成的服务端应用程序,无需开发,只需要配置 ...

  2. 浅谈大数据神器Spark中的RDD

    1.究竟什么是RDD呢? 有人可能会回答是:Resilient Distributed Dataset.没错,的确是如此.但是我们问这个实际上是想知道RDD到底是个什么东西?以及它到底能干嘛?好的,有 ...

  3. Java 查漏补缺

    摘自<老马说编程> 计算机程序的思维逻辑 (4) - 整数的二进制表示与位运算 Java中不支持直接写二进制常量,比如,想写二进制形式的11001,Java中不能直接写,可以在前面补0,补 ...

  4. [GodLove]Wine93 Tarining Round #9

    比赛链接: http://vjudge.net/contest/view.action?cid=48069#overview 题目来源: lrj训练指南---二维几何计算   ID Title Pro ...

  5. HTML5新增标签及具体用法

    html5自从推广普及以来,迅速被各大浏览器支持.采用html5设计的网页逐渐成为网页设计的时尚.下面就温习下html5的新增标签. HTML 5 中的新特性包括了嵌入音频.视频和图形的功能,客户端数 ...

  6. logstash 添加nginx日志

    选择需求分类废话少说直接上图 第一张图: 2.此图搭配的日志格式是: log_format main '$remote_addr - $remote_user [$time_local] $http_ ...

  7. Android 学习第17课,使用文件的数据存储(4种存储模式)

    Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中.可以使用Context ...

  8. java高级规范之一

    一.不允许使用汉语拼音命名 不规范示例: public void zengjiaYongHu{}//拼音方法名称 规范示例: public void addUser(){} 解析:应该使用国际化语音, ...

  9. C++ list size()所想到的事情

      effective STL 某个Item里重点提出了 list.size()是一个O(n)的效率  当时只是记下来了  后面看了csdn有人在实际工程上遇到坑了  我近来闲来无事 把STL的lis ...

  10. linux sed的使用

    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理, 可以将数据行进行替换.删除.新增.选取等特定工作. sed本质上是一个编辑器,但是它是非交互式的,这点与VIM不同:同时 ...