python网络编程 day28 网络编程初识 ——socket

一、内容回顾

1、两个内置函数(装饰器)及类中的魔术方法

  • @classmethod

    • 修改绑定方法为类方法,调用方式可以是实例名.方法名()或者类名.方法名()

      class Person:
         County = "中国"
         def __init__(self,name):
             self.name = name
         @property  #修改绑定方法的调用方式与实例变量一样,无需加括号
         def get_name(self):
             return self.name
         @classmethod  #绑定方法修改成类方法,并且调用方式可以是实例名.方法名()或者类名.方法名()
         def new_person(cls):
             return cls.County +"万岁"
         def hoby(self):
             return "地下城"
      p = Person("alex")
      print(p.get_name)
      print(Person.new_person())
      print(p.new_person())
      s = 'hoby'
      if hasattr(p,s): #判断对象是否存在
         if callable(getattr(p,s)): #判断对象是否可以被调用
             print(getattr(p,s)())  #获取方法并加括号实现方法的调用
  • @staticmethod 可以用对象和类调用

    • 把外部函数移动到类中,变成静态方法,并且不需要传递self值,

  • hasattr:判断内容是否在对象中

  • getattr :获取对象的内容

  • callable :判断对象是否可以被调用

class Person:
   County = "中国"
   def __init__(self,name):
       self.name = name
   @property  #修改绑定方法的调用方式与实例变量一样,无需加括号
   def get_name(self):
       return self.name
   @classmethod  #绑定方法修改成类方法,并且调用方式可以是实例名.方法名()或者类名.方法名()
   def new_person(cls):
       return cls.County +"万岁"
   def hoby(self):
       return "地下城"
p = Person("alex")
print(p.get_name)
print(Person.new_person())
print(p.new_person())
s = 'hoby'
if hasattr(p,s): #判断对象是否存在
   if callable(getattr(p,s)): #判断对象是否可以被调用
       print(getattr(p,s)())  #获取方法并加括号实现方法的调用
  • 双下划线new **非常重要***** 构造方法,开辟空间,实例化对象的时候在init之前执行

    ##########################单例模式##################
    Class Person:
       _instance = None
       def __new__(cls,*args,**kwargs):
           print("调用我啦")
           if Person._instance is None:
               Person._instance = super().__new__(cls)
               print("开辟一个空间了哦")
               return Person._instance
       def __init__(self):
           print("执行我啦")
    p1 = Person()  ###"调用我啦" ——》"开辟一个空间了哦"——》"执行我啦"
    p2 = Person()  ###"调用我啦"
  • 双下划线call:只要类中有这个call方法,这个类的对象就可以加括号

  • 双下划线len 只要类中有这个方法,可以直接len函数来操作类 len(类名)

  • 双下划线str :只要类中有这个方法,打印对象的时候,%s做拼接的时候,str做强制转换的时候,调用这个方法,打印这个方法的返回值

  • 双下划线repr:str的备胎,%r或者repr的时候就显示这个方法的返回值

二、今日内容

1、网络基础相关的概念

  • 不变的:mac地址

  • 可变的:ip地址

2、地址解析协议:arp协议

3、网络编程信息交互

#############server端################
import  socket
sk = socket.socket()
sk.bind(('127.0.0.1',9001))
sk.listen()
conn,addr = sk.accept()
conn.send(b'hello')
msg = conn.recv(1024)
print(msg)
conn.close()
sk.close()

#############client端#######################
import socket
sk = socket.socket()
sk.connect(('127.0.0.1',9001))
msg = sk.recv(1024)
print(msg)
sk.send(b'byebye')
sk.close()

4、os七层协议(应表会传网数物)

  • 应用层

  • 表示层

  • 会话层

  • 传输层

  • 网络层

  • 数据链路层

  • 物理层

  • osi五层

    • 应用层 :python代码

    • 传输层:port 四层交换机

    • 网络层:ipv4 ipv6 路由器 三层交换机

    • 数据链路层 : mac arp协议 网卡 二层交换机

    • 物理层

5、tcp与udp协议

  • tcp:

    • 需要建立联接,才能通信

    • 占用连接,可靠的传输,消息不会丢失,实时性高

    • 建立联接——三次我握手

      •  

         

    • 断开联接——四次挥手

      •  

         

  • udp:

    • 不许需要建立连接,就可以通信

    • 不占用联接

    • 不可靠的传输,消息可能丢失

posted @ 2021-01-14 20:58  小鱼鱼与黄黄  阅读(58)  评论(0编辑  收藏  举报