网络编程--初阶

1.多继承:

从左向右查找   经典类和新式类  : 经典类就是没继承(object)  py3中自动继承object

py2中存在经典类和新式类     py3中不存在新式类     使用__mro__查看顺序   

经典类和新式类的区别:

  查找成员的顺序不一样:

            经典类一条路走到黑(深度优先).

            新式类,c3算法实现(py2.3时更新c3算法)

c3算法:获取第一个表头和其他表位进行比较,不存在则拿走,如果存在则放弃,然后取第二个表的表头再次和其他表的表尾进行比较.

示例:

            class A(object):  
                pass


            class B(object):
                def f1(self):
                    print('B')


            class C(A,B):
                pass

            obj = C()

            obj.f1()     

2.软件:

  客户端:cs架构    client    ==>  server

  浏览器:Bs架构   browser  ==> server

3.如何实现相互通信:

  需求1:编写两个软件,软件之间相互通信

  需求2:两个人直接连接通信

  需求3:教室相互通信:(交换机)

  需求4:和三亚女友通信(交换机+n*路由器)

4.总结:

  相互通信本质发送00100101010101

     通过ipconfig查看自己的内网IP

5.基于socket模块实现网络通信

  为什么要网络通信发送的都是字节?而不是字符串?

  python3, send 和 recv  都是字节

  python2, send 和 recv 都是字符串

  简单通信示例

 1 ##################服务端###########################
 2 import socket    #引入socket模块
 3 server = socket.socket()   #创建服务端socket对象
 4 server.bind(("192.168.13.155",8000))    #绑定IP和端口
 5 server.listen(5)    #设置等待的人数的最大值
 6 print("服务端住呗开始接受客户端的连接")
 7 
 8 conn,addr = server.accept()  #等待客户端来连接,如果没有人连接就等,等到有人连接conn是客户端和服务器端连接的对象,
服务端以后要通过该对象进行收发数据addr是客户端的地址信息,这里发生阻塞,只有客户端进行连接,则获取客户端连接然后进行通信
10 print("已经有人连接,客户端信息:",conn,) 11 data = conn.recv(1024) #通过对象去获取客户端给我发来的消息 1024表示服务端 通过recv获取数据时,一次最多拿1024字节 12 print("已经有人发来信息了",data) 13 conn.send(b"stop") #服务器通过连接对象给客户端回复了一个消息 14 conn.close() #与客户端断开连接 15 server.close() #关闭服务端的服务 16 17 ####################客户端######################## 18 import socket 19 clinet = socket.socket() 20 clinet.connect(('192.168.13.155',8000)) #向服务端发起连接请求 阻塞:去连接直到连接成功后才会继续向下走 21 clinet.send(b,"hello") #连上服务端后,向服务端发送信息 22 data = client.recv(1024) #等待服务器返回消息 23 clinet.close #关闭自己

  

原文地址:https://www.cnblogs.com/yjw1/p/9578711.html