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. 传输层

TCP\UDP都是基于端口工作的协议

端口(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.发文件
文件操作 一行行读取并发送

8.6 day27 网络编程 osi七层协议 Time模块补充知识 TCP协议的更多相关文章

  1. Day09: socket网络编程-OSI七层协议,tcp/udp套接字,tcp粘包问题,socketserver

    今日内容:socket网络编程    1.OSI七层协议    2.基于tcp协议的套接字通信    3.模拟ssh远程执行命令    4.tcp的粘包问题及解决方案    5.基于udp协议的套接字 ...

  2. python网络编程-OSI七层模型详解

    OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输 . 完成中继功能的节点通常称为中继系统.在OSI七层模型中,处于 ...

  3. 网络编程-osi七层

    一.操作系统基础 操作系统:(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才 ...

  4. Java网络编程:OSI七层模型和TCP/IP模型介绍

    OSI(Open System Interconnection),开放式系统互联参考模型 .是一个逻辑上的定义,一个规范,它把网络协议从逻辑上分为了7层.每一层都有相关.相对应的物理设备,比如常规的路 ...

  5. CSIC_716_20191204【网络编程 OSI 七层结构】

     软件开发架构 C/S架构: Client: 客户端 Server: 服务端 比如: 微信客户端.QQ客户端等... 优点: - 软件的使用稳定 - 节省网络资源 缺点: - 安装麻烦,用户体验差 - ...

  6. Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)

    Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手) 一丶CS/BS 架构 C/S: 客户端/服务器    定义:       ...

  7. OSI七层参考模型每一层都有哪些协议

    OSI七层参考模型每一层都有哪些协议 第七层应用层 协议:DHCP • DNS • FTP • Gopher • HTTP • IMAP4 • IRC • NNTP • XMPP • POP3 • S ...

  8. [网络编程之客户端/服务器架构,互联网通信协议,TCP协议]

    [网络编程之客户端/服务器架构,互联网通信协议,TCP协议] 引子 网络编程 客户端/服务器架构 互联网通信协议 互联网的本质就是一系列的网络协议 OSI七层协议 tcp/ip五层模型 客户端/服务器 ...

  9. 软件开发架构与网络之OSI七层协议(五层)

    本期内容概要 python回顾 软件开发架构 网络理论前瞻 osi七层协议(五层) 以太网协议 IP协议 port协议 交换机 路由器 局域网 广域网 TCP协议 三次握手 四次挥手 UDP协议 内容 ...

随机推荐

  1. Android Native 内存泄漏系统化解决方案

    导读:C++内存泄漏问题的分析.定位一直是Android平台上困扰开发人员的难题.因为地图渲染.导航等核心功能对性能要求很高,高德地图APP中存在大量的C++代码.解决这个问题对于产品质量尤为重要和关 ...

  2. 20131207-ADO.NET-第十六天

    [1]快捷键 工具箱:ctrl+w+x 首字母定位控件范围 属性:F4 或ctrl+w+p Tab跳转 ,home 与end也有效 [2]连接字符串 string str = "Data S ...

  3. MyBatis 一对多映射

    From<MyBatis从入门到精通> <!-- 6.1.2.1 collection集合的嵌套结果映射 和association类似,集合的嵌套结果映射就是指通过一次SQL查询将所 ...

  4. Java编程思想:File类getCanonicalFile()方法,listFile()方法

    import java.io.IOException; import java.util.*; import java.util.regex.Pattern; import java.io.File; ...

  5. Java编程思想:I/O的典型使用方式

    import java.io.*; public class Test { public static void main(String[] args) { // BufferedInputFile. ...

  6. DataGrid通过DataSet保存为xml文件,并导入

    做了个小的DataGrid通过DataSet保存为xml_测试,DataGrid通过DataSet保存为xml_测试,通过dataSet.writeXML()和dataSet.readXML()方法完 ...

  7. [leetcode] 464. Can I Win (Medium)

    原题链接 两个人依次从1~maxNum中选取数字(不可重复选取同一个),累和.当一方选取数字累和后结果大于等于给定的目标数字,则此人胜利. 题目给一个maxNum和targetNum,要求判断先手能否 ...

  8. Hadoop学习(3)-mapreduce快速入门加yarn的安装

    mapreduce是一个运算框架,让多台机器进行并行进行运算, 他把所有的计算都分为两个阶段,一个是map阶段,一个是reduce阶段 map阶段:读取hdfs中的文件,分给多个机器上的maptask ...

  9. 从后端到前端之Vue(四)小试牛刀——真实项目的应用(树、tab、数据列表和分页)

    学以致用嘛,学了这么多,在真实项目里面怎么应用呢?带着问题去学习才是最快的学习方式.还是以前的那个项目,前后端分离,现在把前端换成vue的,暂时采用脚本化的方式,然后在尝试工程化的方式. 现在先实现功 ...

  10. 学习16内容# 1.自定义模块 # 2.time # 3.datetime # 4.random

    模块的定义与分类 模块是什么? ​ 这几天,我们进入模块的学习.在学习模块之前,我们首先要知道,什么是模块? ​ 一个函数封装一个功能,你使用的软件可能就是由n多个函数组成的(先不考虑面向对象).比如 ...