补充回顾

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
简单断言,相比与if 更加简洁

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()

原文地址:https://www.cnblogs.com/yfjly/p/9873211.html