python 网络编程 二

目录:

python 网络编程 二

tcp粘包

  1. 产生原因:
    tcp传输中以字节流的方式发送内容,发送的消息之间没有明显的边界,此时如果发送和接收速度不匹配就会产生粘包

  2. 影响 : 如果每次发送的内容表示一个独立的意思此时可能需要处理粘包。如果发送的内容本身就是连续的整体,此时不需要处理粘包

  3. 如何处理:
    1.每次发送后加一个结尾标志
    2.发送一个数据结构
    3.每次发送中间有一个短暂的延迟

基于udp的服务端

  1. 创建套接字 —》 数据报套接字
    sockfd = socket(AF_INET,SOCK_DGRAM)
  2. 绑定服务端地址
    sockfd.bind()
  3. 消息的收发
    1. 接受
      1. 格式:data,addr = recvfrom(buffersize)
      2. 功能 : 接收UDP消息
      3. 参数 : 每次最多接收消息的大小
      4. 返回值 : 接收到的内容
        接收到的消息的发送者
      5. 注意: recvfrom 一次接收一个数据包,如果数据包超出了一次能够接收的大小则会丢失没有收到的内容
    2. 发送
      1. 格式sendto(data,addr)
      2. 功能 : udp发送消息
      3. 参数 : data 要发送的内容 bytes
        addr 消息要发送给谁
      4. 返回值 : 发送的字节

4.关闭套接字
sockfd.close()

  1. sys.argv
    1. 功能 : 获取来自命令行的参数,形成一个列表
    2. argv[0]是命令本身 其他内容默认以空格分割放到列表中

tcp流式套接字和udp数据报套接字使用区别

  1. 流式套接字采用字节流的方式传输,而数据报套接字以数据包形式传输
  2. tcp会产生粘包现象,udp不会
  3. tcp编程保证传输的可靠性,udp则不保证
  4. tcp需要listren accept ,udp不需要
  5. tcp使用recv send进行消息收发,udp使用recvfrom和sendto

  6. 补充:

    1. 格式:sendall()
    2. 功能参数: 同send
    3. 返回值 : 发送成功返回None 发送失败返回异常

socket 方法:

  1. s.fileno() #(s表示一个套接字对象)

    1. 功能 : 获取套接字的文件描述符
    2. 文件描述符 :每一个IO 事件操作系统都会分配一个不同的正数与之匹配,该正数即为此IO操作的文件描述符
    3. sys.stdin 0
    4. sys.stdout 1
    5. sys.stderr 2
  2. s.type : 获取套接字类型

  3. s.family: 地址类型

  4. s.getsockname()

    1. 功能 : 获取套接字绑定的地址
  5. s.getpeername()
    1. 功能 : 用户连接套接字,获取连接端的地址
  6. s.setsockopt(level,optname,value)
    1. 功能 : 设置套接字选项 丰富修改原有套接字功能
    2. 参数: level : 设置选项的类型
      IPPROTP_TCP IPPROTO_IP
      SOL_SOCKET
      optname: 选项类型中的子选项
      value : 为选定的选项设置值

s.getsockopt(level,optname)
功能 : 获取套接字选项值
参数: level : 获取选项的类型
IPPROTP_TCP IPPROTO_IP
SOL_SOCKET
optname: 选项类型中的子选项
返回值 : 获取到的值

udp套接字应用之广播

  1. 一点发送多点接收
    目标地址 :广播地址 一个网段内最大的地址
    172.60.50.255

  2. format()

    1. 功能 : 字符串属性函数 用来组合字符串
    2. 广播风暴:占用大量的带宽造成网络拥塞

tcp应用之 http传输

  1. HTTP协议 —》 超文本传输协议
  2. 用途 : 编写基于http协议的数据传输程序
    网站中浏览器端获取网页的过程
    将想要获取的内容,以http协议的格式发送给服务端,服务端根据格式进行解析获取到真实需求,将结果以http协议的格式回复给客户端

  3. 特点 :

    1. 应用层协议 ,传输层使用tcp服务
    2. 简单,灵活,和多中语言对接方便
    3. 无状态的协议 即不记录用户使用过程中传递的内容
    4. http1.1 支持持久连接

http请求 (Request)

  1. 请求格式:

    1. 请求行 具体的请求类别
      GET / HTTP/1.1
      请求种类 请求内容 协议版本

    2. 请求头 对请求新的的具体描述
      Accept: text/html
      以键值对的格式对信息进行具体描述

    3. 空行

    4. 请求体 具体的请求参数或者提交内容
  2. 请求类型:

    请求名 作用
    GET 获取网络资源
    POST 提交一定的附加数据,得到返回结果
    HEAD 获取响应头
    PUT 更新服务器资源
    DELETE 删除服务器次元
    CONNECT
    TRACE 用于测试
    OPTIONS 获取服务器性能(跨域先会发一次,简称:嗅探)

HTTP响应 (Response)

  1. 响应格式:

    1. 响应行 反馈具体的响应情况
      HTTP/1.1 200 OK
      版本 响应码 附加信息

    2. 响应头 对响应的具体描述
      Accept-Ranges: bytes
      以键值对方式给出响应信息的具体描述

    3. 空行

    4. 响应体 将客户想要的内容进行返回
  2. 响应码种类

响应码 作用
1xx 提示信息,表示请求已经接受
2xx 响应成功
3xx 响应需要重定向
4xx 客户端错误
5xx 服务端错误
200 成功
404 请求内容不存在
401 没有访问权限
500 服务器发生未知错误
503 服务器暂时不能执行

猜你喜欢

转载自blog.csdn.net/luohongtucsdn/article/details/81019590