缓冲区 http协议

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套接字

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值