- 服务器:
- localhost/127.0.0.1
- 客户端:
- 只是在本机启动客户端,用127.0.0.1访问
- 服务器:
- 0.0.0.0
- 客户端:
- 可以在本机用127.0.0.1、192.168.0.1
- 服务器:
- 192.168.0.1
- 客户端:
- 局域网内用192.168.0.1
socket(创建套接字) --->
bind(绑定地址) --->
listen(设置监听)--->
accept(等待链接) --->
recv/send(收/发消息) --->
close ()
- 如果建立的另一端链接被断开, 则recv立即返回空字符串
- recv是从接受缓冲区取出内容,当缓冲区为空则阻塞
- recv如果一次接受不完缓冲区的内容,下次执行会自动接受
- 如果发送的另一端不存在则会产生Pipe Broken异常
- send是从发送缓冲区发送内容,当缓冲区为满则堵塞
- 协调数据的收发(接受和处理)速度
- 减少和磁盘的交互
返回值:如果
发送成功则
返回None 否则返回异常 1.
tcp传输以
字节流的方式
发送消息,
消息之间没有边界 对每次发送的内容是一个独立的意识需要单独识别时 容易使用原文件被更改
1.每次发送后
追加一个结尾标志,代表本次发送完毕
sockfd = socket(AF_INET,SOCK_DGRAM)
data, addr = sockfd.
recvfrom(buffersize)
recvfrom每次接受一个报文,
如果没有接受到的内容则直接丢弃 sockfd.
sendto(data, addr)
Python3 demo.py 参数1, 参数2.....
- 1.流式套接字采用字节流的方式进行传输,
- 而数据报套接字使用数据报形式传输数据
- 2.tcp套接字会产生粘包,udp不会
- 3.tcp编程可以保证消息的完整性,udp则不一定
- 4.tcp需要listen、accept、udp不用
- 5.tcp消息的发送接收使用recv、send、sendall、
- udp使用recvfrom,sendto
- s.type:表示套接字类型
- s.family:地址类型
每一个IO事件 操作系统都会分配一个不同的的正整数,
- sys.stdin 0
- sys.stdout 1
- sys.stderr 2
s.setsockopt(level,optname, value) s.setsockopt(SOL_SOcKET, SO_REUSEADDR))
level:设置
选项的类型(大类型) 常用:SOL_SOCKET
s.getsockopt(level
, optname) 网站中浏览器
网页的获取,基于
网站事物
数据传输 4.
http1.1 ---> http2.0(还没发布)
技术的成熟和稳定性 GET /index.html /HTTP/1.1
-
-
- GET: 获取网络资源
- POST: 提交一定的附加数据
- HEAD: 获取响应头
- PUT: 更新服务器资源
- DELETE: 删除服务器资源
- CONNECT: 未使用
- TRACE: 用于测试
- OPTIONS: 获取服务器性能信息
-
- 1xx:提示信息,表示请求已经接收
- 2xx:响应成功
- 3xx:响应需要定向(重新记载链接第三方链接)
- 4xx:客户端错误
- 5xx:服务器端错误
这里这个图就看了一眼 没特意去记 凭印象画的 可能不对 但是大体逻辑应该没错 我去百度搜了 什么也没搜到 不知道是不是我的打开方式不对还是什么 - tcp是一种可靠的、面向有链接数据传输服务
- tcp能够保证数据的完整性、顺序性、无重复以及无差错
- tcp是一种以文件流的形式传输数据的服务 文件流之间是没有边界
- 的所以基友可能会产生粘包的情况 粘包是因为接受速度没有传输速度快
- 导致缓存区的数据拥堵 下次取出数据时从而产生非独立数据的链接 这种情况
- 叫做粘包 粘包只有传输多个数据时才会出现
- tcp的编程需要监听套接字 和 等待链接过程 只有链接成功才能发送数据
- 这种情况叫做三次握手、还有断开时的四次挥手
- 三次挥手:客户端请求链接、服务器返回报文、客户端完成链接
- 四次挥手:客户端请求断开、服务器接受请求、服务器准备完毕可以断开、客户端断开
- tcp收发送消息需要使用recv、send、sendall方法
- sendall比特殊 功能和send一样 但sendall有事务 若发送成功返回None 否则触发异常
- 链接时必须先运行服务器端后运行客户端
- udp就比较简单了 是面向无连接的不可靠的数据传输服务
- udp没有数据流 接受大小取决于接收方
- 若数据超出接收方接受范围则丢掉所有超出范围的内容
- udp不存在粘包的情况
- udp不需要等待链接 没有挥手过程 先发就发 想收就收 自由度比较高
- udp编程时收发消息使用recvfrom、sendto方法
- udp可用于广播可以随时断开或链接
- 客户端和服务器端可以随时运行
可以用力来网站中浏览器网页获取,基于网站上的一些数据传输 例如目前我正在打的字......
请求行:请求的具体类别和内容 比如说 类别、内容、版本协议
响应行:具体响应情况 比如说 版本协议 、响应码 、附加信息