zoukankan      html  css  js  c++  java
  • day 26小结

    软件开发架构

    ​ 软件开发架构,必须要开发一套客户端与服务端

    客户端与服务端的作用

    ​ 服务端: 24小时不间断提供服务
    ​ 客户端: 如果想要找服务,就去寻找服务并享受

    软件开发架构分为两种:

    C/S架构:

    ​ Client: 客户端
    ​ Server: 服务端

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

    ​ 缺点: 1. 若用户想在同一个设备上使用多个软件,必须下载多个客户端

    ​ 2. 软件的每一次更新,客户端也必须更新下载

    C/S架构的软件:

    ​ 例如: 电脑上的QQ,Pycharm等...手机端(移动端)微信,王者

    B/S架构:

    ​ Browser: 浏览器(客户端)

    ​ Server: 服务端

    ​ 优点: 以浏览器充当客户端,无需用户下载多个软件,也无需用户下载更新软件版本,直接在浏览器上访问使用的软件

    ​ 缺点: 消耗网络资源过大,当网络不稳定时,软件的使用也会不稳定

    B/S架构的软件:

    ​ 例如: 在浏览器(客户端)输入某个软件的域名(http://xxxxxx.com/)

    网络编程

    ​ -- 网络编程发展历史

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

    ​ 早期如何实现远程通信: -- 打电话---> 电话线

    ​ -- 纯平电脑 --> 网线,有线网卡

    ​ -- 笔记本电脑 --> 无线网卡

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

    ​ 1.物理链接介质 ---> 网卡....

    ​ 2.互联网协议

    ​ -- 人与人之沟通的介质: 中文,英语

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

    互联网协议

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

    OSI七层协议:

    ​ - 应用层

    ​ - 表示层

    ​ - 会话层

    ​ - 传输层

    ​ - 网络层

    ​ - 数据链路层

    ​ - 物理连接层

    ​ 学习由下到上:

    ​ 需要优先了解的协议一共五层

    ​ - 物理连接层

    ​ 基于电信号发送二进制的数据0101010111

    ​ 010: 你 you

    ​ 101: 我 I

    - 数据链路层

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

    ​ 以太网协议:

    ​ 1. 规定好电信号的分组方式

    ​ 2. 每一台连接网线的电脑都必须要由一块"网卡"

    ​ - 网卡由不同厂商生产的

    ​ - 每块网卡都会有世界上独一无二12位编号

    ​ - 前6位: 厂商号

    ​ - 后6位: 流水号

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

    ​ 基于以太网协议发送数据:

    ​ 特点: 广播,单薄-

    ​ 弊端: 广播风暴,不能跨局域网通信

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

    网络层

    ​ IP地址: 用于唯一标识计算机(局域网)的地址.

    ​ IP: 点分十进制

    ​ 最小值: 0.0.0.0

    ​ 最大值: 255.255.255.255

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

    ​ IPV6(了解):

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

    传输层

    ​ TCP/UDP协议,他们是基于端口工作的

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

    ​ - 端口号范围: 0-65535

    ​ 注意: 1.操作系统中,一般0-1024的端口都被默认使用了(不要动)

    ​ 2.尽量使用8000之后的端口号 8001

    ​ 开发中常用软件的默认端口号:

    ​ mysql: 3306

    ​ mongdb: 27017

    ​ Django: 8000

    ​ Tomcat: 8080

    ​ Flask: 5000

    ​ Redis: 6379

    ​ 若想服务端与客户端进行通信,必须要建立链接,产生双向通道

    ​ 一条是客户端往服务端发送消息的

    ​ 另一条是服务端往客户端发送消息的

    应用层

    ​ http

    ​ ftp

    总结: IP:用于唯一标识某一台计算机的位置

    ​ port: 端口用于确认计算机上的一个应用软件

    ​ ip + port: 世界上某一台电脑上的一个应用软件

    TCP协议的工作原理

    - 三次握手,四次挥手

    ​ - 三次握手建连接:

    ​ 建立双向通道,建立好链接

    ​ listen: 监听

    ​ established: 确认请求建立连接

    ​ - 发送数据

    ​ write

    ​ read

    ​ 客户端往服务端发送数据,数据存在内存中,需要服务器确认收到,数据才会在内存中释放掉

    ​ 否则,会隔一段时间发送一次,让服务端返回确认收到

    ​ 在一段时间内,若如无段还是不返回确认收到,则取消发送,并释放内存中的数据

    ​ - 四次挥手短链接:

    ​ TIME_WITE: 时间等待

    ![](https://images.cnblogs.com/cnblogs_com/LZF-190903/1541387/o_TCP四次挥手 .jpg)

    Scoket

    ​ socket是一个模块,可以写一套C/S构架的套接字.

    ​ socket 套接字会封装好各层协议的工作

    ​ 好处: 可以节省开发成本
    ​ 用法: import socket

    # 服务端
    import socket
    
    server = socket.socket()
    
    server.bind(
        ('127.0.0.1', 9527)
    )
    
    server.listen(1)
    while True:
        conn, addr = server.accept()
    
        while True:
            print(addr)
            try:
                data = conn.recv(10).decode('utf8')
                print(data)
    
                if data == 'q':
                    break
    
                conn.send(data.encode(('utf8')))
            except Exception as e:
                print(e)
                break
    
        conn.close()
    
    
    # 客户端
    import socket
    
    client = socket.socket()
    
    client.connect(
        ('127.0.0.1', 8888)
    )
    
    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()
    
    

    注意: 客户端与服务端必须遵循:

    ​ 一端send,另一端recv
    ​ 不同两端同时send或recv

  • 相关阅读:
    vs2017中信号与槽连接
    生成格雷码
    结构光三维测量技术
    格雷码生成算法
    结构光三维重建
    Qt之CMake和MinGW编译OpenCV
    qt+opencv编译环境的配置
    vs2017+opencv配置参考链接
    2019-3-25多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量)
    2019-3-22c# TextBox只允许输入数字,禁用右键粘贴,允许Ctrl+v粘贴数字
  • 原文地址:https://www.cnblogs.com/LZF-190903/p/11695650.html
Copyright © 2011-2022 走看看