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 ...
随机推荐
- 广搜,深搜,单源最短路径,POJ(1130),ZOJ(1085)
题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=85 http://poj.org/problem?id=1130 这 ...
- JS判断手机横竖屏
在移动端开发时,有时候需要判断手机的横竖屏,那么就需要用到window.orientation这个参数,通过这个参数可以判断出手机是处在横屏还是竖屏状态. 屏幕方向对应的window.orientat ...
- python 3+djanjo 2.0.7简单学习(四)--Django视图
1.概念 Django 中的视图的概念是「一类具有相同功能和模板的网页的集合」.比如,在一个博客应用中,你可能会创建如下几个视图: 博客首页——展示最近的几项内容. 内容“详情”页——详细展示某项内容 ...
- ubuntu 报错E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unav E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process us
1.配置xshell,查看虚拟机中ubuntu中网络ip ifconfig 报错 Command 'ifconfig' not found, but can be installed with: su ...
- P1823 Patrik 音乐会的等待
题目描述 N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟进行谈笑风生.队列中任意两个人A和B,如果他们是相邻或他们之间没有人比A或B高,那么他们是可以互相看 ...
- vs2012或vs2013调试卡 关闭调试卡
以前vs2013就有这个问题.没有解决.今天又装了vs2012.又遇到了.特别郁闷. 今天一定要解决.网上百度了.很久.可能关键字有问题.没有找到好的办法. 找到的办法有.显卡问题.不是管理员运行问题 ...
- spring-bean(xml方式DI)
三种属性注入方式 构造函数注入 1.在Bean实体中写入构造函数(带参构造) 2. <bean id=”该bean的名称” class=”注入的bean的全路径”> <constru ...
- Linux apt & yum 及 常用命令
yum yum 语法 yum [options] [command] [package ...] options:可选,选项包括-h(帮助),-y(当安装过程提示选择全部为"yes" ...
- JAVA / MySql 编程——第七章 JDBC
1.JDBC:JDBA是Java数据库连接(Java DataBase Connectivity)技术的简称,提供连接各种常用数据库的能力: ●Java是通过JDBC技术实现对各种数据 ...
- HTML5--混合布局
1.先上效果图,大家来看看 2.代码如下: <!doctype html> <meta charset='utf-8' content='text/html' /> <h ...