开发架构+osi七层协议+socket(day26)
软件开发架构
客户端+服务端
- 服务端:24小时提供服务
- 客户端:寻找服务
C/S架构
Client:客户端
server:服务端
优点:软件的使用稳定,可以节省网络资源
缺点:
- 若用户想在同一个设备上使用多个软件,必须下载多个客户端
- 软件的每一次更新,客户端也必须重新下载更新
C/S架构的软件
例如:电脑上的QQ,pycharm,手机端的微信,王者荣耀等
B/S架构
Browser:浏览器(客户端)
Server:服务器
优点
以浏览器充当客户端,无需用户下载多个软件,也无需用户下载更新软件版本,直接在浏览器访问需要使用的软件
缺点
消耗网络资源过大,当网络不稳定时,软件使用也会不稳定
B/S架构的软件
例如在浏览器上输入某个域名的地址
网络编程、并发编程、数据库开发可以开发C/S架构的软件(仿优酷系统)
前端html、css、js、web框架(网络编程、并发编程)可以开发B/S架构的软件(BBS系统)
网络编程
要实现远程通信必须具备:
- 物理连接介质:比如网卡
- 互联网协议:计算机沟通的介质,就好比人类交流的语言
互联网协议/OSI七层协议
互联网协议又称为网络七层协议/OSI七层协议,ISO是一个世界组织
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理连接层
传输层
TVP//UDP协议,都是基于端口工作的
端口号:标识电脑上某一个应用程序
端口号范围:0-65535
注意:
- 操作系统中,一般0-1024的段都被默认使用了(不要动)
- 尽量使用8000之后端口
开发中常用软件的端口号
- mysql:3306
- mongodb:27017
- Django:8000
- Tomcat:8080
- Flask:5000
- Redis:6379
若想服务端和客户端进行通信,必须要建立连接,产生双向通道(两条管道)
- 一条是客户端往服务端发送消息
- 一条是客户端往服务端发送消息
总结
- ip:用于唯一表示某一台计算机的位置
- port:端口用于确认计算机上的一个应用程序
ip+port:世界上某一台电脑上的一个应用软件
TCP协议的工作原理
TCP是一个流式协议
三次握手,四次挥手
三次握手键连接
建立双向通道
- Listen:监听
- established:确认请求建立连接
发送数据
客户端往服务端发送数据,数据存放在内存中,需要服务端确认收到,数据才会在内存中释放,否则,会隔一段时间发送一次,让服务端返回确认收到
在一段时间内,如果服务端还是不返回确认收到,则取消发送,并释放内存中的数据
四次挥手断连接
TIME_WAIT:时间等待
网络层
IP地址:用于表示计算机(IP地址)
IP:点分十进制
最小值:0.0.0.0
最大值:255.255.255.255
IPV4:
一开始用电脑的人不多,所以出现了IPV4的协议版本
IPV6
后来用的人多了,出现了IPV6,包括IPV4
本机IP
- 回环地址:127.0.0.1(localhost)
数据链路层
数据链路层的‘以太网协议,专门用于处理基于电信号发送的数据
以太网协议
- 规定好电信号数据的分组方式
- 每一台连接网线的电脑都必须要由一块“网卡”
- 网卡是由不同厂商生产的
- 每块网卡都会有世界上独一无二的12为编号
- 前六位:厂商号
- 后六位:流水号
交换机
可以让多台电脑连接到一起
基于以太网协议发送数据
特点:广播,单播
弊端:广播风暴,不能跨局域网通信
互联网
让局域网之间可以通信
物理连接层
- 基于电信号发送二进制的数据
socket
什么是socket
socket是一个模块,可以写一套C/S架构的套接字
为什么用socket
socket套接字会封装好各层协议的工作
- 好处
- 可以节省开发成本
如何使用
单次通信
# 服务端.py
import socket
# 默认指定TCP协议
server = socket.socket() # 相当于买手机
# 插卡
sever.bind(
('127.0.0.1',9527)
) # IP+port 元组
# 相当于开机,等待接听
sever.listen(5) # 半连接池
# 监听是否有消息
# conn相当于服务端往客户端挖的管道
conn,addr = sever.accept() # 返回的(sock,addr)
print(addr)
# 接受客户端的消息
data = conn.recv(1024) # 可以接受1024字节数据
# data = conn.recv(1024).decode('utf-8')
print(data)
conn.send(b'hi')
# 相当于挂掉电话
conn.close()
# 相当于关机
sever.close
# 客户端.py
import socket
# 买手机
client = socket.socket()
# 往服务端拨号
# client详单与客户端往服务端挖的管道
client.connect(
('127.0.0.1',9527)
) # ip+port 寻找服务端
# 客户端向服务端说话
client.send(b'hello')
# client('你好'.encode('utf-8'))
data = client.recv(1024)
# data = client.recv(1024).decode('utf8')
print(date)
# 关闭连接
client.close()
注意:客户端与服务端必须遵循“一端send,另一端recv”不能两端同时send或recv
循环通信
# 服务端.py
import socket
server = socket.socket() # 相当于买手机
sever.bind(
('127.0.0.1',9527)
)
sever.listen(5) # 半连接池
conn,addr = sever.accept() # 返回的(sock,addr)
print(addr)
while True:
# 接收客户端发送过来的消息
data = conn.recv(1024)
print(data)
if data = 'q':
break
# 让服务端输入发送给客户端的消息
send_msg = input('服务端-->客户端').encode(utf-8)
conn.send(send_msg)
conn.close()
sever.close
# 客户端.py
import socket
client = socket.socket()
client.connect(
('127.0.0.1',9527)
) # ip+port 寻找服务端
while True:
send_msg= input('客户端--》服务端')
# 服务端发送给客户端的数据
client.send(send_msg.encode('utf-8'))
# 服务端返回的数据
client.recv(1024).decode('utf-8')
print(1024)
client.close()
服务端连接多个客户端
# 服务端
import socket
server = socket.socket()
server.bind(
('127.0.0.1', 8888)
)
server.listen(5) # 半连接池,可以“等待5个用户接受服务”
while True:
# 等待客户端连接过来
conn, addr = server.accept()
print(addr)
# 循环接收客户端数据
while True:
try:
data = conn.recv(1024).decode('utf-8')
print(data)
# mac和linux系统bug: b''
if len(data) == 0:
continue
if data == 'q':
break
conn.send(data.encode('utf-8'))
except Exception as e:
print(e)
break
conn.close()
# 客户端
import socket
client = socket.socket()
client.connect(
('127.0.0.1', 8888)
)
while True:
send_msg = input('>>>:')
client.send(send_msg.encode('utf-8'))
if send_msg == 'q':
break
data = client.recv(1024).decode('utf-8')
print(data)
client.close()
开发架构+osi七层协议+socket(day26)的更多相关文章
- python网络编程-Json序列化功能扩展-软件开发架构-OSI七层协议-TCP-01
面向对象补充知识点(面向对象的应用) 扩展json序列化所支持的数据类型(分析源码) import json from datetime import datetime, date # ------- ...
- 网络编程之网络架构及其演变过程、互联网与互联网的组成、OSI七层协议、socket抽象层
目录 网络架构及其演变过程 单机架构 CS架构 BS架构 BS架构和CS架构的区别 C/S架构的优缺点: B/S架构的优缺点: 互联网与互联网的组成 互联网的组成(教科书版) 互联网的组成(科普版) ...
- 1、网络并发编程--简介、软件开发架构、OSI七层协议
python复习 变量与常量 基本数据类型 内置方法 字符编码.文件操作 函数 函数参数.闭包函数.装饰器 面向对象 封装.继承.多态 """ 什么是对象 数据与功能的结 ...
- 软件开发架构介绍||OSI七层协议之物理层、数据链路层、网络层、传输层(mac地址、ip协议、断开协议、tcp协议之三次握手四次挥手)
一.网络编程 软件开发架构 C/S架构 C:客户端 想体验服务的时候才会去找服务端体验服务 S:服务端 24小时不间断的提供服务,即时监听,随时待命 B/S架构 B:浏览器 想体验服务的时候 ...
- 软件开发架构与网络之OSI七层协议(五层)
本期内容概要 python回顾 软件开发架构 网络理论前瞻 osi七层协议(五层) 以太网协议 IP协议 port协议 交换机 路由器 局域网 广域网 TCP协议 三次握手 四次挥手 UDP协议 内容 ...
- Day09: socket网络编程-OSI七层协议,tcp/udp套接字,tcp粘包问题,socketserver
今日内容:socket网络编程 1.OSI七层协议 2.基于tcp协议的套接字通信 3.模拟ssh远程执行命令 4.tcp的粘包问题及解决方案 5.基于udp协议的套接字 ...
- day28——C/S与B/S架构、网络通信原理、osi七层协议、UDP、TCP协议、TCP的三次握手与四次挥手
day28 C/S B/S架构 C:client 客户端 B:browse浏览器 S:server 服务端 C/S C/S架构:基于客户端与服务端之间的通信 QQ.游戏.皮皮虾 优点:个性化设 ...
- 8.6 day27 网络编程 osi七层协议 Time模块补充知识 TCP协议
Time模块补充知识 date和datetime区别是什么? date 就是年月日 datetime就是年月时时分秒 以下代码为什么会报错? import json from datetime imp ...
- 网络框架,互联网的组成,OSI七层协议,抽象层
6.25自我总结 1.网络框架 1.单机 单机游戏 以下两个基于网络的 2.CS架构 cs--->client客户/server服务 服务端(应用程序)一个就够了,客户端(应用程序)可以有多个 ...
随机推荐
- Spring 梳理-el表达式和jstl
JSP中有这么几种元素 1: Scriptlet <% ... %> 2: 声明元素 <%! ... %> 3: Java表达式 <%= ... %> 4: 指令元 ...
- QT两个窗口相互切换
信号(signals)与槽(slots)是QT重要机制,例子使用了C++11 lambda表达式进行了信号与槽的连接. 实现两个窗口通过点击按钮完成互相切换,注意子窗口只能发送信号,不能处理,所有信号 ...
- Yii2 前后台登陆退出分离、登陆验证
这里用的yii2高级模板, 基本模板的配置文件在一个文件里,方法基本没什么区别, 1.用户表要有两个用户表, 当然一个也行,分开是省得麻烦,既然是分离了就彻底分开, 前台表user,后台表user_b ...
- Java 学习笔记之 线程Yield
线程Yield: yield()方法的作用是放弃当前的CPU资源,将它让给其他的任务去占用CPU执行时间,但放弃的时间不确定,有可能刚刚放弃,马上又获得CPU时间片. public class Yie ...
- windows下将jar文件设置为系统服务
jar文件的执行需要java环境,怎么配置环境相信不用说了 因为不想每次开机都手动启动一次程序,那么我们就需要把它配置成开机自启动的服务,下面就来讲一种方法 首先,我们知道jar文件的执行命令为 ja ...
- 【CSS】width和height计算
width:calc(100% - 20px); width:-webkit-calc(100% - 20px);//chrome width:-moz-calc(100% - 20px);//fir ...
- GUI tkinter (Menu)菜单项篇
"""添加顶层菜单:1.我们可以使用Menu类来新建一个菜单,Menu和其他的组件一样,第一个是parent,这里通常可以为窗口2.然后我们可以用add_command方 ...
- string字符串转数组
/** * THis_is_a_cat * This Is A Cat * * Cat A Is This * @author Administrator * */ public class Test ...
- MySQL 拿 WebShell
两种常规方法利用 MySQL getshell 的方法: select … into outfile general_log 一.select … into outfile 介绍 利用需要满足以下条件 ...
- 关于参加AWD攻防比赛心得体会
今天只是简单写下心得和体会 平时工作很忙 留给学习的时间更加珍少宝贵. 重点说下第二天的攻防比赛吧 . 三波web题 .涉及jsp,php,py. 前期我们打的很猛.第一波jsp的题看到有首页预留后 ...