python自动化_day8_socket网络编程

基础数据类型,for循环,文件操作,函数,模块,面向对象等知识点归纳

1 # 基础数据类型
2 #       int float 加减乘除 乘方取余 小数的保留 round
3 #   都可以存放任意的数据类型,增删改查
4 #       str list tuple  序列 -----index
5 #           字符串 split strip  startswith join
6 #       dict set    散列 无序的 通过key获取值
1 #for循环 while循环 if条件语句
2     #for循环      你知道要循环多少次
3     #while循环    不知道循环多少次
4     #条件判断     无数个if语句只有一个分支会被执行
1 #文件操作
2     #打开模式
3         #a w r -----直接对字符串操作
4         #ab wb rb --直接对字节操作
5     #操作系统的编码和python编码不一致的问题
 1 #函数
 2     #函数的基础:
 3         # 定义:关键字
 4         #参数:位置参数  *args  默认参数(关键字参数) **kwargs 返回值
 5         #调用:关键字:函数名(),参数:按照位置传,按照关键字传,接收返回值
 6     #函数的命名空间:
 7         #函数的内部可以使用外部的变量:读,写,改,声明:global改全局,nonlocal改局部
 8         #在外部不能使用函数内部的变量
 9     #闭包-----装饰器:
10         #是在函数的前后添加功能
11         #用别人写好的装饰器
12     #生成器函数-----------迭代器----------生成器表达式---------列表推导式
13         #yield写代码的时候尽量用,很好的节省内存
14         #生成器表达式和列表推导式能够很好的简化代码
15         #生成器函数的特点:调用不执行----面试之前看就可以
16     #递归函数:
17         #大部分的递归函数都可以用循环实现
18         #递归相比于循环来说并不能节省内存,占用更多的空间
 1 #模块
 2     #内置模块
 3         #collections namedtuple  有序字典  默认字典
 4         #os  文件和文件夹的操作 和路径相关的  执行操作系统命令的
 5         #sys
 6         #random  随机整数  随机小数 随机抽取 打乱顺序
 7         #time  三种时间格式:字符串(格式化时间)  元组(结构化时间)   float(时间戳)
 8         #re   正则:写爬虫需要自己弄  findall search  match
 9         #序列化: 数据的序列化  (pickle json):dump load dumps loads  shelve
10         #hashlib  摘要算法的模块 文件的一致性校验  加密认证  MD5算法和sha算法
11         #logging  日志模块
12         #configpaser  -------什么忘了。。。。。。
13     #扩展模块 :没有讲呢
14     #自定义模块:
15         #模块和包
 1 #面向对象:
 2     #基础的定义
 3         #类 对象 实例化
 4         #class的定义  语法
 5         #三大特性:继承**** 封装***带双划线的都是私有的不能外部使用 多态
 6             #继承的规则 子类可以使用父类中的所有非私有的名字,前提是子类没有
 7                 #多继承的查找顺序问题:经典类 :深度优先  新式类里 : 广度优先
 8                 #super不是单纯的寻找父类,而是遵循mro(广度优先算法)顺序
 9             #封装
10                 #私有的属性既不能被继承,也不能从类的外部调用
11             #多态:python自带多态
12         #组合:一个类的对象作为另外一个类对象的属性
13         #反射:hasattr  getattr  用字符串的形式来获取变量
14         #内置方法:__new__ python中类的构造方法,创造了对象在init之前执行,单例模式。

异常处理:语法错误和逻辑错误

常用异常包括:

 1 # AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
 2 # IOError 输入/输出异常;基本上是无法打开文件
 3 # ImportError 无法引入模块或包;基本上是路径问题或名称错误
 4 # IndentationError 语法错误(的子类) ;代码没有正确对齐
 5 # IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
 6 # KeyError 试图访问字典里不存在的键
 7 # KeyboardInterrupt Ctrl+C被按下
 8 # NameError 使用一个还未被赋予对象的变量
 9 # SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
10 # TypeError 传入对象类型与要求的不符合
11 # UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
12 # 导致你以为正在访问它
13 # ValueError 传入一个调用者不期望的值,即使值的类型是正确的
# try:
#     print('123')
#     int('a')
#     print('222')
# except ValueError as e: #使用as之后可以把错误显示出来
#     print(e,'报错了')
# except IndexError:
#     print('报错了')
# except Exception as e:
#     print(e,'很多错了')
# except :print('错')
#try
#except
#except as
#except Exception as e:  ---推荐使用
#找到一个满足条件的其他分支都不走了
#程序中会有很多预料不到的错误 使用万能异常
#万能异常太万能不好提示,针对性错误提示可以更人性化
#所有错误提示完之后再添加一个万能异常,针对性错误走完之后再走。
#具体的异常处理+万能异常
    #能够使用提前预料到的异常都应该用具体的异常去处理,剩下其他的异常用万能异常控制
    #万能异常应该在最后
1 try:pass
2 except ValueError:print('')
3 except Exception as e:print(e)#处理所有的异常
4 else:pass #try中的代码没有错误执行这个else
5 finally:pass #无论如何都会执行
6 # assert 1 == 2 #断言 满足条件就执行

模块介绍:

 1 #导入一个模块,就相当于执行了这个文件
 2 #一个模块如果执行多次import 相当于执行一次
 3 #import 和from import 的区别
 4 #模块之间不能发生循环引用
 5 
 6 #import 一个模块,那么在当前的全局命名空间中,就有了一个名字
 7 #这个名字会指向属于自己的空间,空间里存储了所有文件中的名字
 8 # from my_module import func
 9 # import my_module
10 #from import
11 #仍会执行整个文件
12 #文件中的名字会被存储在一块独立的内存空间中
13 #import后面的名字会出现在全局
14 #相当于对独立命名空间中的一个引用
15 #from import也支持as语句 也支持 导入多个名字
16 #from import * 相当于导入所有名字
17 
18 
19 #__all__=['money']  和 from import * 互相影响
20 #导入模块的顺序 :内置 扩展 自定义

socket

import socket
########################tcp-server#####################
# sk = socket.socket()
# sk.bind(('127.0.0.1',9000))
# sk.listen()
# while True:
#     conn,addr = sk.accept()  ###等待来电 三次握手完毕
#     while True:
#         inp = input('')
#         conn.send(inp.encode('utf-8'))  ##发送数据
#         if inp == 'q':break
#         ret = conn.recv(1024).decode('utf-8') ###接收数据
#         print(ret)
#         if ret == 'q':break
#     conn.close()
# sk.close()

##########################tcp-client##############################
# sk = socket.socket()
# sk.connect(('127.0.0.1',9000))
# while True:
#     ret = sk.recv(1024).decode('utf-8')
#     print(ret)
#     if ret == 'q':break
#     inp = input('')
#     sk.send(inp.encode('utf-8'))
#     if inp == 'q': break
# sk.close()
 1 #########################udp-server######################
 2 # sk = socket.socket(type=socket.SOCK_DGRAM)
 3 # sk.bind(('127.0.0.1',8999))
 4 # while True:
 5 #     msg,addr = sk.recvfrom(1024)
 6 #     print(msg.decode('utf-8'),addr)
 7 #     inp = input('>>>')
 8 #     sk.sendto(inp.encode('utf-8'),addr)
 9 # sk.close()
10 
11 #########################udp-client###############################
12 # sk = socket.socket(type=socket.SOCK_DGRAM)
13 # while True:
14 #     inp = input('>>>')
15 #     sk.sendto(inp.encode('utf-8'),('127.0.0.1',8999))
16 #     msg,addr = sk.recvfrom(1024)
17 #     print(msg.decode('utf-8'))
18 # sk.close()
 1 ################################粘包-server######################################
 2 # from socket import *
 3 # sk=socket()
 4 # sk.bind(('127.0.0.1',8080))
 5 # sk.listen(5)
 6 # conn,addr=sk.accept()
 7 # data1=conn.recv(10)
 8 # data2=conn.recv(3)
 9 # print('----->',data1.decode('utf-8'))
10 # print('----->',data2.decode('utf-8'))
11 # conn.close()
12 # sk.close()
13 #粘包只会发生在tcp协议中
14 #在连续send中才会发生粘包现象
15 #tcp传输中有三种机制:
16     #回执 机制 保证数据能够被完整的发送
17     #数据包过大 自动拆分的机制
18     #数据包过小 自动合并的机制
19 
20 
21 #########################粘包-client###############################
22 # BUFSIZE=1024
23 # ip_port=('127.0.0.1',8080)
24 # s=socket.socket()
25 # res=s.connect_ex(ip_port)
26 # s.send('hello'.encode('utf-8'))
27 # s.send('egg'.encode('utf-8'))
28 # s.close()
 1 ###############################解决粘包问题-server###############################
 2 # sk = socket.socket()
 3 # sk.bind(('172.0.0.1',8080))
 4 # sk.listen()
 5 #
 6 # coon,addr = sk.accept()
 7 # coon.send(b'11')
 8 # coon.send(b'hello world')
 9 # coon.send(b'alex')
10 # coon.close()
11 # sk.close()
12 #############################struck模块###################################
13 # import struct
14 #
15 # sk = socket.socket()
16 # sk.bind(('172.0.0.1',8080))
17 # sk.listen()
18 #
19 # coon,addr = sk.accept()
20 # inp = input('>>>').encode('utf-8')
21 # ret = struct.pack('i',len(inp))
22 # coon.send(ret)
23 # coon.send(inp)
24 # coon.close()
25 # sk.close()
26 
27 
28 ############################ 解决粘包问题##################
29 import struct
30 sk = socket.socket()
31 sk.connect(('127.0.0.1',8080))
32 
33 num = sk.recv(4).decode('utf-8')
34 num = struct.unpack('i',num)[0]
35 print(sk.recv(num))
36 sk.close()
posted @ 2018-06-08 16:50  张腾飞♂  阅读(277)  评论(0编辑  收藏  举报