recv()特征
1、 如果连接断开,recv 会立即结束阻塞返回空字符串
2、 当接收缓冲区为空时会阻塞
3、 入股recv一次接收不完缓冲区内容,下次会继续接收,确保数据不丢失
send()特征
1、 如果另一端不存在还试图使用send 进行发送则会产生BrokenPipeError异常
2、当发送缓冲区满时会阻塞
网络收发缓冲区
功能 | 协调读写速度,减少和磁盘交互 |
recv和 send实际上是从缓冲区获取内容,和缓冲区发送内容 |
tcp粘包
产生原因 | tcp传输采用字节流的方式, 消息之间没有边界, 如果发送和接受速度不匹配, 会造成多次发送的内容被一次接受, 形成意义上的误解即粘包 |
产生条件 | 当使用send 快速的连续发送极有可能产生粘包。 |
影响 | 如果每次发送的内容代表一个独立的意思, 此时产生粘包需要处理, 但是如果多次发送的内容本身就是一个连续的整体, 此时就不需要处理。 |
处理方法 | 1.每次发送后加一个结尾标志,接收端通过标志进行判断 |
2.发送一个数据结构 | |
3.每次发送中间有一个短暂的延迟 |
基于udp的通信
udp服务端 | 1. 创建套接字-à 数据报套接字 | sockfd = socket(AF_INET,SOCK_DGRAM) | ||
2.绑定服务端地址 | sockfd.bind() | |||
3.消息的收发 | 接收消息 | data,addr = recvfrom(buffersize) | ||
功能: | 接受udp 消息 | |||
参数: | 每次最多接收消息的大小 | |||
返回值: | data 接收到的消息 addr 消息发送者的地址 | |||
发送消息 | sendto(data,addr) | |||
功能: | udp 发送消息 | |||
参数: | data 要发送的消息 bytes addr 目标地址 | |||
返回值: 发送的字节 | ||||
4.关闭套接字 | sockfd.close() cookie |
示例:
bo2/网络编程/day2/练习 udp服务端.py
Sys.argv
功能 | 获取来自命令行的参数,形成一个列表 *以空格作为每一项分隔,如果一项中有空格则用引号表示一个整体 *命令行内容均作为字符串传入 |
udp客户端 | 1.创建套接字:sockfd = socket(AF_INET,SOCK_DGRAM) | |||
2.消息收发 | 接受消息 | data,addr = sockfd.recvfrom(1024) | ||
返回值: | print("从服务器收到:",data.decode()) | |||
发送消息 | sockfd.sendto(data.encode(),ip地址,终端号) | |||
3.关闭套接字:sockfd.close() |
示例:
bo2/网络编程/day2/练习 udp客户端.py
tcp流式套接字 和 udp 数据报套接字 区别
1、 流式套接字采用节流的方式传输数据,二数据报套接字以数据报形式传输
2、 tcp会产生粘包现象,udp 消息是有边界的不会粘包
3、 tcp传输是建立在连接的基础上,保证传输的可靠性,而udp 一次接收一个数据报,不保证完整性
4、 tcp 需要依赖listen accept 建立连接,udp 不用
5、 tcp 收发消息使用 recv send udp 用recvfrom sendto
sendall()
功能 | 同send()作为tcp 消息发送 |
参数 | 同send() |
返回值 | 发送成功返回None,发送失败返回异常 |
socket 模块和套接字属性
(s表示一个套接字对象) | s.type | 功能:获取套接字类型 | |||
s.family | 功能:获取地址族类型 | ||||
s.fileno()
| 功能:获取套接字的文件描述 | ||||
文件描述符:每一个IO操作系统都会为其分配一个不同的正整数,该正整数即为IO操作的文件描述符。 | |||||
s.getsockname() | 功能:获取套接字的绑定地址 | ||||
s.getpeername() | 功能:获取链接端地址 | ||||
s.setsockoppt(level,opname,value) | 功能: 设置套接字选项 丰富修改原有套接字功能 | ||||
参数: level :获取选项的类型 optname:每个选项类型中的子选项 value:为选项设置值 | |||||
s.getsockopt(level,optname) | 功能:获取套接字选项的值 |
示例:
bo2/网络编程/day02/练习/3套接字属性 .py
udp套接字应用值广播
何为广播 | 一点发送多点接收 |
目标地址 | 广播地址,每个网段内最大的地址172.60.50.255 -à <broadcast> |
示例:
Bo2/网络编程/练习/4 和5 广播.py
tcp应用值HTTP传输
http协议----à超文本传输协议 应用层协议 | |
用途: | 网页的获取,基于网站的数据传输基于http 协议的数据传输 |
特点: | 1.应用层协议,传输层使用tcp传输 |
2.简单灵活和多种语言对接方便 | |
3.无状态协议,不记录用于的通信内容 | |
4.成熟稳定 http1.1 | |
工作模式: | *使用http 双方均遵循http 协议规定发送接收消息体 *请求方,根据协议组织请求内容发送给对象 *服务方,收到内容按照协议解析 *服务方,将回复内容按照协议组织发送给请求方 *请求方,收到回复根据协议解析 |