网络编程

Posted xuzhaolong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程相关的知识,希望对你有一定的参考价值。

import json
from datetime import datetime,date

不能直接序列化       因为字典里面不全是字符串

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

res = 'c1':str(datetime.today()),'c2':str(date.today())  # 手动转成子符传
print(json.dumps(res))    #  "c1": "2019-08-06 20:57:04.649601", "c2": "2019-08-06"

NX  方法

json.JSONEncoder
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架构

c:客户端 clienf

s:服务端 srever

b/s结构

b:浏览器 browser

s:服务器 server

? ps bs结构本质也是cs结构
? 手机端看上去cs结构比较火,实际上bs已经在崛起
? 微信支付宝都在做一件事 : 统一接口
? 手机端之后肯定也是bs比较火

服务端: 24小时不间断提供服务

客户端:什么时候想体验服务,就去找心仪的服务端去寻求服务

学习网络编程 就可以开发一个cs架构的软件
并发 数据 前端 django 就可以开发一个bs架构的软件

网络编程的发展史

? 任何先进的技术最早都来源于军事

回到过去

1 早期的电话 电话线 和中介

2 大屁股电脑 网线

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

要想实现远程通信第一个需要具备的条件是: 物理连接介质
人要想实现无障碍交流必须说统一的语言 >>>>> 就出现了统一的语言 英语
计算机之间要想实现远程通信 除了有物理介质之外还需要有一套公共的标准/协议

OSI协议

OSI七层协议

应用层

表示层

会话层

传输层

网络层

数据链路控制

物理连接层

OSI五层协议

应用层

传输层

网络层

数据链路层

物理连接层

  1. 物理连接层
    基于电型号传输01010101010二进制数据

  2. 数据链路层

    1. 规定了电信号的分组方式
    2. 规定了任何一台接入互联网的计算机都必须有一块网卡
      每一块网卡上面都刻有世界上独一无二的编号

    ? 编号 规则 12位16进制数

    ? 前6位是厂商编号

    ? 后六位是流水线编号

    ? 我们管这12位数叫mac地址(类似于我们的身份证号)

    ? ps 以上连点合称为"以太网协议"

    交换机

    基于以太网协议通信
    不能跨局域网通信

    互联网室友N多个局域网彼此之间连接而成的

  3. 网络层

    1. IP协议

    2. 规定了只要是介入互联网的计算机都比西有一个IP地址

    3. IP地址特点:点分十进制

    4. ip地址最小 0.0.0.0

      ip地址最大 255.255.255.255

    5. IP地址目前有两个版本 IPV4 IPV6(由于IPV4已经不够表示目前存在的计算机了 所以推出了IPV6)

    6. ip地址是动态分配的

    路由器 实现局域网之间的互联

  4. 传输层

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

    2. 端口(port)

      1. 端口 作用 同来唯一标识一台计算机上的某个应用程序

        1. 端口号范围 0 - 65535

        2. 注意 通常 0-1024 都是操作系统默认使用的端口号

        3. 建议 使用8000之后的端口

          1. 常用软件 端口号

            mysql默认端口 3306

            Redis默认端口 6379

            django默认端口 8000

            flask默认端口 5000

          2. 一台机器的端口号是动态分配的

            第一次使用QQ分配到的端口号 是8989 将QQ关闭关闭再启动端口号可能就变了

    3. 计算机之间的通信其实就是计算机上的应用程序之间的通信

    4. 总结

      1. ip地址 用来唯一标识介入互联网的一台计算机

      2. port端口 用来唯一标识一台计算机上的应用程序

      3. ip + port 唯一表示接入互联网一台计算机上的某个应用程序

  5. 应用层

    1. HTTP协议

    2. FTP协议

TCP协议

? 流式协议 可靠协议
? 基于TCP协议通信 必选先建立双向通道

? TCP协议传输数据之所以可靠的原因就在于有双向通道???? 不对的
? 对方说了东西后必须得到反馈 否则一段时间内会一直发 还不回复 他会默认认为你宕机了

  1. 三次握手 四次挥手
    1. 三次握手建连接
    2. 四次挥手断连接

以上是关于网络编程的主要内容,如果未能解决你的问题,请参考以下文章

Linux高级网络编程系列教程

Linux高级网络编程系列教程

面向对象编程面向组件编程面向方面编程面向服务编程

编程范式:命令式编程(Imperative)声明式编程(Declarative)和函数式编程(Functional)

少儿编程教育未来前景如何?我想加入少儿编程这行。

TCP/IP网络编程——理解网络编程和套接字编程