• 网络编程 osi七层协议 Time模块补充知识 TCP协议 三次握手 四次挥手


    Time模块补充知识


    date和datetime区别是什么?

    date 就是年月日

    datetime就是年月时时分秒

    以下代码为什么会报错?

    import json
    from datetime import datetime,date
    
    print(datetime.today())
    print(date.today())
    """
    TypeError: Object of type 'datetime' is not JSON serializable
    """
    

    因为datetime 和 data所传出的类型并不是json默认能处理的 不能被json序列化

    原理json 处理数据类型用的类是JSONEcoder 你不往dumps里面传cls的类 他就默认用JSONEcoder

    JSONEcoder这个类的方法default 定义了他不能序列化时返回的内容

    可以自己写一个类去继承JSONEcoder,并重写其中的default方法

    class MyJson(json.JSONEncoder):
        def default(self, o):
            if isinstance(o,datetime):
                return o.strftime('%Y-%m-%d %X')
            elif isinstance(o,date):
                return o.strftime('%Y-%m-%d')
            else:
                return super().default(self,o)
              
    res = {'c1':datetime.today(),'c2':date.today()}
    print(json.dumps(res,cls=MyJson))
    
    # {"c1": "2019-08-06 20:38:50", "c2": "2019-08-06"}
    

    重写过的default方法不仅能使json处理datetime.todat()和date.today()

    还能控制指定输出的形式

    网络编程


    软件开发架构

    c/s架构(client/server)

    ​ c: 客户端

    ​ s: 服务器

    b/s架构(browser/server)

    ​ b: 浏览器

    ​ s: 服务器

    ​ ps:b/s架构本质也是c/s架构

    ​ 手机端看上去c/s架构( 即客户端装在手机上 )比较火,实际上b/s( 即手机端的APP相当于一个浏览器,服务都在网页上 )已经在崛起。

    ​ 微信支付宝都在做一件事:统一接口

    ​ 可以预见的是,手机端之后肯定也是b/s比较火。

    服务端和客户端的特点?

    ​ 服务端:24小时不间断提供服务

    ​ 客户端:什么时候想体验服务,就去找相应的服务端去请求服务

    学习网络编程的用处,以及开发一个b/s架构的软件需要什么?

    ​ 学习网络编程 就可以开发一个c/s架构的软件

    ​ 并发,数据库,前端,Django 就可以开发一个b/s架构的软件

    网络编程的发展史

    ​ 任何先进的技术最早都来源于军事

    回到过去

    1. 早期的电话 电话线
    2. 大屁股电脑 网线
    3. 笔记本电脑 无线电话

    要想实现远程第一个需要的是:物理连接介质

    ​ 人要想实现无障碍交流必须说统一的语言

    ​ >>> 英文

    ​ 计算机与计算机之间要想实现远程通信除了有物理连接介质之外还需要

    ​ >>> 一套公共的标准/协议

    Osi 七层协议

    应表会传网数物

    应用层

    表示层

    会话层

    传输层

    网络层

    数据链路层

    物理连接层

    Osi五层协议

    应用层

    传输层

    网络层

    数据链路层

    物理连接层

    1. 物理连接层

    ​ 基于电信号传输010101二进制数据

    2. 数据链路层

    ​ a. 规定了电信号的分组方式

    ​ b. 任何一台接入互联网的计算机都必须有一块网卡

    ​ 每一块网卡都刻有世界上独一无二的编号

    ​ 12位16进制数

    ​ 前6位厂商编号

    ​ 后6位流水线编号

    ​ 这12位数叫mac地址

    ​ ps: 以上a,b两点合称为“以太网协议”

    ​ 交换机

    ​ 基于以太网协议通信
    ​ 不能跨局域网通信

    3. 网络层

    ​ IP协议

    ​ 规定了只要是接入互联网的计算机都必须有一个IP地址
    ​ ip地址特点:点分十进制
    ​ ip地址最小:0.0.0.0
    ​ ip地址最大:255.255.255.255
    ​ ip地址目前有两个版本:IPV4 IPV6(由于IPV4已经不够表示目前存在的计算机了所以推出了IPV6版本)

    IP地址是动态分配的

    4. 传输层

    TCPUDP都是基于端口工作的协议
    端口(port)

    计算机与计算机之间其实是计算机上的应用程序与应用程序之间的通信

    端口:用来唯一标识一台计算机上的某个应用程序
    端口号的范围:0~65535
    注意:0~1024这些都是操作系统默认使用的端口号
    建议:使用8000之后的端口
    MySQL默认端口:3306
    Redis默认端口:6379
    django默认端口:8000
    flask默认端口:5000

    ​ 端口号是动态分配的随机分配的
    ​ 第一次起qq分配到的是8989
    ​ 将qq关闭再次启动端口号可能就变了

    总结
    ip地址:用来唯一标识接入互联网的一台计算机
    port端口:用来唯一标识一台计算机上的某个应用程序
    ip+port:唯一标识接入互联网一台计算机上的某个应用程序

    5. 应用层

    HTTP协议

    FTP协议

    TCP协议

    ​ 流式协议,可靠协议

    ​ 基于TCP协议通道

    ​ TCP协议传输数据之所以可靠,不是在于双通道,而是在于反馈机制,发送消息后必须等到对方回应,才会将内存中的数据清除。

    UDP协议
    数据报协议

    	无需建立双向通道    数据传输是不安全
    	将内存中的数据直接发送出去 不会做保留
    	早期的qq
    

    ​ 三次握手四次挥手

    ​ 三次握手建立连接

    ​ 四次挥手断开连接

               ###如何解决TCP的粘包问题
    	基于TCP实现大文件的上传
    	客户端:
    		1.先生成一个字典
    		2.制作字典的报头
    		3.发送字典的报头
    		4.发送字典数据
    		5.发送真实数据
    	服务端
    		1.接收固定长度的报头
    		2.解析获取字典的长度
    		3.接收字典数据
    		4.解析获取真实数据信息
    		5.接收真实数据
    		
    socketserver
    	能够实现并发的效果
    
    并发:看上去像同时运行的
    并行:真正意义上的同时执行
    ps:单核的计算机绝对不可能实现并行 但是可以实现并发
    
    大文件上传
    		服务端
    			1.socket创建TCP服务
    			2.连接循环
    			3.通信循环
    				接受固定长度的字典的报头
    				解析获取字典数据的真实长度
    				接受字典数据 解码 反序列化成字典
    				从字典中获取文件大小 以及文件名等其他信息
    			4.循环接受文件数据
    				文件操作(wb) 接受一行往文件中写入一行
    
    		客户端
    			1.socket客户端代码
    			2.利用os.listdir获取文件夹中所有的文件名
    			3.循环打印 供用户选择想要上传的文件
    				用户选择是否符合要求
    			4.根据用户寻找及os.path.join方法拼接用户想要上传的文件绝对路径
    			5.根据文件路径获取文件大小os.path.getsize()
    			6.定义一个发送给服务端的字典
    				{
    				"file_name":用户选择的文件名,
    				"file_size":文件大小,
    				...额外键值对消息
    				}
    			7.制作字典的报头
    				序列化  编码
    			8.发送字典的报头
    			9.发送字典数据
    			10.发文件
    				文件操作 一行行读取并发送
    

  • 相关阅读:
    app接口测试
    鼠标右键添加"在此处打开命令窗口"
    解决Maven的Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart
    Linux机器之间复制文件和目录方式&Linux的scp命令详解
    Java动态代理总结
    解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法
    Elasticsearch使用filter进行匹配关系and,or,not,range查询
    阿里Java开发规范&谷歌Java开发规范&华为Java开发规范&Tab键和空格比较&Eclipse的Tab键设置 总结
    Kafka连接SparkStreaming的两种方式
    IntelliJ IDEA导入多个eclipse项目到同一个workspace下
  • 原文地址:https://www.cnblogs.com/PowerTips/p/11312089.html
Copyright © 2020-2023  润新知