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

    1、什么是异常
    异常是程序发生错误的信号,程序一旦出错就会抛出异常,程序的运行随即终止
    print('start....')
    [1,2,3][1000]
    print('stop...')
    
    1.1 异常处理的三个特征
    异常的追踪信息
    异常的类型
    异常的内容
    2、为何处理异常
    为了增强程序的健壮性,即便是程序运行过程中出错了,也不要终止程序
    而是捕捉异常并处理:将出错信息记录到日志内
    3、如何处理异常?
    3.1 语法上的错误SyntaxError,
    处理方式一:必须在程序运行前就改正
     if 1>3
         print("run...")
    
    3.2 逻辑上的错误
     print(x)
    
     l=['a','b']
     l[2]
    
    
     1/0
    
     int('abc')
    
     dic={'name':'egon'}
     dic['age']
    
     class Foo:
         pass
    
     Foo.x
    
    3.2 针对逻辑上的异常又分成两种处理方式
    3.2.1 错误发生的条件是可以预知的,使用if判断来解决
    age=input('>>: ').strip() ##### 输入的只要不是数字就会出错
     if age.isdigit():
         age=int(age)
         if age > 18:
             print('猜大了')
         elif age < 18:
             print('猜大了')
         else:
             print('猜对了')
     else:
         print('必须输入数字')
    
    3.2.2 错误发生的条件是无法预知的
    print('start...')
    try:
        ##### 有可能会抛出异常的代码
        子代码1
        子代码2
        子代码3
    except 异常类型1 as e:
        pass
    except 异常类型2 as e:
        pass
    ...
    else:
    
    如果被检测的子代码块没有异常发生,则会执行else的子代码
     finally:
         无论被检测的子代码块有无异常发生,都会执行finally的子代码
    
     print('end...')
    
    ##### 用法一:
    print('start...')
    
    try:
        print('1111111111')
        l=['aaa','bbbb']
        l[3] ##### 抛出异常IndexError,该行代码同级别的后续代码不会运行
         print('2222222222')
         xxx
         print('33333333')
         dic={'a':1}
         dic['a']
     except IndexError as e:
         print('异常的信息: ',e)
    
     print('end....')
    
    ##### 用法二:
     print('start...')
    
     try:
         print('1111111111')
         l=['aaa','bbbb']
         ##### l[3] ##### 抛出异常IndexError,该行代码同级别的后续代码不会运行
         print('2222222222')
         xxx
         print('33333333')
         dic={'a':1}
         dic['a']
     except IndexError as e:
         print('异常的信息: ',e)
     except NameError as e:
         print('异常的信息: ',e)
    
     print('end....')
    
    ##### 用法三:
     print('start...')
    
     try:
         print('1111111111')
         l = ['aaa', 'bbbb']
         l[3] ##### 抛出异常IndexError,该行代码同级别的后续代码不会运行
         print('2222222222')
         xxx
         print('33333333')
         dic = {'a': 1}
         dic['aaa']
     ##### except (IndexError, NameError) as e:
     #####     print('异常的信息: ', e)
     ##### except KeyError as e:
     #####     print('字典的key不存在: ', e)
     except Exception as e:  ##### 万能异常
         print('所有异常都可以匹配的到')
     print('end....')
    
    ##### 用法四:else不能单独与try配合使用,必须要搭配except
     print('start...')
    
     try:
         print('1111111111')
         print('2222222222')
         print('33333333')
     except Exception as e:  ##### 万能异常
         print('所有异常都可以匹配的到')
     else:
         print('====>')
    
     print('end....')
    
    用法五:finally可以单独与try配合使用
    print('start...')
    
    try:
    	print('1111111111')
    	l = ['aaa', 'bbbb']
    	l[3] ##### 抛出异常IndexError,该行代码同级别的后续代码不会运行
    	print('2222222222')
    	xxx
    	print('33333333')
    	dic = {'a': 1}
    	dic['aaa']
    finally: ##### 不处理异常,无论是否发生异常都会执行finally的子代码
    	print('====》》》》》应该把被检测代码中回收系统资源的代码放到这里')
    
    print('end....')
    
    1、CS架构与BS架构
    Client<===========>Server
    
    客户端软件send             服务端软件recv
    操作系统                   操作系统
    计算机硬件<====物理介质=====>计算机硬件
    
    
    Browser<===========>Server
    
    2、网络通信

    网络存在的意义就是跨地域数据传输=》称之为通信
    网络=物理链接介质+互联网通信协议

    3、OSI七层协议

    五层协议

    应用层
    传输层
    网络层
    数据链路层
    物理层
    

    协议:规定数据的组织格式

    格式:头部+数据部分
    
    封包裹的过程:数据外加头
    拆包裹的过程:拆掉头获取数据
    
    4、五层协议
    计算机1:                            计算机2:
    
    应用层                               应用层
    传输层                               传输层
    网络层                               网络层
    数据链路层                            数据链路层
    物理层  <===========交互机===========> 物理层
    									 0101010101010
    
    (源mac地址,目标mac地址)(源ip地址,目标ip地址)数据
    
    4.1 物理层负责发送电信号
    一组物理层数据称之为:位
    单纯的电信号毫无意义,必须对其进行分组
    
    4.2 数据链路层:ethernet以太网协议
    规定1:一组数据称之为一个数据帧
    规定2:数据帧分成两部分=》头+数据
    头包含:源地址与目标地址,该地址是mac地址
    数据包含:包含的是网络层发过来的整体的内容
    
    规定3:规定但凡接入互联网的主机必须有一块网卡,每块网卡在出厂时都烧制好一个全世界独一无二的地址,该地址称之为mac地址
    
    注意:计算机通信基本靠吼,即以太网协议的工作方式是广播
    

    (egon,血嫌弃)(帮我买包子)

    4.3 网络层:IP协议
    要达到的目的:
    划分广播域
    每一个广播域但凡要接通外部,一定要有一个网关帮内部的计算机转发包到公网
    网关与外界通信走的是路由协议
    
    规定1:一组数据称之为一个数据包
    规定2:数据帧分成两部分=》头+数据
    头包含:源地址与目标地址,该地址是IP地址
    数据包含的:传输层发过来的整体的内容
    
    
    ipv4地址:
    8bit.8bit.8bit.8bit
    
    0.0.0.0
    255.255.255.255
    
    子网掩码:
    8bit.8bit.8bit.8bit
    
    255.255.255.0对应的二进制表达
    11111111.11111111.11111111.00000000
    
    一个合法的ipv4地址组成部分=ip地址/子网掩码地址
    172.16.10.1/255.255.255.0
    172.16.10.1/24
    
    
    计算机1:
    172.16.10.1:     10101100.00010000.00001010.000000001
    255255.255.255.0: 11111111.11111111.11111111.000000000
    172.16.10.0:      10101100.00010000.00001010.000000000
    
    
    计算机2:
    172.16.10.2:      10101100.00010000.00001010.000000010
    255.255.255.255.0: 11111111.11111111.11111111.000000000
    172.16.10.0:       10101100.00010000.00001010.000000000
    
    
    
    
    计算机1:                            计算机2:
    
    应用层                               应用层
    传输层                               传输层
    网络层                               网络层
    数据链路层                           数据链路层
    物理层  <=========二层交互机========> 物理层
                                     0101010101010
    
    (源mac地址,xxxx)(源ip地址,目标ip地址)数据
    (源mac地址,网关的mac地址)(172.16.10.10/24,101.100.200.11/10)数据
    
    
    事先知道的是对方的ip地址
    但是计算机的底层通信是基于ethernet以太网协议的mac地址通信
    
    ARP:
    所以必须能够将ip地址解析成mac地址
    
    
    
    
    
    
    ##### 两台计算机在同一个局域网内
    计算机1:172.16.10.10/24             直接              计算机2:172.16.10.11/24
    ARP:
    自己的ip,对方的ip
    1、计算二者网络地址,如果一样,拿到计算机2的mac地址就可以了
    2、发送广播包
    发送端mac	FF:FF:FF:FF:FF:FF	172.16.10.10/24	172.16.10.11/24	数据
    
    两台计算机不在同一个局域网内
    计算机1:172.16.10.10/24	              网关           计算机2:101.100.200.11/10
    ARP:
    自己的ip,对方的ip
    1、计算机二者网络地址,如果不一样,应该拿到网关的mac地址
    2、发送广播包
    发送端mac	FF:FF:FF:FF:FF:FF	172.16.10.10/24	172.16.10.1/24	数据
    
    4.3.1 总结******
    ip地址+mac地址=》标识全世界范围内独一无二的一台计算机
    
    或者:
    ip地址=》标识全世界范围内独一无二的一台计算机
    

    五层协议
    计算机1: 计算机2:

    应用层 应用层

    socket socket

    传输层 段 传输层
    网络层 包 网络层
    数据链路层 帧 数据链路层
    物理层 <=交互机=> 物理层

    客户端软件send 服务端软件recv
    操作系统 操作系统
    计算机硬件<物理介质=>计算机硬件

    ethernet头+ip头+tcp头+应用层的头+应用层数据

    一:传输层 tcpudp=》基于端口
    端口范围0-65535,0-1023为系统占用端口
    ip+port=》标识全世界范围内独一无二的一个基于网络通信的应用程序
    
    
    基于tcp协议通信之前:必须建立一个双向通信的链接
    C-------------------->S
    C<--------------------S
    
    三次握手建立链接:
        建立链接是为了传数据做准备的,三次握手即可
    
    四次挥手断开链接
        断开链接时,由于链接内有数据传输,所以必须分四次断开
    
    tcp是可靠传输的
        发送数据必须等到对方确认后才算完成,才会将自己内存中的数据清理掉,否则重传
    
        ps:当服务端大量处于TIME_WAIT状态时意味着服务端正在经历高并发
    
    
    tcp协议的半连接池:
        backlog
        [链接请求1,链接请求2,链接请求3,链接请求5]
    
    二:应用层:
    可以自定义协议=》头部+数据部分
        自定义协议需要注意的问题:
        1、两大组成部分=头部+数据部分
            头部:放对数据的描述信息
                比如:数据要发给谁,数据的类型,数据的长度
            数据部分:想要发的数据
    
        2、头部的长度必须固定
            因为接收端要通过头部获取所接接收数据的详细信息
    http https ftp
    

    www.163.com.
    三:socket介绍
    import socket

  • 相关阅读:
    Serialize and Deserialize Binary Tree
    sliding window substring problem汇总贴
    10. Regular Expression Matching
    《深入理解计算机系统》(CSAPP)读书笔记 —— 第七章 链接
    程序员如何写一份合格的简历?(附简历模版)
    9个提高代码运行效率的小技巧你知道几个?
    《深入理解计算机系统》(CSAPP)读书笔记 —— 第六章 存储器层次结构
    24张图7000字详解计算机中的高速缓存
    《深入理解计算机系统》(CSAPP)实验四 —— Attack Lab
    《深入理解计算机系统》(CSAPP)读书笔记 —— 第五章 优化程序性能
  • 原文地址:https://www.cnblogs.com/abldh12/p/15211645.html
Copyright © 2011-2022 走看看