补充回顾
class Foo(object): def __call__(self, *args, **kwargs): print("AAAAA") # 执行call方法 Foo()()
call方法 __new__方法先执行
try:
.......
except ........ as e:
......
except ....... as e:
......
except Exception as e: # 防止有没有考虑到的异常
.......
else:
没有异常
finally:
都会执行
自定义异常
继承Exception类
通过raise 触发,不会自动触发
1 ### 断言 2 3 class Foo(object): 4 5 def __init__(self,name): 6 self.name = name 7 8 def fun(self): 9 print(self.name) 10 11 obj = Foo('ABCD') 12 assert type(obj.name) is str # 断言,后面的程序依赖前面的结果,后面的比较重要。可以进行断言。断言成功,继续运行。失败报断言错误 13 print("hello world") 14 15 # hello world
socket 所有网络协议本质就是数据的收发。。socket 对于各种网络协议进行封装
传输大量数据时,一次性可能传输不完。利用sendall 一直发送
地址簇
family address
AF.INET ipv4
AF.INET6 ipv6
AF.UNIX local
socket protocol type
sock.SOCK_STREAM tcp/ip
socket.SOCK_DGRAM 数据报式 socket for udp
socket.SOCK_RAM 伪造ip地址头,洪泛攻击
服务端
声明实例
server = socket.socket(AF.INET,sock.SOCK_STREAM) 不写默认是地址簇
绑定
server.bind() # 填写元组
server.listen()
while True: # 一直保持接收
conn,addr = server.accept() # 创建一个实例,阻塞,等待链接
while True: #为了多次交互
print(addr) #打印地址
data = conn.recv(1024) # 最好不超过8k,resv 默认是阻塞的 在linux系统上,客户端如果断开,这里接收到空数据,陷入死循环
if not data:
break #避免死循环
print(data)
conn.send(data) # 传输回去
server.close()
客户端
client = socket.socket()
client.connet(('localhost',999))
cilent.send(data)
client.send(data)
client.rscv(1024)
client.close()