day2_python _网络编程 _网络收发缓冲区 tcp粘包 创建udp的通信 socket 模块和套接字属性 tcp应用值HTTP传输

recv()特征

1、 如果连接断开,recv 会立即结束阻塞返回空字符串

2、 当接收缓冲区为空时会阻塞

3、 入股recv一次接收不完缓冲区内容,下次会继续接收,确保数据不丢失

send()特征

1、 如果另一端不存在还试图使用send 进行发送则会产生BrokenPipeError异常

2、当发送缓冲区满时会阻塞

 

网络收发缓冲区

功能

协调读写速度,减少和磁盘交互

recvsend实际上是从缓冲区获取内容,和缓冲区发送内容

 

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 协议规定发送接收消息体

*请求方,根据协议组织请求内容发送给对象

*服务方,收到内容按照协议解析

*服务方,将回复内容按照协议组织发送给请求方

*请求方,收到回复根据协议解析

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值