目录:
python 网络编程 二
tcp粘包
产生原因:
tcp传输中以字节流的方式发送内容,发送的消息之间没有明显的边界,此时如果发送和接收速度不匹配就会产生粘包影响 : 如果每次发送的内容表示一个独立的意思此时可能需要处理粘包。如果发送的内容本身就是连续的整体,此时不需要处理粘包
如何处理:
1.每次发送后加一个结尾标志
2.发送一个数据结构
3.每次发送中间有一个短暂的延迟
基于udp的服务端
- 创建套接字 —》 数据报套接字
sockfd = socket(AF_INET,SOCK_DGRAM)
- 绑定服务端地址
sockfd.bind()
- 消息的收发
- 接受
- 格式:
data,addr = recvfrom(buffersize)
- 功能 : 接收UDP消息
- 参数 : 每次最多接收消息的大小
- 返回值 : 接收到的内容
接收到的消息的发送者 - 注意: recvfrom 一次接收一个数据包,如果数据包超出了一次能够接收的大小则会丢失没有收到的内容
- 格式:
- 发送
- 格式sendto(data,addr)
- 功能 : udp发送消息
- 参数 : data 要发送的内容 bytes
addr 消息要发送给谁 - 返回值 : 发送的字节
- 接受
4.关闭套接字
sockfd.close()
cookie :
- sys.argv
- 功能 : 获取来自命令行的参数,形成一个列表
- argv[0]是命令本身 其他内容默认以空格分割放到列表中
tcp流式套接字和udp数据报套接字使用区别
- 流式套接字采用字节流的方式传输,而数据报套接字以数据包形式传输
- tcp会产生粘包现象,udp不会
- tcp编程保证传输的可靠性,udp则不保证
- tcp需要listren accept ,udp不需要
tcp使用recv send进行消息收发,udp使用recvfrom和sendto
补充:
- 格式:sendall()
- 功能参数: 同send
- 返回值 : 发送成功返回None 发送失败返回异常
socket 方法:
s.fileno() #(s表示一个套接字对象)
- 功能 : 获取套接字的文件描述符
- 文件描述符 :每一个IO 事件操作系统都会分配一个不同的正数与之匹配,该正数即为此IO操作的文件描述符
- sys.stdin 0
- sys.stdout 1
- sys.stderr 2
s.type : 获取套接字类型
s.family: 地址类型
s.getsockname()
- 功能 : 获取套接字绑定的地址
- s.getpeername()
- 功能 : 用户连接套接字,获取连接端的地址
- s.setsockopt(level,optname,value)
- 功能 : 设置套接字选项 丰富修改原有套接字功能
- 参数: level : 设置选项的类型
IPPROTP_TCP IPPROTO_IP
SOL_SOCKET
optname: 选项类型中的子选项
value : 为选定的选项设置值
s.getsockopt(level,optname)
功能 : 获取套接字选项值
参数: level : 获取选项的类型
IPPROTP_TCP IPPROTO_IP
SOL_SOCKET
optname: 选项类型中的子选项
返回值 : 获取到的值
udp套接字应用之广播
一点发送多点接收
目标地址 :广播地址 一个网段内最大的地址
172.60.50.255format()
- 功能 : 字符串属性函数 用来组合字符串
- 广播风暴:占用大量的带宽造成网络拥塞
tcp应用之 http传输
- HTTP协议 —》 超文本传输协议
用途 : 编写基于http协议的数据传输程序
网站中浏览器端获取网页的过程
将想要获取的内容,以http协议的格式发送给服务端,服务端根据格式进行解析获取到真实需求,将结果以http协议的格式回复给客户端特点 :
- 应用层协议 ,传输层使用tcp服务
- 简单,灵活,和多中语言对接方便
- 无状态的协议 即不记录用户使用过程中传递的内容
- http1.1 支持持久连接
http请求 (Request)
请求格式:
请求行 具体的请求类别
GET / HTTP/1.1
请求种类 请求内容 协议版本请求头 对请求新的的具体描述
Accept: text/html
以键值对的格式对信息进行具体描述空行
- 请求体 具体的请求参数或者提交内容
请求类型:
请求名 作用 GET 获取网络资源 POST 提交一定的附加数据,得到返回结果 HEAD 获取响应头 PUT 更新服务器资源 DELETE 删除服务器次元 CONNECT TRACE 用于测试 OPTIONS 获取服务器性能(跨域先会发一次,简称:嗅探)
HTTP响应 (Response)
响应格式:
响应行 反馈具体的响应情况
HTTP/1.1 200 OK
版本 响应码 附加信息响应头 对响应的具体描述
Accept-Ranges: bytes
以键值对方式给出响应信息的具体描述空行
- 响应体 将客户想要的内容进行返回
响应码种类
响应码 | 作用 |
---|---|
1xx | 提示信息,表示请求已经接受 |
2xx | 响应成功 |
3xx | 响应需要重定向 |
4xx | 客户端错误 |
5xx | 服务端错误 |
200 | 成功 |
404 | 请求内容不存在 |
401 | 没有访问权限 |
500 | 服务器发生未知错误 |
503 | 服务器暂时不能执行 |