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()

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

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

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

原文地址:https://www.cnblogs.com/dong-/p/9469605.html