day26总结

1.软件开发架构:

开发软件,必须开发一套 客服端 和 服务端。

客户端与服务端的作用

服务端:24小时不服按提供服务

客户端:如果想要找服务,就去寻找服务并享受。

软件开发架构为两种:

C/S架构:

​ Client:客服端

​ Server:服务端

​ 优点:软件的使用稳定,并且可以节省网络资源。

​ 缺点:

​ 1.如用户向在同一个设备上使用多个软件,必须下载多个客户端。

​ 2.软件的每一次,客户端必须跟着重新下载更新。

​ c/s构架的架构:

列如:电脑上的的qq,pycharm等...手机端(移动端)的微信,王者荣耀

​ B/S架构:

​ Browser: 浏览器(客户端)

​ Server: 服务端

​ 优点: 以浏览器充当客户端,无需用户下载多个软件,也无需用户下载更新软件版本, 直接在浏览器上访问需要使用的软件。 缺点: 消耗网络资源过大,当网络不稳定时,软件的使用也会不稳定。

​ B/S架构的软件: 例如: 在浏览器(客户端)上输入某个软件的域名(http://oldboyedu.com/)。

2.后期学习

​ 网络编程、并发编程、数据库开发 可以开发一套C/S架构的软件(防优酷系统)。 前端html、css、js,web框架(网络编程、并发编程) 可以开发一套B/S架构的软件(bbs系统)。

3.网络编程

  • 网络编程发展历史

    • 所有先进的技术都源自于军事,希望通过远程获取数据,所以出现了"网络编程"。

    • 早期如何实现远程通信:

      • 打电话 ---> 电话线

      • 纯平电脑(大屁股电脑) ---> 网线,有线网卡

      • 笔记本电脑 ---> 有线网卡、无线网卡

      • 要实现远程通信必须具备:

        1.物理连接介质 ---> 网卡....

        2.互联网协议

        ​ 人与人之间沟通的介质: 中文、英语

        ​ 计算机之间沟通的介质: "互联网协议"

4.互联网协议

​ 互联网协议又称为网络七层协议,OSI七层协议,OSI是一个世界标准组织。 OSI七层协议:

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

学习由下到上:
需要优先了解的协议一共5层:

    - 物理连接层
       基于电信号发送二进制的数据0101010111。
       010: 你  you
       101: 我  I

    - 数据链路层
        数据链路层的 "以太网协议",专门用于处理基于电信号发送二进制的数据。

        以太网协议:
            1.规定好电信号数据的分组方式。
            2.每一台连接网线的电脑都必须要由一块 "网卡"。
                - 网卡由不同厂商生产的
                    - 每块网卡都会有世界上独一无二12位的编号 "mac"地址。
                        - 前6位: 厂商号
                        - 后6位: 流水号

        - 交换机:
            可以让多台电脑连接到一起。

        基于以太网协议发送数据:
            特点:
                广播、单播

            弊端:
                广播风暴、不能跨局域网通信。

        - 互联网:
            让局域网之间进行通信。

    - 网络层
        IP地址: 用于标识唯一的一台计算机(局域网)的地址。
        IP: 点分十进制
            最小值: 0.0.0.0
            最大值: 255.255.255.255

        IPV4(了解):
            一开始用电脑的人不多,所以出现IPV4的协议版本。

        IPV6(了解):
            括号IP。

        本机IP: 回环地址 127.0.0.1 ---> localhost

    - 传输层
        TCP/UDP协议,他们都是基于端口工作的。

        - 端口号: 标识电脑上某个一个软件。

        - 端口号范围: 0-65535

        注意:
            1.操作系统中,一般0-1024的端口都被默认使用了(0-1024不要动)
            2.尽量使用8000之后的端口号 8001

        开发中常用软件的默认端口号 (默写) :
            mysql: 3306
            mongodb: 27017
            Django: 8000
            Tomcat: 8080
            Flask: 5000
            Redis: 6379
        若想服务端与客户端进行通信,必须要建立连接,产生双向通道。
            一条是客户端往服务端发送消息的。
            另一条是服务端往客户端发送消息的。

    - 应用层
        http
        ftp

总结:

​ ip:用于唯一标识某一台计算机的位置。
​ port: 端口用于确认计算机上的一个应用软件。

ip + port: 世界上某一台电脑上的一个应用软件。
  • TCP协议的工作原理:

    • TCP是一个流式协议

    • 三次握手,四次挥手(*******):

      • 三次握手建连接:
        建立双向通道,建立好连接。

        • listen: 监听
        • established: 确认请求建立连接
      • 发送数据:
        write
        read
        客户端往服务端发送数据,数据存放在内存中,需要服务端确认收到,数据才会在内存中释放掉。

        否则,会隔一段时间发送一次,让服务端返回确认收到。
        在一段时间内,若服务端还是不返回确认收到,则取消发送。并释放内存中的数据。

      • 四次挥手断连接:

        • TIME_WAIT: 时间等待

5.Socket:

1.什么是Socket?
    socket是一个模块,可以写一套C/S架构的套接字。

2.为什么要使用Socket?
    socket套接字会封装好各层协议的工作。
    好处:
        可以节省开发成本。

3.如何使用
    import socket

注意: 客户端与服务端必须尊循:
一端send,另一端recv
不同两端同时send或recv

服务端

import socket
import subprocess
server = socket.socket()
server.bind(
    ('127.0.0.1', 8088)
)
server.listen(3)  # 半连接池,可以“等待5个用户接受服务”

while True:
    # 等待客户端连接过来
    conn, addr = server.accept()
    print(addr)

    # 循环接收客户端数据
    while True:
        try:
            data = conn.recv(1024).decode('utf-8')
            res = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE)
            result = res.stdout.read()

            # mac和linux系统bug: b''
            if len(data) == 0:
                continue

            if data == 'q':
                break

            conn.send(data.encode('utf-8'))

        except Exception as e:
            print(e)
            break

    conn.close()

客户端:

import socket

client = socket.socket()

client.connect(
    ('127.0.0.1', 8088)
)

while True:
    send_msg = input('client---》server:')

    client.send(send_msg.encode('utf-8'))

    if send_msg == 'q':
        break

    data = client.recv(1024).decode('utf-8')
    print(data)

client.close()

你可能感兴趣的:(day26总结)