zoukankan      html  css  js  c++  java
  • 笔记

    python2和python3的区别

    python2:str/bytes是一类,都是以字节的形式存储,unicode又是单独一类,用unicode的形式存储;默认编码是ascii码,需要在文件开头写: #-*- encoding:utf-8 -*-;有新式类和经典类存在

    python3:str和bytes区分开来了,str用unicode存储,bytes用字节存储;全是新式类

    作用域的坑

    f = [lambda x  :x + i for i in range(10)]
    """转换成函数"""
    def func(x):
        for i in range(10):
            pass
        return x + i        # i = 9(作用域的问题)
    ret = func(5)
    print(ret)
    # 输出结果:
    14

    网络知识

    两个计算机之间的连接

    一根网线搞定,电脑有网卡,网卡有mac地址

    DHCP

    到某个地方插上网线,路由器或交换机中的DHCP服务就会为计算机自动分配IP地址

    IPv4:4段8位表示,共32位,用10进制表示,每段范围是0~255,表示每个局域网中计算机的理论上限为256台

    IPv6:IPv4的扩充,6段8位,共128位,16进制表示

    子网掩码

    默认值:255.255.255.0

    一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。
    作用:就是将某个IP地址划分成网络地址和主机地址两部分(挡住的IP作为网段,为挡住的部分作为可变的值)用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。

    网关

    路由器中连接交换机的口,一般以局域网中的第一个地址表示,即:xxx.xxx.xxx.1

    arp协议

    地址解析协议:根据IP地址获取mac地址的一个TCP协议,主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源

    作用:网络工作分为七层,IP地址在OSI模型的第三层,MAC地址在第二层,彼此不直接打交道。在通过以太网发送IP数据包时,需要先封装第三层(32位IP地址)、第二层(48位MAC地址)的报头,但由于发送时只知道目标IP地址,不知道其MAC地址,又不能跨第二、三层,所以需要使用地址解析协议。使用地址解析协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址(MAC地址)信息,以保证通信的顺利进行。

    工作过程

    主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01;
    主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02;
    当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址,以下为工作流程
    1. 根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。
    2. 如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。
    3. 主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
    4. 主机B将包含其MAC地址的ARP回复消息直接发送回主机A。
    5. 当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机发送IP通信了。

     线程

    import time
    import threading
    
    
    def task(n):
        print('开始执行任务:',n)
        time.sleep(10)
        print('...')
        print('任务%s 执行完毕:'%n)
    
    while True:
        name = input("请输入任务:")
        t = threading.Thread(target=task,args=(name,))
        t.start()

    线程和socket的配合

    import time
    import socket
    import threading
    
    def task(conn):
        time.sleep(20)
        data = conn.recv(1024)
        print(data)
        conn.close()
    
    
    server = socket.socket()
    server.bind(('192.168.13.84',8001,))
    server.listen(5)
    
    while True:
        conn,addr = server.accept()
        t = threading.Thread(target=task,args=(conn,))
        t.start()
  • 相关阅读:
    select.poll,epoll的区别与应用
    hibernate生成查询语句但查不到数据
    优化exp/imp导入导出速度大全
    完美逆向百度手机助手5.0底部菜单栏
    C#序列化和反序列化
    Centos6 编译安装局域网NTP服务器
    linux查看服务器型号
    fopen/fclose
    C文件操作之写入字符串到指定文件并在屏幕显示
    Centos6.x X64 飞信安装
  • 原文地址:https://www.cnblogs.com/--kai/p/9600417.html
Copyright © 2011-2022 走看看