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

    一. 网络基础相关

      1. 架构

        c/s架构 : client客户端和server服务器端.  优势是可以充分发挥pc机的性能

        b/s架构 : browser浏览器和server服务器端.  优势是统一了应用的接口

      2. 通信

        同一台电脑上的两个py文件通信.  ex:打开一个文件

        两台电脑如何通信.  ex:连一根网线

        多台电脑通信.  

          ex : 电脑1(源)找电脑2(目标)

            电脑1发出一个请求帧,其中包含(我的ip是192.168.1.1,我的mac地址是xxxxxxx,我要找ip地址为  192.1686.1.2的主机).电脑1会将次请求发给交换机,交换机收到此消息后会向其他主机广播此消息.目标主机接收到消息后,对比发现自己就是被找的主机,会回复消息(我的ip是1192.168.1.2,我的mac地址是yyyyyyyyyy,请回复给ip地址为192.168.1.1,mac地址为xxxxxxx的主机)给交换机. 交换机收到消息后会以单播形式将消息返回给源主机.

      知识点 : 

        1. mac地址 : 是一个物理地址,全球唯一,类似于身份证

        2. ip地址 : 是一个四位以点分割的十进制数,它标识了计算机在网络中的位置.

        3. 交换机的通信方式 :

          广播 : 一对多(交换机对除发出请求帧的主机之外的所有主机)

          单播 : 一对一(交换机对某一台主机)

          组播 : 一对多(交换机对需要接收发出请求帧的主机发出的信息的所有主机)

        4. arp协议 : 通过目标ip地址获取目标mac地址的一个协议(过程)

        5. 端口 : 操作系统上为本机上每一个运行的程序都随机分配一个端口,其他电脑的程序可以通过端口获取到这个程序.

        6. 路由器 : 连接不同的网段 ,路由

        7. 网关 : 类似于一个局域网的出口和入口

        8. 网段 : 一个局域网的ip地址范围

        9. osi五层模型 :

          应用层    协议 : http,https,ftp

          传输层    协议 : tcp/udp     设备 : 四层交换机,四层路由器

          网络层    协议 : ip协议       设备 : 路由器,三层交换机

          数据链路层  协议 : arp协议    设备 : 以太网交换机,网卡,网桥

          物理层    协议 : 传输电信号    设备 : 集线器,网线,光纤

    二. socket模块

      socket 又叫套接字,有很多种类型

      sk = socket.socket(family = AF_INET,type = SOCK_STREAM)

        family :

          1. AF_UNIX基于文件类型的套接字(早期socket是源自于unix系统而研发的一个功能,主要是为了同一台电脑上,多个程序直接通信)  unix系统的主心思想 : 一切皆文件

          2. AF_INET基于网络类型的套接字

        type :

          1. 基于TCP协议 (SOCK_STREAM)

          2. 基于UDP协议 (SOCK_DGRAM)

      TCP协议 : 可靠的,面向连接的,面向字节流形式的传输方式,速度慢,只能一对一进行通信

      UDP协议 : 不可靠的,非面向连接,面向数据报的传输方式,但是很快,允许一个服务器同时和多个客户端通信

      TCP协议编码流程 :

        服务器端          客户端

        实例化对象         实例化对象

        绑定ip地址和端口号(bind)     

        监听(listen)

        接受客户端的连接(accept)   连接服务器(connect)

        收发消息(recv/send)      收发消息(recv/send)

        关闭(close)          关闭(close)

      TCP三次握手 : 一定是client先发起请求

        1. 客户端发起请求连接服务器

        2. 服务端接受到并返回 : 接收到请求,请求连接客户端

        3. 客户端回复 : 可以连接

      TCP四次挥手 : 谁发起断开连接请求都可以

        1. 客户端发起断开连接的请求(我想和你断开连接,我没有数据需要发送了,如果你还有数据要发送,我可以继续接收)

        2. 服务器回复 : 我接收到你的请求

        3. 服务器发送 : 我已经准备好和你断开连接

        4. 客户端回复 : 收到你的信息,断开连接

      回环地址 : 127.0.0.1  每个计算机都有这样的一个本机地址,只能被本机识别,不会被其他机器识别

      

    三. pycharm输出带颜色的字体

      33[1;31;40m 输出数据 33[0m  <--1-高亮显示  31-前背景红色(即字体红色)  40-背景黑色  33[0m-取消颜色设置,采用终端默认设置>

    前背景(即字体) 背景 颜色
    30 40 黑色
    31 41 红色
    32 42 绿色
    33 43 黄色
    34 44 蓝色
    35 45 紫红色
    36 46 青蓝色
    37 47 白色
    显示方法 意义
    0 终端默认设置
    1 高亮显示
    4 下划线
    5 闪烁
    7 反白显示
    8 不可见
    print('33[0;34;42m如果我是DJ,你会爱我吗?33[0m')
    print('33[4;34;42m如果我是DJ,你会爱我吗?33[0m')
    print('33[35m如果我是DJ,你会爱我吗?33[0m')
    print('如果我是DJ,你会爱我吗')

    练习 :

      TCP实现客户端和服务器端互相通信

    #服务器端
    import socket
    
    sk = socket.socket()
    sk.bind(('127.0.0.1',12054))#IP地址,端口
    sk.listen()#等待客户端链接
    while 1:
        a ,b = sk.accept()#等待客户端传输内容 ,阻塞等待
    
        while 1 :
            a_r = a.recv(2048).decode('utf-8')  # 接受客户端发来的2048个字节数据
            print(a_r)
            if a_r =='q':
                print('退出')
                break
            i = input('说话>>>: ')
            a.send(i.encode('utf-8'))
            if i =='q':
                break
    
        a.close()
    sk.close()
    #客户端
    import socket
    
    sk1 = socket.socket()
    sk1.connect(('127.0.0.1', 12054))#连接
    
    while 1:
        i = input('输入>>> : ')
        sk1.send(i.encode('utf-8'))
        if i =='q':
            break
        i_j =sk1.recv(2048).decode('utf-8')
        if i_j == 'q':
            break
        print(i_j)
    
    sk1.close()

      UDP实现服务器和多个客户端通信(服务器只能回复之后才可以继续接收信息)

    #服务器端
    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)
    sk.bind(('127.0.0.1',12001))
    while 1:
        a,b = sk.recvfrom(2048)
        print(a.decode('utf-8'))
        r = input('>>>>>>')
        sk.sendto(r.encode('utf-8'),b)
    sk.close()
    #客户端(可以多次运行模拟多个客户端)
    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)
    while 1:
        r = input ('>>>>')
        sk.sendto(r.encode('utf-8'),('127.0.0.1',12001))
        a,b = sk.recvfrom(2048)
        print(a.decode('utf-8'))
    sk.close()

    四. 交换机和路由器的区别

      交换机主要用来组织局域网,进行同一网段之间的信息传输

      路由器主要用于跨网段的信息传输,路由出最佳路径.

  • 相关阅读:
    POJ 3280 Cheapest Palindrome (区间DP)
    UVaLive 4731 Cellular Network (期望DP)
    UVa 11404 Palindromic Subsequence (LCS)
    UVa 11552 Fewest Flops (DP)
    UVa 10534 Wavio Sequence (LIS+暴力)
    UVaLive 4256 Salesmen (简单DP)
    UVaLive 4094 WonderTeam (贪心)
    UVaLive 3266 Tian Ji -- The Horse Racing (贪心)
    POJ 3723 Conscription (最小生成树)
    NodeJS学习笔记 进阶 (4)基于express+muter的文件上传(ok)
  • 原文地址:https://www.cnblogs.com/dong-/p/9469605.html
Copyright © 2011-2022 走看看