zoukankan      html  css  js  c++  java
  • python30day

    内容回顾

    • tcp协议的多人多次通信

      • 和一个人通信多说句话
      • 和一个人聊完再和其他人聊
      • bind 绑定一个id和端口
      • socket()tcp协议的server
      • listen 监听,代表socket服务的开启
      • accept 和客户端建立连接的过程
      • send 直接通过连接发送消息,不需要地址
      • recv 只接收消息
      • connect 客户端、tcp协议的方法,和server端建立连接
      • close 关闭服务、连接
    • udp协议的多人通信

      • socket(type=socket.SOCK_DGRAM)
      • sendto 需要写一个对方的地址
      • recvfrom 接收消息和地址
      • close 关闭服务、连接
    • 每句话什么意思?执行到哪程序等待、阻塞、结束阻塞?

      • input() 等待
      • accept 阻塞,有客户端来和我建立连接就结束阻塞
      • recv 阻塞,直到收到对方发来的消息结束阻塞
      • recvfrom 阻塞
      • connect 阻塞,直到server端结束了对一个client的服务,开始和当前client建立连接的时候结束阻塞
    • 粘包现象

      • 什么是粘包
        • 两条或更多条分开发送的信息连在一起
      • 发生在发送端:发送间隔短,数据小,由于优化机制就合并在一起发送了
      • 发送在接收端:接收不及时,所以数据就在接收方的缓存端黏在一起了
      • 粘包发生的本质:tcp协议的传输是流式传输,数据与数据之间没有边界
      • 怎么解决粘包:自定义协议 struct模块
        • 发送端
          • 先发送四字节的数据长度
          • 再按照长度发送数据
        • 接收端
          • 先接受四字节 知道数据长度
          • 再按照长度接收数据
    • tcp文件传输

      • import socket
        import json
        #接收
        sk=socket.socket() #创建套接字
        sk.bind(('127.0.0.1',9000)) #绑定端口
        sk.listen()
        
        conn,_=sk.accept()
        msg=conn.recv(1024).decode('utf-8')
        print(msg)
        msg=json.loads(msg)
        
        with open(msg['filename'],'wb')as f:
            content=conn.recv(msg['filesize'])
            print('---->',len(content))
            f.write(content)
        
        
        conn.close()
        sk.close()
        
        import socket
        import os
        import json
        # 发送
        sk=socket.socket() #创建套接字
        sk.connect(('127.0.0.1',9000))
        
        # 文件名、文件大小
        abs_path=r'E:Py Projectday30	mp'
        filename=os.path.basename(abs_path)
        filesize=os.path.getsize(abs_path)
        dic={'filename':filename,'filesize':filesize}
        str_dic=json.dumps(dic)
        sk.send(str_dic.encode('utf-8'))
        
        
        with open(abs_path,mode='rb') as f:
            content=f.read()
            sk.send(content)
        
        sk.close()
        

    今日内容

    • tcp协议的自定义协议解决粘包问题

    • 验证客户端合法性

      • image-20200713123822700
    • 并发的tcp协议server端---socketserver

      • image-20200713124302538

    代码总行数3030+41=3047行

  • 相关阅读:
    Digital Video Stabilization and Rolling Shutter Correction using Gyroscope 论文笔记
    Distortion-Free Wide-Angle Portraits on Camera Phones 论文笔记
    Panorama Stitching on Mobile
    Natural Image Stitching with the Global Similarity Prior 论文笔记 (三)
    Natural Image Stitching with the Global Similarity Prior 论文笔记(二)
    Natural Image Stitching with the Global Similarity Prior 论文笔记(一)
    ADCensus Stereo Matching 笔记
    Efficient Large-Scale Stereo Matching论文解析
    Setting up caffe on Ubuntu
    Kubernetes配置Secret访问Harbor私有镜像仓库
  • 原文地址:https://www.cnblogs.com/CodeForWorld/p/13292660.html
Copyright © 2011-2022 走看看