date和datetime区别是什么?
date 就是年月日
datetime就是年月时时分秒
以下代码为什么会报错?
import json
from datetime import datetime,day())
day())
"""
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':day(),'c2':day()}
print(json.dumps(res,cls=MyJson))# {"c1": "2019-08-06 20:38:50", "c2": "2019-08-06"}
重写过的default方法不仅能使json处理dat()和day()
还能控制指定输出的形式
c: 客户端
s: 服务器
b: 浏览器
s: 服务器
ps:b/s架构本质也是c/s架构
手机端看上去c/s架构( 即客户端装在手机上 )比较火,实际上b/s( 即手机端的APP相当于一个浏览器,服务都在网页上 )已经在崛起。
微信支付宝都在做一件事:统一接口
可以预见的是,手机端之后肯定也是b/s比较火。
服务端和客户端的特点?
服务端:24小时不间断提供服务
客户端:什么时候想体验服务,就去找相应的服务端去请求服务
学习网络编程的用处,以及开发一个b/s架构的软件需要什么?
学习网络编程 就可以开发一个c/s架构的软件
并发,数据库,前端,Django 就可以开发一个b/s架构的软件
任何先进的技术最早都来源于军事
回到过去
要想实现远程第一个需要的是:物理连接介质
人要想实现无障碍交流必须说统一的语言
>>> 英文
计算机与计算机之间要想实现远程通信除了有物理连接介质之外还需要
>>> 一套公共的标准/协议
应表会传网数物
应用层
表示层
会话层
传输层
网络层
数据链路层
物理连接层
Osi五层协议
应用层
传输层
网络层
数据链路层
物理连接层
基于电信号传输010101二进制数据
a. 规定了电信号的分组方式
b. 任何一台接入互联网的计算机都必须有一块网卡
每一块网卡都刻有世界上独一无二的编号
12位16进制数
前6位厂商编号
后6位流水线编号
这12位数叫mac地址
ps: 以上a,b两点合称为“以太网协议”
交换机
基于以太网协议通信
不能跨局域网通信
IP协议
规定了只要是接入互联网的计算机都必须有一个IP地址
ip地址特点:点分十进制
ip地址最小:0.0.0.0
ip地址最大:255.255.255.255
ip地址目前有两个版本:IPV4
IPV6
(由于IPV4已经不够表示目前存在的计算机了所以推出了IPV6版本)
IP地址是动态分配的
TCPUDP都是基于端口工作的协议
端口(port)
计算机与计算机之间其实是计算机上的应用程序与应用程序之间的通信
端口:用来唯一标识一台计算机上的某个应用程序
端口号的范围:0~65535
注意:0~1024这些都是操作系统默认使用的端口号
建议:使用8000之后的端口
MySQL默认端口:3306
Redis默认端口:6379
django默认端口:8000
flask默认端口:5000
端口号是动态分配的随机分配的
第一次起qq分配到的是8989
将qq关闭再次启动端口号可能就变了
总结
ip地址
:用来唯一标识接入互联网的一台计算机port端口
:用来唯一标识一台计算机上的某个应用程序ip+port
:唯一标识接入互联网一台计算机上的某个应用程序
HTTP协议
FTP协议
流式协议,可靠协议
基于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.根据文件路径获取文件大小size()6.定义一个发送给服务端的字典{"file_name":用户选择的文件名,"file_size":文件大小,...额外键值对消息}7.制作字典的报头序列化 编码8.发送字典的报头9.发送字典数据10.发文件文件操作 一行行读取并发送
转载于:.html
本文发布于:2024-01-29 01:27:27,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170646285011729.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |