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服务器暂时不能执行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值