recv() 特征
* 如何连接的另一端断开连接,则recv立即返回空子串
* recv是从接受缓冲区取出内容,当缓冲区为空则阻塞
* recv如果一次接受不完缓冲区内容,下次会继续接收
send() 特征
* 如果发送的另外一段不存在则会产生Pipe Broken
* recv是向发送缓冲区发送内容,当缓冲区为满阻塞
网络的收发缓冲区
在内存中开辟的区域,用作发送和接受的缓冲
* 协调数据收发(接受和处理)速度
* 减少和磁盘的交互
sendall(data)
功能 : tcp套接字发送消息
参数 : 同send
返回值:如果发送成功返回None
tcp粘包
产生原因:
* tcp传输以字节流的方式发送消息,消息之间没有边界
* 发送比接受的速度快
影响 : 对每次发送的内容是一个独立的意思需要单独识别
如何处理:
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. 关闭套接字
sockfd.close()
cookie :
import sys
sys.argv
作用 : 获取从命令行得到的参数内容
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
要求 : 能够说出tcp,udp协议的区别和编程实现上的差异
soccket模块和套接字属性
(s为套接字)
套接字属性
s.type : 表示套接字类型
s.family : 地址类型
套接字属性方法
s.fileno()
功能 : 获取套接字的文件描述符
文件描述符 : 每一个IO事件操作系统都会分配一个不同的正整数与之匹配,该整数即为此IO的文件描述符
sys.stdin 0
sys.stdout 1
sys.stderr 2
s.getsockname()
功能 : 获取套接字绑定的地址
s.getpeername()
功能 : 获取连接套接字客户端的地址
s.setsockopt(level,optname,value)
功能 : 设置套接字选项
参数 : level 设置选项的类型 SOL_SOCKET
optname 子类选项
value 要设置的值
s.getsockopt(level,optname)
功能 : 获取套接字选项值
参数 : level 要获取选项的类型 SOL_SOCKET
optname 子类选项
返回值 : 获取的值
udp套接字应用 ---》 广播(broadcast)
一点发送多点接收
目标地址 : 广播地址 172.60.50.255
cookie
In [3]: s = "{} is a {}".format('Tom','boy')
In [4]: s
Out[4]: 'Tom is a boy'
In [5]: s = "{1} is a {0}".format('Tom','boy')
In [6]: s
Out[6]: 'boy is a Tom'
tcp应用 ---》 http传输
http协议 ---》 超文本传输协议
用途 : 网站中浏览器获取网页的过程
编写基于http协议的数据传输
特点 :
1. 应用层协议,传输层使用tcp服务
2. 简单,灵活,可以使用多种编程语言操作
3. 无状态的协议,即不记录用户的输入内容
4. http1.1 ---> http2.0 技术成熟度和稳定性
http请求(request)
请求格式:
请求行 具体的请求类别和请求内容
GET / HTTP/1.1
请求类别 请求内容 协议版本
请求类别 : GET 获取网络资源
POST 提交一定的附加数据,得到返回结果
HEAD 获取响应头
PUT 更新服务器资源
DELETE 删除服务器资源
CONNECT
TRACE 用于测试
OPTIONS 获取服务器性能信息
请求头 : 对请求的具体描述
Accept:text/html
* 每一个键值对占一行,描述了一个特定信息
空行
请求体 : 具体的参数或者提交的内容
get参数或者post提交的内容
http响应 (response)
响应格式:
响应行 : 反馈具体的响应情况
HTTP/1.1 200 OK
协议版本 响应码 附加信息
响应码 : 1xx 提示信息,表示请求已经接受
2xx 响应成功
3xx 响应需要重定向
4xx 客户端错误
5xx 服务端错误
常见响应码
200 成功
404 请求内容不存在
401 没有访问权限
500 服务器发生未知错误
503 服务器暂时无法执行
响应头 : 对响应内容的具体描述
Content-Encoding: gzip
Content-Type: text/html
空行
响应体 : 将客户端请求内容进行返回
要求 : 知道http作用
掌握http协议 请求和响应的格式以及每一部分做什么
掌握http协议中请求的基本类型和作用
知道http协议响应码的类型和表达含义
了解通过http协议请求网页的流程
作业:编写一个程序,完成一个文本文件(图片)在服务 端和客户端之间的传输 要求使用tcp套接字