day27 网络编程
2024-10-19 13:35:30
1、OSI七层协议
1.七层划分为:应用层,表示层、会话层、传输层、网络层、数据链路层、物理层
2.五层划分:应用层、传输层、网络层、数据链路层、物理层
应用层:
表示层:
会话层:
传输层:四层交换机、四层路由器,TCP协议、UDP协议
网络层:路由器、三层交换机
数据链路层:网桥、以太网交换机、网卡
物理层:中继器、集线器、双绞线
2、软件架构
C/S: client ===>客户端 server===>服务端
B/S: browser ===>浏览器 server===>服务端
一、CS系统架构
客户端:用户安装的软件
服务端:统一管理数据库的主机中的软件叫做服务端,在后来服务端不只是管理数据,外加处理业务逻辑
1.用户操作系统安装客户端
2.每个用户需要独立安装软件、服务端升级也要每个用户升级
应用领域:QQ、大型网络游戏
二、BS系统架构
1.统一客户端即默认安装用户电脑中的浏览器,访问同种类的网站,具体业务的处理根据相应协议和标准提供通用的服务器程序,在不同的服务器处理。
2.基于BS结构下的程序就要求解决速度问题,而速度问题的核心就是解决海量数据操作和高并发问题,网站复杂架构就是从这两个问题演变出来的。
三、BS架构和CS架构区别
BS技术架构:纯B/S架构,MYSQL数据库,JAVA语言,LINUX操作系统,全球领先的技术,免费正版的数据库,没有病毒的操作系统,经营数据不会被截取和外泄。
CS技术架构:C/S架构,使用VPN连接,费用高,数据慢,容易丢失数据,采用WINDOWS操作系统,Oracle,SQL-Server数据库,用正版费用高,用盗版存在商业风险。
BS核心技术:纯B/S架构,WEB2.0,管理便利,数据实时同步,便于数据分析和总部营销决策、
CS核心技术:C/S架构,数据传输慢,容易丢单,管理非常不便利,可扩展性差
3、TCP协议
TCP协议的三次握手和四次挥手
# 三次握手:建立连接 ,四次挥手:断开连接
TCP协议特点:
1.数据可靠传输
2.速度相对于UDP协议较慢
UDP协议特点:
1.数据不可靠
2.速度相对于TCP协议较快
4、Socket抽象层
一、socket是什么
1.我们经常把Socket翻译为套接字,Socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
二、本机IP地址:
本机IP地址:127.0.0.1
socket抽象层:就是一个个的对外访问的接口
5、基于TCP协议的套接字编程
注意:先启动服务端再启动客户端
##########################Sever.py##############################
import socket
1.实例化socket对象
# 参数不传递默认代表是TCP协议
server = socket.socket(type=socket.SOCK_STREAM)
2.绑定
server.bind(('127.0.0.1',8001)) # 必须端口在1024之上
3.监听,括号中是半连接池
server.listen(5)
4.接收客户端发来的信息
print('正在等待客户端发来的消息:')
# sock:当次连接对象,addr:客户端的地址。ip+port
sock,addr = server.accept()
5.拿到数据,一次最多接收1024个字节的数据
data = sock.recv(1024)
print(data)
6.发送客户端的数据
sock.send(data.upper()) # 接收客户端发送的数据并转为大写
7.断开连接
sock.close()
8.关闭之后不能在绑定IP地址了
server.close()
##########################Client.py##############################
import socket
1.实例化socket对象
client = socket.socket()
client.connect(('127.0.0.1',8001))
2.向服务器发送数据
client.send(b'hello boy')
3.接收服务端发来的数据
data = client.recv(1024)
print(data)
client.close()
6、基于UDP协议的套接字编程
# 服务端
import socket
# SOCK_STREAM : tcp协议的服务端
# SOCK_DGRAM :udp协议的服务端
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 数据报协议-》UDP
server.bind(('127.0.0.1', 8080))
while True:
data, client_addr = server.recvfrom(1024)
print('===>', data, client_addr)
server.sendto(data.upper(), client_addr)
server.close()
# 客户端
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 数据报协议-》UDP
while True:
msg = input('>>: ').strip() # msg=''
client.sendto(msg.encode('utf-8'), ('127.0.0.1', 8080))
data, server_addr = client.recvfrom(1024)
print(data)
client.close()
最新文章
- 小米note3,华为手机,软键盘弹出之后,页面上定位的元素布局会乱掉
- websocket实例(显示文件导入处理进度)
- JavaScript语法、对话框。分支语句
- 字串符相关 split() 字串符分隔 substring() 提取字符串 substr()提取指定数目的字符 parseInt() 函数可解析一个字符串,并返回一个整数。
- Scala spark mongodb
- 获取、增加、修改、删除sqlserver字段描述
- partial class 说明
- UVA 110 Meta-Loopless Sorts(输出挺麻烦的。。。)
- python socketserver实现客户端多并发
- 1.WF 4.5在项目中直接使用的问题
- OpenStack(企业私有云)万里长征第三步——调试成功
- 使用Recovery Services备份Azure ARM模式虚拟机
- chart.js angular组件封装(ng6)、实战配置、插件编写
- Java类加载过程及static详解
- 【TensorFlow】tf.nn.softmax_cross_entropy_with_logits的用法
- Spring MVC 注解 @RequestParam解析
- 采用c3p0数据库连接池底层是jdbc的数据库的增删改查
- GridFS实现原理
- 二型错误和功效(Type II Errors and Test Power)
- Supply
热门文章
- 清除行列 牛客网 程序员面试金典 C++ Python
- When overwhelmed, take a break
- vue打包后反编译到源代码(reverse-sourcemap)
- xxx.app已损坏无法打开、来自身份不明的开发者解决办法
- 在idea中使用eclipse的快捷键
- Java 代码执行流程
- 性能优化 | Go Ballast 让内存控制更加丝滑
- 菜鸡的Java笔记 类图
- Hi3516开发笔记(二):Hi3516虚拟机基础环境搭建之串口调试、网络连接以及sftp文件传输
- [源码解析] PyTorch 分布式(7) ----- DistributedDataParallel 之进程组