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. git分支创建与切换

    1. 场景描述 新版本迭代上线完成,为了保持当前版本稳定性及可回退等需求,需要切换新的分支用于下一版本的迭代开发. 2. 解决方案 2.1 切换前工作. 因发布上线当天有可能存在临时更改文件而未上传g ...

  2. 学习2:内容# 1.while # 2.字符串格式化 # 3.运算符 # 4.编码初始

    目录 1.while循环 2.字符串格式化 3.运算符 4.编码初始 1.while循环 while -- 关键字 (死循环) if 条件: 结果 while 条件: 循环体 while True: ...

  3. Java核心技术中的程序片段

    import java.io.*; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import ...

  4. .net持续集成cake篇之cake任务依赖、自定义配置荐及环境变量读取

    系列目录 新建一个构建任务及任务依赖关系设置 上节我们通过新建一个HelloWorld示例讲解了如何编写build.cake以及如何下载build.ps1启动文件以及如何运行.实际项目中,我们使用最多 ...

  5. Spring 动态创建并切换数据源

    公司要求后端项目可以进行动态创建并切换数据源,看了网上很多例子大多数使用的都是Spring内置的AbstractRoutingDataSource进行的,使用此方法不是不行但是有诸多缺陷,比如切换时需 ...

  6. Python入门基础(9)__面向对象编程_1

    定义一个只包含方法的类 class 类名: def 方法1(self,参数列表): pass def 方法2(self,参数列表): pass 当一个类定义之后,要使用这个类来创键对象.语法如下: 对 ...

  7. C#7.1 新增功能

    连载目录    [已更新最新开发文章,点击查看详细] C# 7.1 是 C# 语言的第一个点版本(更新版本). 它标志着该语言发布节奏的加速. 理想情况下,可以在每个新功能准备就绪时更快推出新功能.  ...

  8. C-哈夫曼编码

    /*author:windy_2*/ /*修正版*/ #include<stdio.h> #include<stdlib.h> #include<string.h> ...

  9. 【git】15分钟学会使用Git和远程代码库

    Git是个了不起但却复杂的源代码管理系统.它能支持复杂的任务,却因此经常被认为太过复杂而不适用于简单的日常工作.让我们诚实一记吧:Git是复杂的,我们不要装作它不是.但我仍然会试图教会你用(我的)基本 ...

  10. rabbitMQ_topic(五)

    主题转发器 发送到主题转发器的消息不能有任意的 routing_key - 它必须是由点分隔的单词列表.这些单词可以是任何东西,但通常它们指定与消息相关联的一些功能.几个有效的routeKey示例:“ ...