代码改变世界

上海 day27-- 网络编程基础

2019-08-06 20:52  在上海的日子里  阅读(278)  评论(0编辑  收藏  举报

目  录

 

一、Json 序列化功能扩展

 

import json
from datetime import datetime, date

# print(datetime.today())
# print(date.today())

res = {'c1':datetime.today(), 'c2':date.today()}
print(json.dumps(res))

'''
 Object of type 'datetime' is not JSON serializable
 原因:虽然字典可以被json序列化,但是字典里的元素不是列表或字典等可序列化的数据类型,所以报错!
 解决方法:1 将datetime.today() 和 date.today() 强制转化为可序列化类型
           2 继承json.JSONEncoder 并修改成可以序列化 datetime.today()  date.today()
'''
问题引出
import json
from datetime import datetime,date

# print(datetime.today())
# print(date.today())
"""
TypeError: Object of type 'datetime' is not JSON serializable
"""


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))
解决方案

 

二、软件开发架构

软件开发架构有两种方式:C/S  和 B/S

C/S架构 :就是客户端和服务端    (Client/Server)

B/S架构 :   就是浏览器和服务器      (Browser / Server)

PS:    B/S 架构的本质也就是 C/S架构

题外:

看上去像手机客户端,应用程序等 C/S 架构比较火,但是 B/S 在崛起

微信、支付宝都在做一件事:统一用户接口

手机客户端之后 B/S 也会发展起来

什么是服务端和客户端?

通俗解释:服务端:24小时不间断服务,随时响应客户端的需求

     客户端:有需求的时候才会去响应的服务端寻找服务

 

三、网络编程发展史

举例:过去的例子

早期的电话        电话线连接

早期的电脑        网线

笔记本电脑、无线电话        网卡

正题:

计算机与计算机之间能够实现远程通信第一个要具备的条件就是:物理连接介质

计算机与计算机之间要想真正实现远程通讯除了要具备物理连接介质还需要一套公共的标准 / 协议

 

四、OSI协议

OSI 七层协议:

应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

 

OSI 五层协议:

应用层、传输层、网络层、数据链路层、物理层

 

1、物理连接层

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

2、数据链路层

(1)规定了电信号的分组方式

(2)规定连入互联网的每一台计算机都需要有一块网卡

  该网卡有唯一的编号,用 12位 16进制数来表示,前6位是厂商编号,后6位是流水线编号。

  这12位数叫做 ‘mac’地址。

以上(1)(2)合称为“以太网协议“

(3)以太网通信的特点:

  a  不能跨局域网通信

  b 局域网内通信用广播的形式

 

交换机和路由器:

3、网络层

IP协议:规定连接互联网的每一台计算机都必须有一个IP地址,且IP 地址是动态分配的。

"""
ip地址特点:点分十进制
ip地址最小:0.0.0.0
ip地址最大:255.255.255.255
ip地址目前有两个版本:IPV4  IPV6(由于IPV4已经不够表示目前存在的计算机了 所以推出了IPV6版本)

"""

4、传输层

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

端口(port):

用来唯一标识一台计算机上的某个应用程序。

计算机与计算机之间的通信实质是两台计算机上应用程序之间的通信。

"""
端口号的范围:0~65535
注意:0~1024这些都是操作系统默认使用的端口号
建议:使用8000之后的端口
MySQL默认端口:3306
Redis默认端口:6379
django默认端口:8000
flask默认端口:5000

"""

总结:

IP地址: 用来唯一标识一台接入互联网的计算机

端口:用来唯一标识一天计算机上的应用程序

IP + 端口:唯一标识接入互联网的计算机上的某个应用程序。

5、应用层

HTTP 协议     FTP协议      (Django框架的时候讲)

五、TCP协议

TCP 协议是流式协议、可靠协议。

基于TCP 协议通信必须先建立双向通道。

面试题!

有人说TCP 是可靠的协议是因为它的双向通道,对吗?

答:不对!TCP协议是可靠的协议是因为它的反馈机制!

什么是三次握手、四次挥手?

答:

三次握手是建连接

 

四次挥手是断连接