8.6 day27 网络编程 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架构的软件
网络编程的发展史
任何先进的技术最早都来源于军事
回到过去
- 早期的电话 电话线
- 大屁股电脑 网线
- 笔记本电脑 无线电话
要想实现远程第一个需要的是:物理连接介质
人要想实现无障碍交流必须说统一的语言
>>> 英文
计算机与计算机之间要想实现远程通信除了有物理连接介质之外还需要
>>> 一套公共的标准/协议
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协议的更多相关文章
- Day09: socket网络编程-OSI七层协议,tcp/udp套接字,tcp粘包问题,socketserver
今日内容:socket网络编程 1.OSI七层协议 2.基于tcp协议的套接字通信 3.模拟ssh远程执行命令 4.tcp的粘包问题及解决方案 5.基于udp协议的套接字 ...
- python网络编程-OSI七层模型详解
OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输 . 完成中继功能的节点通常称为中继系统.在OSI七层模型中,处于 ...
- 网络编程-osi七层
一.操作系统基础 操作系统:(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才 ...
- Java网络编程:OSI七层模型和TCP/IP模型介绍
OSI(Open System Interconnection),开放式系统互联参考模型 .是一个逻辑上的定义,一个规范,它把网络协议从逻辑上分为了7层.每一层都有相关.相对应的物理设备,比如常规的路 ...
- CSIC_716_20191204【网络编程 OSI 七层结构】
软件开发架构 C/S架构: Client: 客户端 Server: 服务端 比如: 微信客户端.QQ客户端等... 优点: - 软件的使用稳定 - 节省网络资源 缺点: - 安装麻烦,用户体验差 - ...
- Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手)
Python进阶----网络通信基础 ,OSI七层协议() ,UDP和TCP的区别 , TCP/IP协议(三次握手,四次挥手) 一丶CS/BS 架构 C/S: 客户端/服务器 定义: ...
- OSI七层参考模型每一层都有哪些协议
OSI七层参考模型每一层都有哪些协议 第七层应用层 协议:DHCP • DNS • FTP • Gopher • HTTP • IMAP4 • IRC • NNTP • XMPP • POP3 • S ...
- [网络编程之客户端/服务器架构,互联网通信协议,TCP协议]
[网络编程之客户端/服务器架构,互联网通信协议,TCP协议] 引子 网络编程 客户端/服务器架构 互联网通信协议 互联网的本质就是一系列的网络协议 OSI七层协议 tcp/ip五层模型 客户端/服务器 ...
- 软件开发架构与网络之OSI七层协议(五层)
本期内容概要 python回顾 软件开发架构 网络理论前瞻 osi七层协议(五层) 以太网协议 IP协议 port协议 交换机 路由器 局域网 广域网 TCP协议 三次握手 四次挥手 UDP协议 内容 ...
随机推荐
- 如何进行高效的源码阅读:以Spring Cache扩展为例带你搞清楚
摘要 日常开发中,需要用到各种各样的框架来实现API.系统的构建.作为程序员,除了会使用框架还必须要了解框架工作的原理.这样可以便于我们排查问题,和自定义的扩展.那么如何去学习框架呢.通常我们通过阅读 ...
- Java编程思想:I/O的典型使用方式
import java.io.*; public class Test { public static void main(String[] args) { // BufferedInputFile. ...
- ISTQB TA - 边界值分析中三值测试法的注意事项
三值测试法的定义(中文版20150601大纲): 取一个不超过边界.一个在边界上.一个超过边界的值. 这三个值其实还有另外一种叫法,分别是内点.上点和离点. 内点:不超过边界的点 上点:在边界上的点 ...
- [原创]Rsync搭建和使用
rsync服务的搭建和使用 ***下载安装: #wget https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz #tar -zxvf ...
- David与Vincent的博弈游戏[树型DP]
\(\mathcal{Description}\) \(\mathcal{Solution}\) 根据题意,我们知道 根节点深度为1,深度为 奇数 的节点由\(David\)移动,我们称为\(D\)点 ...
- C#4.0新增功能04 嵌入的互操作类型
连载目录 [已更新最新开发文章,点击查看详细] 从 .NET Framework 4 开始,公共语言运行时支持将 COM 类型的类型信息直接嵌入到托管程序集中,而不要求托管程序集从互操作程序集中 ...
- md文档的书写《三》
markdown语法 官网 这是标题 "#加空格" 是标题,通常可以设置六级标题. 内容下 空格是换行 列表 无序列表:使用" - + * "任何一种加空格都可 ...
- Python 学习笔记(1)Python容器:列表、元组、字典与集合
Python容器:列表.元组.字典与集合 列表: 1.列表 的创建 使用[ ] 或者 list()创建列表:empty_list = [ ] 或者 empty_list= list() 使用list( ...
- linux初学者-系统日志(一)
linux初学者-系统日志(一) 系统日志可以记录系统的运行状态,如果运行故障,会说明错误的位置.所以对系统日志的了解和学习是非常有必要的. 1.系统日志的默认分类 系统日志会默认记录在以下地址中,不 ...
- JAVA-注解(2)-自定义注解及反射注解
自定义注解开发 1.开发一个注解类 开发一个注解类的过程,非常类似于开发一个接口,只不过需要通过@interface关键字来声明 2.使用元注解修饰注解的声明 所谓的原注解是用来修饰注解声明的注释,可 ...