leiyu567567

内容回顾

  • 网络概念
  • 网络架构
    • C/S client - server
    • B/S brower-server
      • web服务
    • B/S 是特殊的C/S
  • 物理设备
    • 网卡 mac地址 全球唯一的物理地址
    • 交换机 完成局域网内的多台机器之间的通信
      • 单播 组播 广播
      • 只能识别mac地址
      • arp协议(地址解析协议):通过IP地址获取mac地址
        • 由交换机完成的
        • 广播 单播
    • 路由器 完成局域网与局域网之间的联系
      • 能识别IP地址
      • 网段
      • 网关ip
        • 访问局域网外部服务的一个出口ip
    • ip地址在网络上定位一台机器
      • ipv4
      • ipv6
    • port能够在网络上定位一台机器上的一个服务
      • 0-65535

今日内容

概念

  • TCP协议 ---- 打电话

    • 协议的特点:可靠、慢 全双工通信

    • 建立连接的时候:三次握手

    • 断开连接的时候:四次挥手

    • 在建立其连接之后,发送的每一条信息都有回执,为了保证数据的完整性,还有重传机制

    • 长连接:会一直占用双方的端口

    • 能够传递的数据的长度是没有限制的

    • IO(input,output)操作,输入和输出是相对内存来说的

      • write send - output
      • read recv - input

  • UDP协议 --- 发短信

    • 协议的特点:无连接的 速度快
    • 可能会丢消息
    • 能够传递的数据的长度是有限的,是根据数据传递设备的设置有关系
  • 应用场景

    • TCP 文件的上传下载(发送邮件、网盘、缓存电影)
    • UDP 即时通讯类的(qq、微信、飞秋)
  • OSI七层模型

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

    每一层的物理设备,每一层的常见协议

  • OSI五层协议 协议 物理设备

    • 应用层 http https ftp smtp

      ​ python代码 hello

    • 传输层 tcp /udp协议 端口 四层路由器 四层交换机

    • 网络层 ipv4/ipv6协议 三层路由器 三层交换机

    • 数据链路层 mac地址 arp协议 网卡、交换机 二层交换机

    • 物理层

代码部分

  1. 介绍socket(套接字)

    1. python中借助socket模块,完成soket功能

    2. 工作在应用层和传输层之间的抽象层,帮助我们完成了所有信息的组织和拼接

    3. sokcet对于程序员来说 已经是网络操作的底层了

    4. socket历史

      1. 同一台机器上的两个服务之间的通信的
        1. 基于文件
      2. 基于网络的多台机器之间的多个服务通信
  2. 使用socket完成tcp协议的web通信

    1. 练习

      ##server.py
      import socket
      
      sk = socket.socket()
      sk.bind((\'127.0.0.1\',9000))
      sk.listen()   #n
      print(\'*\'*20)
      conn,addr = sk.accept()   #阻塞
      while True:
          msg = conn.recv(1024)
          print(msg.decode(\'utf-8\'))
          inp = input(\'>>>>\')
          conn.send(inp.encode(\'utf-8\'))
      conn.close()
      sk.close()
      
      
      ##client.py
      import socket
      
      sk = socket.socket()
      sk.connect((\'127.0.0.1\',9000))
      while True:
          inp = input(\'>>>\')
          sk.send(inp.encode(\'utf-8\'))
          msg = sk.recv(1024)
          print(msg.decode(\'utf-8\'))
      sk.close()
      
      ###server.py
      import socket
      
      sk = socket.socket()
      sk.bind((\'127.0.0.1\',9000))
      sk.listen()   #n 允许多少客户端等待
      print(\'*\'*20)
      while True:  #outer
          conn,addr = sk.accept()   #阻塞
          while True: #inner
              msg = conn.recv(1024).decode(\'utf-8\')
              if msg == b\'Q\': break
              print(msg)
              inp = input(\'>>>>\')
              conn.send(inp.encode(\'utf-8\'))
              if inp.upper() == \'Q\':
                  break
          conn.close()
      sk.close()
      
      
      #想说啥说啥   input
      #想说多久说多久   while True:  #inner
      #和一个人聊完再和另一个人聊   while True:   #outer
      
      
      ###client.py
      import socket
      
      sk = socket.socket()
      sk.connect((\'127.0.0.1\',9000))
      while True:
          inp = input(\'>>>\')
          if inp.upper() == \'Q\':
              break
          sk.send(inp.encode(\'utf-8\'))
          msg = sk.recv(1024).decode(\'utf-8\')
          if msg == b\'Q\':break
          print(msg)
      sk.close()
      
  3. 使用socket完成udp协议的web通信

    ###server.py
    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)
    sk.bind((\'127.0.0.1\',9000))
    while True:
        msg,client_addr = sk.recvfrom(1024)
        print(msg.decode(\'utf-8\'))
        inp = input(\'>>>\').encode(\'utf-8\')
        sk.sendto(inp,client_addr)
    sk.close()
    
    ###client.py
    import socket
    
    sk = socket.socket(type=socket.SOCK_DGRAM)
    while True:
        inp = input(\'>>>\').encode(\'utf-8\')
        sk.sendto(inp,(\'127.0.0.1\',9000))
        ret = sk.recv(1024)
        print(ret.decode(\'utf-8\'))
    sk.close()
    

作业

1.基于TCP协议实现聊天需求
#基础需求:
    #1.server和client段连接之后,能直到对面这个人是哪一个好友
    #2.不同好友的聊天颜色不同 https://www.cnblogs.com/Eva-J/articles/8330517.html
#进阶需求:
    #多个人能同时互相聊
    
2.基于UDP协议实现聊天需求
#基础需求:
    #能随时退出
    #能实现一个人和多个人聊天
    #并且给每个人表示一个身份
    #每个身份一种颜色
#进阶需求:
    #多个人能同时互相聊
    
3.基于TCP协议实现用户登录
#基础:只能实现基础登录即可
#进阶:加入hashlib密文存储密码
#密文摘要  在server端还是client端

4.基于TCP协议完成文件上传
#基础的需求:两台机器能从一台发送给另一台
#进阶的需求:考虑大文件

分类:

技术点:

相关文章: