python 网络编程 day02

本文介绍了Python网络编程的基础,包括TCP粘包现象、UDP服务端编程、套接字属性以及HTTP协议的请求和响应。讨论了TCP与UDP的区别,如TCP的可靠性、粘包处理,而UDP的无连接性。并提供了简单的TCP UDP服务端和客户端示例,以及HTTP请求和响应的格式。
摘要由CSDN通过智能技术生成

2018.8.7

目录

tcp粘包

基于udp的服务端编程

socket模块和套接字属性

udp套接字应用---》广播

tcp应用--》http传输:

http请求(Request)

http响应(response)


day01回顾

1,osi七层模型---》四层  五层

2,三次握手,四次挥手 

3,tcp和udp区别

网络概念:主机  端口  ip  协议

  • 服务端:localhost / 127.0.0.1
  • 客户端:只是在本机启动客户端 用127.0.0.1访问

 

  • 服务端:0.0.0.0
  • 客户端:可以在本机用127.0.0.1、172.60.50.181访问,
                   局域网内用 172.60.50.181

 

  • 服务端:172.60.50.181
  • 客户端:局域网内用 172.60.50.181访问

套接字 socket

  • 流式套接字 --》 tcp 可靠地 有连接
  • 数据报套接字 --》udp  不可靠  无连接

tcp服务端

socket --> bind --> listen --> accept --> recv/send -->close


day02

recv() 特征

  • *如果连接的另一端断开连接,则recv立即返回空字符串
  • recv是从接受缓冲区取出内容,当缓冲区为空则阻塞
  • recv如果一次接受不完缓冲区内容,下次会继续接收

send() 特征

  • *如果发送的另外一段不存在则会产生pipe Broken
  • recv是向发送缓冲区发送内容,当缓冲区为满阻塞

网络收发缓冲区

  • 在内存中开辟的区域,用作发送和接受的缓冲
  • 协调数据的收发(接受和处理)速度
  • 减少和磁盘的交互

sendall(data)

  • 功能:tcp套接字发送消息
  • 参数:同send
  • 返回值:如果发送成功返回None

tcp粘包

  1. 产生原因:
    tcp传输以字节流的方式发送消息,消息之间没有边界
    发送比接收的速度快,此时如果发送和接收速度不匹配就会产生粘包
  2. 影响:对每次发送的内容是一个独立的意思需要单独识别,如果发送的内容本身就是连续的整体,此时不需要处理粘包
  3. 如何处理
    1,每次发送后加一个结尾标志
    2,发送一个数据结构
    3,每次发送有一个间隔

基于udp的服务端编程

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

    服务器:

    #utip.py
    
    from socket import *
    
    HOST = '0.0.0.0'
    PORT = 8888
    ADDR = (HOST,PORT)
    
    #创建套接字
    sockfd = socket(AF_INET,SOCK_DGRAM)
    
    #绑定地址
    sockfd.bind(ADDR)
    
    #消息收发
    while True:
        data,addr = sockfd.recvfrom(1024)
        print('Receive from %
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值