Python网络编程(socket模块、缓冲区、http协议)

本文涉及的产品
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 1个月
简介: Python网络编程


网络的概念:主机   端口  IP  协议
  •           服务器:
  •       localhost/127.0.0.1
  •   客户端:
  •       只是在本机启动客户端,用127.0.0.1访问


  •   服务器:
  •       0.0.0.0
  •   客户端:
  •       可以在本机用127.0.0.1、192.168.0.1

  •   服务器:
  •       192.168.0.1
  •   客户端:
  •       局域网内用192.168.0.1


socket(创建套接字) ---> bind(绑定地址) ---> listen(设置监听)---> accept(等待链接) ---> recv/send(收/发消息) ---> close ()



收发函数特性:
      recv特征:
  1. 如果建立的另一端链接被断开, 则recv立即返回空字符串
  2. recv接受缓冲区取出内容,当缓冲区为空则阻塞
  3. recv如果一次接受不完缓冲区的内容下次执行会自动接受
      send特征:
  1.         如果发送的另一端不存在则会产生Pipe Broken异常
  2. send发送缓冲区发送内容,缓冲为满则堵塞

网络的收发缓存区:
    在内存中开辟区域,用于 发送和接受的缓冲
    作用:
  1.         协调数据的收发(接受和处理速度
  2.         减少磁盘的交互
sendall(date):
   功能: tcp套接字发送消息
   参数:同 send
   返回值:如果 发送成功返回None    否则返回异常


tcp粘包:
    产生原因:
        1. tcp传输以 字节流的方式 发送消息, 消息之间没有边界
2.发送比 接受的速度快
   影响:
        对每次发送的内容是一个独立的意识需要单独识别时 容易使用原文件被更改
   如何处理:
        1.每次发送后 追加一个结尾标志,代表本次发送完毕
2. 发送一个 数据结构
3. 每次发送有一个 时间间隔

基于udp的服务端编程:
    1.创建套接字:
        sockfd = socket(AF_INET,SOCK_DGRAM)
    2.绑定地址:
        sockfd.bind()
    3.消息收发
        data, addr = sockfd. recvfrom(buffersize)
         功能:接受udp消息
参数:接受消息的大小
返回值:
      data 接受到的内容
      addr 消息发送的地址
        
recvfrom每次接受一个报文, 如果没有接受到的内容则直接丢弃
        sockfd. sendto(data, addr)
  功能:udp消息发送
  参数:
      data 要发送的内容 bytes
      addr 目标地址
  返回:发送字节数
    4.关闭套接字:
        socket.close()


import sys
    sys.argv
   作用:
      获取从命令行获取的参数内容
      Python3 demo.py 参数1, 参数2.....

      sys.argv[0] 是命令本身(程序本身)


tcp流式套接字和udp数据报套接字区别:
  •     1.流式套接字采用字节流的方式进行传输,
  •        而数据报套接字使用数据报形式传输数据
  •     2.tcp套接字会产生粘包,udp不会
  •     3.tcp编程可以保证消息的完整性,udp则不一定
  •     4.tcp需要listen、accept、udp不用
  •     5.tcp消息的发送接收使用recv、send、sendall、
  •        udp使用recvfrom,sendto



socket模块套接字属性(s为套接字)
  •   s.type:表示套接字类型
  •   s.family地址类型

  套接字属性方法
    s.fileno()
    功能:
        获取套接字的 文件描述符
  文件描述符:
     每一个IO事件 操作系统都会分配一个不同的的正整数,
     该正整数即为此IO操作的文件描述符
      默认开启的描述符:
  1.          sys.stdin      0
  2.          sys.stdout   1
  3.          sys.stderr    2

  s.getsockname()
     功能:
        获取套结字绑定 的地址
  s. getpeername()
     功能:
       获取链接套接字 客户端的地址
  s.setsockopt(level,optname, value)
       (# 设置端口可立即重用 必须在链接端口前设置
        s.setsockopt(SOL_SOcKET, SO_REUSEADDR))
     功能:设置套接字选项
     参数:
        level:设置 选项的类型(大类型)  常用:SOL_SOCKET
optname: 子类选项
value: 要设置的值

  s.getsockoptlevel , optname)
     功能: 获取套接字选项值
     参数:
        level:选项的类型

udp套接字应用--->  广播
    一点发送多点接收
    目标地址:广播地址 172.18.32 .255


tcp应用---> http传输

http协议:
   超文本传输协议
   用途:
      网站中浏览器 网页的获取,基于 网站事物 数据传输
      编写基于http协议的 数据传输
   特点:
      1. 应用层协议,传输层使用tcp服务
      2. 简单、灵活,可以使用 多种编程语言操作
      3.无状态的协议,既不用记录用户的输入内容
      4. http1.1  ---> http2.0(还没发布)  技术的成熟和稳定性
    http请求(request):
      请求格式:
         1.请求行:说明具体的 请求类别和内容
          GET    /index.html    /HTTP/1.1
                请求类别   请求内容    协议版本
     请求类别:
      1. GET:              获取网络资源
      2. POST:           提交一定的附加数据
      3. HEAD:          获取响应头
      4. PUT:             更新服务器资源
      5. DELETE:        删除服务器资源
      6. CONNECT:   未使用
      7. TRACE:         用于测试
      8. OPTIONS:    获取服务器性能信息

  2.请求头:请求的具体描述
     Accept:text/html
        每一个键值对占一行,描述了一个特定信息
  3.空行
 4.请求体: 具体参数或提交的 内容
    get参数或者post提交的内容
   http响应(response):
      响应格式:
          1.响应行: 反馈具体的 响应情况
          HTTP/1.1     20       OK
  版本协议   响应码   附加信息
    响应码:
    1.        1xx:提示信息,表示请求已接收
    2.        2xx:响应成功
    3.        3xx:响应需要定向(重新记载链接第三方链接)
    4.        4xx:客户端错误
    5.        5xx:服务器端错误
    常见响应码:
      200  成功
      404  请求 内容不存在
      401  没有访问 权限
      500  服务器 未知错误
      503  服务器暂时 无法执行
      2.响应头:对响应 内容的具体描述
      3.空行
      4.响应体:
          将客户端请求内容进行返回








这里这个图就看了一眼 没特意去记  凭印象画的  可能不对 但是大体逻辑应该没错 
我去百度搜了 什么也没搜到 不知道是不是我的打开方式不对还是什么
只搜到了上面的两张图..........

总结:
tcp,udp协议的区别和编程实现上的差异:
          tcp:
  •                tcp是一种可靠的、面向有链接数据传输服务
  •                tcp能够保证数据的完整性、顺序性、无重复以及无差错
  •                tcp是一种以文件流的形式传输数据的服务 文件流之间是没有边界
  •                的所以基友可能会产生粘包的情况 粘包是因为接受速度没有传输速度快
  •                导致缓存区的数据拥堵 下次取出数据时从而产生非独立数据的链接 这种情况
  •                叫做粘包  粘包只有传输多个数据时才会出现
  •                tcp的编程需要监听套接字 和 等待链接过程 只有链接成功才能发送数据
  •                这种情况叫做三次握手、还有断开时的四次挥手
  •                三次挥手:客户端请求链接、服务器返回报文、客户端完成链接
  •                四次挥手:客户端请求断开、服务器接受请求、服务器准备完毕可以断开、客户端断开
  •                tcp收发送消息需要使用recv、send、sendall方法
  •                sendall比特殊 功能和send一样 但sendall有事务  若发送成功返回None 否则触发异常
  •               链接时必须先运行服务器端后运行客户端
         udp:
  •              udp就比较简单了  是面向无连接的不可靠的数据传输服务
  •              udp没有数据流  接受大小取决于接收方
  •              若数据超出接收方接受范围则丢掉所有超出范围的内容
  •              udp不存在粘包的情况
  •              udp不需要等待链接 没有挥手过程 先发就发 想收就收 自由度比较高
  •              udp编程时收发消息使用recvfrom、sendto方法
  •              udp可用于广播可以随时断开或链接
  •              客户端和服务器端可以随时运行
 
什么是http?

       http 是超文本传输协议
               一种网络数据传输的协议
              没错就是  协议
             并且所有的www文件都必须遵守这个标准
http作用是什么?

      可以用力来网站中浏览器网页获取,基于网站上的一些数据传输 例如目前我正在打的字......
      编写基于http协议的数据传输  

http协议 请求和响应的格式以及每一部分做什么
      请求部分:
               请求行:请求的具体类别和内容   比如说  类别、内容、版本协议
               请求头:请求具体描述
               空行:就是空行
               请求体:请求具体参数或内容
      响应部分:
               响应行:具体响应情况     比如说  版本协议 、响应码 、附加信息  
               响应头:响应具体描述
               空行
               响应体:响应具体参数或内容
http协议中请求的基本类型和作用:
        GET:获取网络资源
        POST:提交一定的附加数据
        HEAD:获取响应头 响应返回的文件信息
        PUT:更新服务器资源
        DELETE:删除服务器资源
        TRACE:用于测试
         OPIONS:获取服务器性能信息
        CONNECT:备用
http协议响应码的类型和表达含义:
          以1开头的表示请求已经链接
          以2开头的表示成功接收、提示
          以3开头的代表重新定向进一步处理 第三方
          以4开头的客户端错误
          以5开头的服务器错误
http协议请求网页的流程:
           建立连接、发送请求、响应请求、断开链接
           这样的一个过程称为一个事物
           



相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
2天前
|
Python
Python中的异步编程:使用asyncio和aiohttp实现高效网络请求
【10月更文挑战第34天】在Python的世界里,异步编程是提高效率的利器。本文将带你了解如何使用asyncio和aiohttp库来编写高效的网络请求代码。我们将通过一个简单的示例来展示如何利用这些工具来并发地处理多个网络请求,从而提高程序的整体性能。准备好让你的Python代码飞起来吧!
11 2
|
9天前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
49 6
|
9天前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
35 13
|
2天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
利用Python和TensorFlow构建简单神经网络进行图像分类
利用Python和TensorFlow构建简单神经网络进行图像分类
12 3
|
7天前
|
数据采集 存储 XML
Python实现网络爬虫自动化:从基础到实践
本文将介绍如何使用Python编写网络爬虫,从最基础的请求与解析,到自动化爬取并处理复杂数据。我们将通过实例展示如何抓取网页内容、解析数据、处理图片文件等常用爬虫任务。
|
10天前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
34 4
|
10天前
|
网络协议 物联网 API
Python网络编程:Twisted框架的异步IO处理与实战
【10月更文挑战第26天】Python 是一门功能强大且易于学习的编程语言,Twisted 框架以其事件驱动和异步IO处理能力,在网络编程领域独树一帜。本文深入探讨 Twisted 的异步IO机制,并通过实战示例展示其强大功能。示例包括创建简单HTTP服务器,展示如何高效处理大量并发连接。
32 1
|
12天前
|
数据采集 存储 机器学习/深度学习
构建高效的Python网络爬虫
【10月更文挑战第25天】本文将引导你通过Python编程语言实现一个高效网络爬虫。我们将从基础的爬虫概念出发,逐步讲解如何利用Python强大的库和框架来爬取、解析网页数据,以及存储和管理这些数据。文章旨在为初学者提供一个清晰的爬虫开发路径,同时为有经验的开发者提供一些高级技巧。
12 1
|
13天前
|
Kubernetes 网络协议 Python
Python网络编程:从Socket到Web应用
在信息时代,网络编程是软件开发的重要组成部分。Python作为多用途编程语言,提供了从Socket编程到Web应用开发的强大支持。本文将从基础的Socket编程入手,逐步深入到复杂的Web应用开发,涵盖Flask、Django等框架的应用,以及异步Web编程和微服务架构。通过本文,读者将全面了解Python在网络编程领域的应用。
16 1
|
14天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
55 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
下一篇
无影云桌面