Python网络编程(socket模块、缓冲区、http协议)
- 服务器:
- 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
- 如果建立的另一端链接被断开, 则recv立即返回空字符串
- recv是从接受缓冲区取出内容,当缓冲区为空则阻塞
- recv如果一次接受不完缓冲区的内容,下次执行会自动接受
- 如果发送的另一端不存在则会产生Pipe Broken异常
- send是从发送缓冲区发送内容,当缓冲区为满则堵塞
- 协调数据的收发(接受和处理)速度
- 减少和磁盘的交互
- 1.流式套接字采用字节流的方式进行传输,
- 而数据报套接字使用数据报形式传输数据
- 2.tcp套接字会产生粘包,udp不会
- 3.tcp编程可以保证消息的完整性,udp则不一定
- 4.tcp需要listen、accept、udp不用
- 5.tcp消息的发送接收使用recv、send、sendall、
- udp使用recvfrom,sendto
- s.type:表示套接字类型
- s.family:地址类型
- sys.stdin 0
- sys.stdout 1
- sys.stderr 2
- GET: 获取网络资源
- POST: 提交一定的附加数据
- HEAD: 获取响应头
- PUT: 更新服务器资源
- DELETE: 删除服务器资源
- CONNECT: 未使用
- TRACE: 用于测试
- OPTIONS: 获取服务器性能信息
- 1xx:提示信息,表示请求已经接收
- 2xx:响应成功
- 3xx:响应需要定向(重新记载链接第三方链接)
- 4xx:客户端错误
- 5xx:服务器端错误
- tcp是一种可靠的、面向有链接数据传输服务
- tcp能够保证数据的完整性、顺序性、无重复以及无差错
- tcp是一种以文件流的形式传输数据的服务 文件流之间是没有边界
- 的所以基友可能会产生粘包的情况 粘包是因为接受速度没有传输速度快
- 导致缓存区的数据拥堵 下次取出数据时从而产生非独立数据的链接 这种情况
- 叫做粘包 粘包只有传输多个数据时才会出现
- tcp的编程需要监听套接字 和 等待链接过程 只有链接成功才能发送数据
- 这种情况叫做三次握手、还有断开时的四次挥手
- 三次挥手:客户端请求链接、服务器返回报文、客户端完成链接
- 四次挥手:客户端请求断开、服务器接受请求、服务器准备完毕可以断开、客户端断开
- tcp收发送消息需要使用recv、send、sendall方法
- sendall比特殊 功能和send一样 但sendall有事务 若发送成功返回None 否则触发异常
- 链接时必须先运行服务器端后运行客户端
- udp就比较简单了 是面向无连接的不可靠的数据传输服务
- udp没有数据流 接受大小取决于接收方
- 若数据超出接收方接受范围则丢掉所有超出范围的内容
- udp不存在粘包的情况
- udp不需要等待链接 没有挥手过程 先发就发 想收就收 自由度比较高
- udp编程时收发消息使用recvfrom、sendto方法
- udp可用于广播可以随时断开或链接
- 客户端和服务器端可以随时运行
from socket import *
from time import sleep s = socket() s.bind(('0.0.0.0',8888))
s.listen(5) c,addr = s.accept()
print("Connect from ",addr) f = open('img.jpg','rb')
#将文件名称告知对方
c.send('img.jpg'.encode())
sleep(0.1) while True:
data = f.read(1024)
if not data:
break
c.send(data) sleep(0.1)
c.send('##'.encode()) data = c.recv(1024)
print(data.decode()) f.close()
c.close()
s.close()
客户端
from socket import * s = socket() s.connect(('172.60.50.181',8888)) filename = s.recv(1024).decode() f = open('/home/tarena/'+filename,'wb') while True:
data = s.recv(1024)
if data == b'##':
break
f.write(data) s.send("接收完成".encode()) f.close()
s.close()
Python网络编程(socket模块、缓冲区、http协议)的更多相关文章
- python 网络编程--socket模块/struct模块
socket模块: 客户端:CS架构, client -> server 浏览器:BS架构, browser -> server 网络通信本质:传输字节 doc命令查看ip地址:ipc ...
- 铁乐学Python_Day33_网络编程Socket模块1
铁乐学Python_Day33_网络编程Socket模块1 部份内容摘自授课老师的博客http://www.cnblogs.com/Eva-J/ 理解socket Socket是应用层与TCP/IP协 ...
- Python网络编程socket
网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...
- Day07 - Python 网络编程 Socket
1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...
- 《Python网络编程》学习笔记--UDP协议
第二章中主要介绍了UDP协议 UDP协议的定义(转自百度百科) UDP是OSI参考模型中一种无连接的传输层协议,它主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成,提供面向事务 ...
- python网络编程-socket套接字通信循环-粘包问题-struct模块-02
前置知识 不同计算机程序之间数据的传输 应用程序中的数据都是从程序所在计算机内存中读取的. 内存中的数据是从硬盘读取或者网络传输过来的 不同计算机程序数据传输需要经过七层协议物理连接介质才能到达目标程 ...
- python网络编程--socket,网络协议,TCP
一. 客户端/服务端架构(用到网络通信的地方) 我们使用qq.微信和别人聊天,通过浏览器来浏览页面.看京东的网站,通过优酷.快播(此处只是怀念一下)看片片啥的等等,通过无线打印机来打印一个word文档 ...
- Python的网络编程socket模块
(1)利用socket进行简单的链接 Python里面的socket支持UDP.TCP.以及进程间的通信,socket可以把我们想要发送的东西封装起来,发送过去,然后反解成原来的样子,事实上网路通信可 ...
- python网络编程-socket编程
一.服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层 ...
- Day10 Python网络编程 Socket编程
一.客户端/服务器架构 1.C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务)[QQ,SSH,MySQL,FTP] 2.C/S架构与socket的关系: 我们学习soc ...
随机推荐
- autofac 的好博文
https://www.cnblogs.com/neverc/p/4914091.html#e https://www.cnblogs.com/stulzq/p/8547839.html
- c#方法(整理自菜鸟网)
定义一个方法,根本上说就是在声明它的结构的元素 定义方法的语法如下: <访问修饰符(public啥的)> < 返回值数据类型,没有返回值的为void > <方法名称&g ...
- tp5 验证是不是ajax提交
话不多说,看代码 if(request()->isAjax()){ return "是ajax提交"; }else{ return "不是ajax提交"; ...
- 深入理解HDFS的架构和原理
(一) HDFS主要是用于做什么的? HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处 ...
- javascript入门笔记3-dom
1.通过ID获取元素 document.getElementById("id") <!DOCTYPE HTML> <html> <head> & ...
- java XML 通过BeanUtils的population为对象赋值 根据用户选择进行dom4j解析
根据xml文件设计Student对象 <?xml version="1.0" encoding="UTF-8"?> <students> ...
- exa命令详解
exa 是 ls 文件列表命令现代化替代品. 官网:https://the.exa.website/ GitHub:https://github.com/ogham/exa 后续整理中……
- eCharts.js使用心得
最近刚刚做了一个项目,需求是使用eCharts实现实时监控,可以动态的增加和删除数据,可以全屏展示,趁着现在还没忘干净,整理一下使用过程中出现的问题和经验.可能有分析的不到位的地方,不喜勿喷! 一.图 ...
- PHP生成ZIP压缩文件
PHP生成ZIP压缩文件 /* * 生成zip压缩文件 * $sourceDir:被压缩的文件夹或文件 * $outFileName:输出的压缩文件名称 * */ function createZip ...
- 多线程(threading module)
一.线程与进程 线程定义:线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不 ...