软件开发架构,软件开发架构为两种,后期学习,网络编程,互联网协议,Socket模块。

1.软件开发架构:

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

客户端与服务端的作用

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

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

软件开发架构为两种:

C/S架构:

Client:客服端

Server:服务端

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

缺点:

		1.如用户向在同一个设备上使用多个软件,必须下载多个客户端。
		 安装麻烦,用户体验差

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

c/s构架的架构:

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

B/S架构

B/S架构:
                Browser(本质上也是一个客户端): 浏览器
                Server: 服务端

                比如: 在浏览器上输入一个 网址

                优点:
                    - 软件的使用方便
                    - 无需跟着软件的更新去下载

                缺点:
                    - 如果网络不稳定,软件的使用就不稳定

            # 比较流行: B/S架构,用户体验高。

客户端与服务端:
服务端: 24小时不间断提供服务。 (比如: 惠州淡水区某一个美丽的场所是一个服务端,可以提供服务)
客户端: 客户想要找服务时,就去访问服务端。  (比如: hcy去寻求心灵辅导,比如学习英文!)

客户端与服务端:

服务端: 24小时不间断提供服务。 (比如: 惠州淡水区某一个美丽的场所是一个服务端,可以提供服务)
客户端: 客户想要找服务时,就去访问服务端。  (比如: hcy去寻求心灵辅导,比如学习英文!)

2.后期学习

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

3.网络编程

网络编程发展历史

- 所有最新最牛的技术,都源自于军事:
       - 可以远程实时获取数据,实现远程通信

- 如何实现远程通信: ----》 物理连接介质
        - 电话: ---> 电话线
        - 纯屏电脑(大屁股电脑): ---> 网线
        - 笔记本电脑: ---> 网线、网卡

- 电脑与电脑通信: ----> “互联网协议”
        让所有产商的电脑都遵循这套协议,实现所有电脑之间无障碍通信。
        “互联网协议” 是计算机界的 中文、英文、粤语。

2.互联网协议

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

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

4.互联网协议

互联网协议又称为网络七层协议,OSI七层协议,OSI是一个世界标准组织。    OSI七层协议:       
  • 应用层
  • 表示层
  • 会话层
  • 传输层
  • 网络层
  • 数据链路层
  • 物理连接层

学习由下到上:
此时需要关注的是5层: 由下到上记

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

- 1)物理层:

- 获取到对象计算机的电信号数据
0101010111
010: 你
1011: 爱
101: 我

问题: 无法获取具体数据内容,将电信号数据扔给数据链路层

2)数据链路层:

- 我要知道数据是什么?
- 我要知道数据是给谁的?

- “以太网协议”:
	1)规定一套分组的方式:
          获取电信号真实数据。

           电信号是一个数据包。

            head: 18个字节
            - 6: 发送者
            - 6: 接收者
            - 6: 数据类型

            data:
                - 电信号具体的数据
     2) 每一台电脑必须要有一个网卡(电脑插入网线的地方):
                        - 每一块网卡都会有一串世界上独一无二的数字:
                            - 12位16进制的数字,称之为 "mac地址" :
                                - 前6位: 产商号
                                - 后6位: 流水号

                 mac地址作用(*******):
                    标识全世界上一台独一无二的计算机。
   “以太网协议”:
       - 工作的方式:
          - 单播:
             - 广播:

             缺点:
                - 广播风暴
                - 只能在局域网内实现通信, 无法跨局域实现通信
        总结:
            - mac地址: 标识全世界上一台独一无二的计算机。

3) 网络层:

- 实现全世界某一台计算之间的通信

      - ip地址(ip协议):
          - 点分十进制的数字组成
                - 180.101.49.11
                - 最小范围: 0.0.0.0
                - 最小范围: 255.255.255.255

           - ip的版本:
                 - IPV4:
                 - IPV6:

           - ip的作用:(*******)
                 用于表示全世界某一台计算机的位置,局域网的位置。
            总结:
                ip地址 + mac地址:(*******)
                 标识全世界某一个局域网内的,某一台计算机。

4) 传输层:

tcp与udp都是基于 “端口” 实现通信的。
    - TCP协议:
    - UDP协议:

 主要是软件与软件之间进行通信。

    - port端口:
用于标识计算机中某一个独一无二软件。

总结:
   mac地址 + ip地址 + port端口:
   标识的是全世界范围内某一个局域网内某一台计算机上的某一个软件。

5)应用层:

 - 大佬们定制好的一套牛X的协议
         - 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()

原文地址:https://www.cnblogs.com/WQ577098649/p/11695444.html