zoukankan      html  css  js  c++  java
  • 0502 网络编程

    复习:正则模块
    正则表达式
    元字符 :
    . 匹配除了回车以外的所有字符
    w 数字字母下划线
    d 数字
    s 回车 空格 和 tab
    ^ 必须出现在一个正则表达式的最开始,匹配开头
    $ 必须出现在一个正则表达式的最后,匹配结尾
    | 或
    a|b 要么取左边的要么取右边的
    ()|() 分组中的或 一定是长的在前面 短的在后面
    [] 在同一个位置上可能出现的所有字符都放在组里
    [^] 在同一个位置上不能出现的所有字符都放在组里
    () 对于一整个组做量词约束 ; python 分组优先
    量词 :
    * 0、多次
    + 1、多
    ? 0、1
    {} 具体的 {n},{n,m},{n,}
    问好的用法
    惰性匹配 : 量词+? 表示使用惰性匹配
    分组优先 findall split ;取消分组优先 (?:。。。)
    分组命名 (?P<name>...)
    import re
    ret=re.findall(r"d+","1-2*(60+(-40.35/5)-(-4*3))")
    print(ret)
    有的时候 不想要的内容需要被匹配出来
    你不想要的东西包含着你想要的东西
    ret=re.findall(r"d+.d+|(d+)","1-2*(60+(-40.35/5)-(-4*3))")
    ret.remove('')
    print(ret)

    二、网络编程

    软件开发的两种架构

    应用类:qq、微信、网盘、优酷这一类是属于需要安装的桌面应用

    web类:比如百度、知乎、博客园等使用浏览器访问就可以直接使用的应用

    C/S即:Client与Server ,客户端与服务器端架构,几乎包含了所有网络开发的架构形态

    B/S即:Browser与Server,浏览器端与服务器端架构,也是C/S架构,架构中的client都是browser浏览器

    计算机之间是如何通信的?

    广播

      主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要),由于其不用路径选择,所以其网络成本可以很低廉。有线电视网就是典型的广播型网络,我们的电视机实际上是接受到所有频道的信号,但只将一个频道的信号还原成画面。在数据网络中也允许广播的存在,但其被限制在二层交换机的局域网范围内,禁止广播数据穿过路由器,防止广播数据影响大面积的主机。

    ip地址与ip协议

    • 规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示
    • 范围0.0.0.0-255.255.255.255
    • 一个ip地址通常写成四段十进制数,例:172.16.10.1
    • IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。

    mac地址

      head中包含的源和目标地址由来:ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址。

      mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)

    路由器

      路由器(Router),是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号。路由器(Router)又称网关设备(Gateway)是用于连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络或者一个子网。路由器具有判断网络地址和选择IP路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网,路由器只接受源站或其他路由器的信息,属网络层的一种互联设备。

    局域网

      局域网(Local Area Network,LAN)是指在某一区域内由多台计算机互联成的计算机组。由交换机连接在一起。

    子网掩码 

      所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。

    端口

      "端口"是英文port的意译,可以认为是设备与外界通讯交流的出口。端口的范围: 0 - 65535只有用到联网通信的程序才会用到端口的概念。

      在同一台机器上 同一时刻 每一个端口只能为一个运行中的程序提供服务。ip + 端口 就可以找到全世界唯一的一台电脑上的一个程序。

     arp协议 ——查询IP地址和MAC地址的对应关系

      地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。

    TCP协议和UDP协议

      TCP 可靠的 面向连接 全双工的连接。三次握手 和 四次挥手

     三次握手

    四次挥手

       UDP 不可靠的 面向数据包的 传输速度快 且不会长期占用系统的连接资源

     

     互联网协议与osi模型

     

     

     套接字(socket)

    是模块 是和应用层直接交互,向下封装了应用层之下的相关协议的一组网络通信的接口

     基于TCP协议的socket

    tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端

    服务server端
    import socket
    # 基于tcp协议的一次通信
    sk = socket.socket()   # 买手机
    # sk.bind(('192.168.11.53',9999))    # 装一张电话卡  bind绑定
    sk.bind(('127.0.0.1',9999))    #把地址绑定到套接字
    # 8000 - 10000
    sk.listen()   # 开机  #监听链接
     
    conn,addr = sk.accept()   # 等着 接电话  我们两个的连接,对方的地址 accept接受  #接受客户端链接
    print(addr)
    conn.send('你好'.encode('utf-8'))  #send 发送
    ret = conn.recv(1024)   #1024  表示接受1024个字节
    print(ret.decode('utf-8'))
    
    conn.close()   # 挂电话 #关闭客户端套接字
    sk.close()     # 关手机 #关闭服务器套接字(可选)
    
    # 计算机的回环地址  127.0.0.1
    客户client端
    import socket
    
    sk = socket.socket()   # 买个手机 # 创建客户套接字
    sk.connect(('127.0.0.1',9999))   # 打电话  connect 连接  # 尝试连接服务器
    
    ret = sk.recv(1024)  #recv接收  # 对话(发送/接收)
    print(ret.decode('utf-8'))
    sk.send('你也好'.encode('utf-8'))
    
    sk.close()    # 关机  # 关闭客户套接字

    tcp协议适用于 文件的上传和下载 发送邮件 发送重要的文件
    每和一个客户端建立链接 都会在自己的操作系统上占用一个资源
    同一时间 只能 和一个客户端通信

    基于UDP协议的socket

    udp是无链接的,启动服务之后可以直接接受消息不需要提前建立链接

    在一个机房里 有一台标准时间的服务器
    机房里所有的机器 都每隔一段时间 就去请求这台服务器 来获取一个标准时间
    server
    import time
    import socket
    sk = socket.socket(type = socket.SOCK_DGRAM)
    sk.bind(('127.0.0.1',9090))
    while True:
    msg,addr = sk.recvfrom(1024)
    sk.sendto(time.strftime(msg.decode('utf-8')).encode('utf-8'),addr)
    sk.close()

    client
    import time
    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)
    while True:
    sk.sendto('%Y/%m/%d %H:%M:%S'.encode('utf-8'),('127.0.0.1',9090))
    ret,addr = sk.recvfrom(1024)
    print(ret.decode('utf-8'))
    time.sleep(1)
    sk.close()
  • 相关阅读:
    关于粒子发射(CAEmitterLayer)
    自定义cell(xib)中button点击事件不能响应的情况
    xcode意外退出
    iOS开发技巧-2
    禁止UIWebView随键盘的弹起而往上滚动
    内联函数
    使用sudo apt-get出现无法解析域名的问题:“cn.archive.ubuntu.com”
    iOS进阶
    swift 中的defer
    iOS中static的作用
  • 原文地址:https://www.cnblogs.com/Mr-Murray/p/8981555.html
Copyright © 2011-2022 走看看