进程

1.软件架构

  • c/s架构
    • client客户端
    • server服务端
  • 优点:软件的使用稳定,可以节省网络资源
  • 缺点:若用户想在同一个设备上使用多个软件,必须下载多个客户端。软件的每一次更新,客户端也必须跟着更新
  • c/s架构的软件
    QQ,Pycharm

  • b/s架构
    • browser:浏览器
    • server:服务器
  • 优点:以浏览器充当客户端,无需用户下载多个软件,也无需用户下载更新软件版本。用户以浏览器充当客户端,直接在浏览器访问需要使用的软件。
  • 缺点:消耗网络资源过大,当网络不稳定的时候,网络的使用也不稳定。

2.网络编程

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

    • 物理连接介质:网卡
    • 互联网协议
      • 计算机之间沟通的介质:互联网协议
  • 互联网协议:

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

      • 物理连接层

        • 基于电信号发送二级制的数据01001001001010010
      • 数据链路层

        • 数据链路层的以太网协议,专门用于处理基于电信号的二级制数据

        • 以太网协议:

          1. 规定好电信号的数据分组方式
          2. 每一台连接网线的电脑必须要有一块网卡
            • 网卡由不同的厂商生成的
              • 每块网卡都会有世界上独一无二的12位编号
                • 前6位:厂商号
                • 后6位:流水号
        • 交换机:可以让多台电脑连接到一起。

        • 基于以太网协议发送数据

          特点:

          ​ 广播,单播

          弊端:

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

        • 互联网

          • 让局域网之间可以通信。
      • 网络层

        • IP地址:用于唯一标识计算机的地址
        • IP:点分十进制
          • 最小值:0.0.0.0
          • 最大值255.255.255.255
      • 传输层

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

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

        • 端口范围:0~65535

          • 注意

            • 操作系统中0~1024都被默认使用了。
            • 尽量使用8000之后的端口号
          • 常用软件的默认端口号

            • mysql:3306
            • mongodb:27017
            • Django:8000
            • tomcat:8080
            • Flask:5000
            • Redis:6379
          • 若想服务端与客户端进行通信,必须要建立连接,产生两条管道。

            • 一条是客户端往服务端发送消息的
            • 另一条是服务端往客户端发送消息的
          • TCP协议工作原理

            • 三次握手,四次握手
              • 三次握手建立连接
                • 建立双向通道,建立好连接
                  • listen:监听
                  • established:确认请求建立连接
                • 发送数据:
                  • wrtie
                  • read
                  • 客户端往服务端发送数据,数据存放在内存中,需要服务端确认收到,数据才会在内存中释放。否则会隔一时间发送一次,让服务端返回确认收到。在一段时间内,若服务端不返回确认收到,则取消发送。并释放内存数据
              • 四次握手断连接
                • TIME_WAIT:时间等待
      • 应用层

        • 应用层协议http,ftp
  • 总结:

    • IP:用于唯一标识某一台计算机的位置
    • port:端口用于确认计算机上的一个应用软件
    • IP+PORT:世界上某台电脑的软件

3.socket编程

  • 什么是socket:
    • socket是一个模块,可以写一套c/s架构的套接字
  • 为什么要使用socket
    • socket套接字会封装好各层协议的工作
    • 好处:可以节省开发成本
  • 如何使用socket
#服务端
# -*-coding:utf-8-*-
# Author: yqliu
# CreatDate: 2019/10/17 14:37
import socket
#默认指定TCP协议

#买了手机
server=socket.socket()

#插卡
server.bind(
    #ip+port
    ('127.0.0.1',9527)

)
#开机
server.listen(5)#半连接池
print ('服务端启动。。。。。。。。。。。')
#监听是否有消息
#conn相当于服务端往客户端挖的管道
#
conn,addr=server.accept()
print (addr)

#听客户端给我说话
data=conn.recv(1024)#1024可接收1024字节数据
print (data)
conn.send(b'hello client')

#挂掉电话
conn.close()

#关机
server.close()


***********************************************

#客户端
# -*-coding:utf-8-*-
# Author: yqliu
# CreatDate: 2019/10/17 14:37
import socket

print ('客户端开始启动。。。。。。')
#买手机
client=socket.socket()

#往服务器拨号
#client相当于客户端往服务端挖了管道
client.connect(
    ('127.0.0.1',9527)
)

#客户端发送向服务端说话
client.send(b'hello server')

data=client.recv(1024)
print (data)

#向服务端发送断开连接的请求
client.close()

#注意点,客户端与服务端必须遵循:
#一端send另一端recv,不能同时send或者recv
posted @ 2019-10-23 08:24  ztzdhbg  阅读(90)  评论(0编辑  收藏  举报