网络编程

1 面向对象的多继承(经典类和新式类)

python2与python3的区别:

python2中:经典类

                   新式类(无__mro__)如果自己或自己的前辈只要有人继承object,那么此类就是新式类

python3:新式类

2 经典类与新式类的查找顺序不一样

经典类:一条道走到黑(深度优先)

新式类:C3算法实现(python2.3中更新的)

 1 class D:
 2 
 3     def bar(self):
 4         print 'D.bar'
 5 
 6 
 7 class C(D):
 8 
 9     def bar(self):
10         print 'C.bar'
11 
12 
13 class B(D):
14 
15     def bar(self):
16         print 'B.bar'
17 
18 class A(B, C):
19 
20     def bar(self):
21         print 'A.bar'
22 
23 a = A()
24 
25 执行bar方法时
26 # 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去D类中找,如果D类中么有,则继续去C类中找,如果还是未找到,则报错
27 # 所以,查找顺序:A --> B --> D --> C
28 # 在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
29 a.bar()
经典类多继承
 1 class D(object):
 2 
 3     def bar(self):
 4         print 'D.bar'
 5 
 6 
 7 class C(D):
 8 
 9     def bar(self):
10         print 'C.bar'
11 
12 
13 class B(D):
14 
15     def bar(self):
16         print 'B.bar'
17 
18 
19 class A(B, C):
20 
21     def bar(self):
22         print 'A.bar'
23 
24 a = A()
25 
26 print(__mro__)
新式类多继承

注意事项:super也是遵循__mro__执行顺序
二 网络编程

软件:

客户端:cs架构

服务器端:BS架构

三 实现相互通信

1 两个人直接连线 通过网线

2 教室之间的相互通信   通过交换机

3 与外地的亲戚通信     通过交换机和n个路由器

四 基于socket模块实现网络通信

1 为甚么网络通信发送的是字节?而不是字符串?

  py3,send/recv 都是字节

 py2,send/recv 都是字符串

2 服务器端:

     accept ,阻塞:等待客户机来链接

    recv,阻塞,等待客户端发来数据

客户端:

   connect 阻塞:一直在连接,直到连接成功才往下运行

   recv,阻塞,等待服务端发来数据

 1 import socket
 2 server=socket.socket()  #创建服务端socket对象
 3 server.bind(('192.168.23.18',80000)) #绑定自己的网址和端口
 4 server.listen(5)  #后面最多可以等5个人
 5 conn,addr=server.accept()# 阻塞,只有有客户端连接上,Conn 是客户端和服务器之间连接的介质 阻塞,等待客户端连接然后进行通信 ,addr是客户端的地址信息
 6 
 7 print("已经有人连接上了")
 8 
 9 data=conn.recv(1024) #1024表示服务器端通过介质来获取数据的时候最多能一次性拿1024字节
10 print("已经有人发来消息了")
11 
12 conn.send(b'stop')# 服务器端给客户端回复一个消息
13 
14 conn.close()#与客户端断开连接
15 
16 
17 server.close()#关闭服务端的服务
服务端
 1 import socket
 2 server=socket.socket()  #创建服务端socket对象
 3 server.bind(('192.168.23.18',80000)) #绑定自己的网址和端口
 4 server.listen(5)  #后面最多可以等5个人
 5 conn,addr=server.accept()# 阻塞,只有有客户端连接上,Conn 是客户端和服务器之间连接的介质 阻塞,等待客户端连接然后进行通信 ,addr是客户端的地址信息
 6 
 7 print("已经有人连接上了")
 8 
 9 data=conn.recv(1024) #1024表示服务器端通过介质来获取数据的时候最多能一次性拿1024字节
10 print("已经有人发来消息了")
11 
12 conn.send(b'stop')# 服务器端给客户端回复一个消息
13 
14 conn.close()#与客户端断开连接
15 
16 
17 server.close()#关闭服务端的服务
客户端

#### IOS七层模型,各层中的工作

(1)应用层 http https ssl smtp ftp

(2)传输层 tcp udp  端口信息  四层路由器 四层交换机
​    tcp
​        可靠的 面向连接的 全双工的 流式传输 效率低
​        三次握手和四次挥手
​            三次握手
​                把图背下来 syn ack
​            四次挥手
​                把图背下来 fin ack
​        黏包 : (自定义协议)先发送数据的长度,再发送数据
​    udp 效率高 不可靠 无连接 基于数据包的传输 能够传输的数据的长度有限
(3)  网络层     ipv4协议192.168.0.1    ipv6协议 ff2312:f5242:12:1:1:1   网关地址 子网掩码 路由器 三层交换机
   (4) 数据链路层 mac地址 arp(通过ip地址找mac地址),rarp(通过mac地址找ip地址) 网卡  交换机
   (5) 物理层

原文地址:https://www.cnblogs.com/mlhz/p/9579253.html