内容回顾

  • 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 Project\day30\tmp'
      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协议的自定义协议解决粘包问题

  • 验证客户端合法性

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

代码总行数3030+41=3047行

python30day的更多相关文章

随机推荐

  1. 【LeetCode】63. Unique Paths II 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/unique-pa ...

  2. 图的存储:邻接矩阵(C++)

    1. 演示 无向图: 有向网: 2. 代码 1 #include <iostream> 2 #include <unordered_map> 3 #include <ve ...

  3. 一行代码完成定时任务调度,基于Quartz的UI可视化操作组件 GZY.Quartz.MUI

    前言 之前发布过第一个版本,有兴趣的可以去看看: NET Core 基于Quartz的UI可视化操作组件 GZY.Quartz.MUI 简介 GitHub开源地址:l2999019/GZY.Quart ...

  4. Linux Cgroups详解(一)

    [转载]http://blog.chinaunix.net/uid-23253303-id-3999432.html Cgroups是什么? Cgroups是control groups的缩写,是Li ...

  5. Auto-Encoding Variational Bayes

    目录 主要内容 Encoder (损失part1) Decoder (损失part2) 伯努利分布 高斯分布 代码 Kingma D P, Welling M. Auto-Encoding Varia ...

  6. CS5213设计HDMI转VGA带音频信号输出|CS5213方案|CS5213设计电路

    CS5213是一款用于设计HDMI转VGA音视频信号转换器方案,CS5213设计HDMI转VGA转换器或者转接线产品特点: 将完整的HDMI信号转换为VGA输出支持数字信号到模似信号的转换支持 HDC ...

  7. partial write bypass PIE

    第一篇博客,请允许我水一下.BUUCTF上的一题:linkctf_2018.7_babypie 检查一下保护机制: 1 Arch: amd64-64-little 2 RELRO: Partial R ...

  8. 编写Java程序,使用JFrame创建一个窗体

    返回本章节 返回作业目录 需求说明: 使用JFrame创建一个窗体 实现思路: 使用JFrame创建窗体的思路 定义一个窗体对象f,窗体名称为"一个简单窗口" 设置窗体左上角与显示 ...

  9. 【SpringBoot】No 'Access-Control-Allow-Origin' header is present on the requested resource.

    关键字:跨域,Access-Control-Allow-Origin,转码,解码 在做一个前后端分离项目,本来前端项目都可以正常访问后端接口,跨域是这么设置的,接口可以正常访问 @Configurat ...

  10. centos6.5-nginx搭建

    一.安装nginx 1.安装相关组件 yum -y install pcre-devel zlib-devel 2.创建启动用户 useradd -M -s /sbin/nologin nginx t ...