(1) a: c/s 架构 : client 客户端 和 server 服务器端 能充分发挥pc的性能
b: b/s 架构 : browser 浏览器 和 server 服务器端 隶属于c/s架构 统一了应用的接口
(2)知识点:
1,mac地址 ; 是一个物理地址,全球唯一,类似于身份证 是一个十六进制的12位数
2 ip地址 : 是一个四位点分十进制,它标识了计算机在网络中的位置,类似于学号
3, 交换机的通信方式 ; 广播:吼一嗓子 单播: 一对一 组播: 一对多
4, arp协议: 通过目标ip地址获取目标mac地址的一个协议
5, 端口: 操作系统为本机上每一个运行的程序都随机分配一个端口,其他电脑上的程序可以通过端口获取到这个程序
ip地址 + 端口 能唯一找到某台电脑上的某个程序
6, 路由器: 分隔并连接不同的网段
7, 网关: 类似于局域网的出口和入口
8, 网段: 一个局域网内的ip地址范围
9: 子网掩码: 子网掩码 & ip地址 得到网段
10: osi 五层模型
应用层 : http,https,ftp
传输层 : tcp/udp 四层交换机和路由器
网络层 : ip协议 三层交换机和路由器
数据链路层: arp协议 以太网交换机 网卡 网桥
物理层 : 传输电信号 集线器,网线 光纤
3,socket 模块 又叫做套接字 有多种类型的,一般用两种
sk = socket.socket(family = AF_INET, type=SOCK_STREAM)
family:
AF_UNIX基于文件类型的套接字 基于unix系统开发,为了同一台电脑上多个程序直接通信,unix系统的中心思想是 : 一切皆文件
AF_INET基于网络类型的套接字
type:
SOCK_STREAM 字节流类型 ===> tcp协议 可靠的,面向连接的, 面向字节流形式的传输方式
SOCK_DGRAM 报文类型 ===> udp协议 不可靠的,不面向连接的,面向数据包的传输方式,但是它快
利用tcp 实现一个简单的交互
#服务器端 # import socket # ret = socket.socket() #括号内不传参数,默认 family = 基于网络类型的套接字(AF_INET), type = SOCK_DGRAM # ret.bind(('192.168.12.104',18080)) #端口的范围0-65535 但是0-1023 是给操作系统用的不让用 # ret.listen() #打开可被连接状态 # conn,addr = ret.accept() #等待接受客户端连接的连接,阻塞等待 # s1 = conn.recv(10000) #接收数据,指定最高接受某个字节 # print(s1.decode('utf-8'),addr) #将接受到的byte解码成需要的格式 # s1.close() #关闭本次连接 # ret.close() #关闭服务器 #客户端 # import socket # ret = socket.socket() #实例化一个类 # ret.connect(('192.168.12.104',18080)) #连接服务器的IP.和端口 定位到程序 # ret.send('你好啊!'.encode('utf-8')) #发送byte类型的数据类型,如果是中文需要编码 # ret.close() #关闭连接
4,tcp协议: '127.0.0.1'每个计算机都有这么一个本机地址,只能被本机识别,不能被其他机器识别
tcp协议一次只能链接一个客户端,不能同时和多个客户端通信
tcp协议的三次握手: 注意:一定是client先发起请求
a: 客户端向服务器发送链接请求
b: 服务器收到请求并返回客户端请求连接
c: 客户端回应可以连接
tcp协议的四次挥手: 注意:双发谁先发起断开连接都可以
a;客户端发起断开连接的请求(如果你有数据需要发送,可以继续接受)
b:服务器回复:我收到你的请求了
c;服务器发送已经准备好断开连接了
d:客户端回复:收到你的信息,断开连接
5TCP协议实现远程操作系统的文件编程
# TCP协议实现远程操作主机(服务器端) import socket import subprocess ret = socket.socket() ret.bind(('127.0.0.1',9528)) ret.listen() conn,addr = ret.accept() while 1: num = conn.recv(1024).decode('utf-8') #接受远程客户端的命令,当作系统命令 s1 = subprocess.Popen(num,shell=True, #告诉本服务器(主机)操作系统,将cmd当成系统命令去执行 stdout=subprocess.PIPE, #是执行完系统命令之后,用于保存正确结果的一个管道 stderr=subprocess.PIPE) #是执行完系统命令之后,用于保存错误结果的一个管道 stdout = s1.stdout.read() stderr = s1.stderr.read() conn.send(stdout+stderr) #双显示,择一显示 conn.close() ret.close() # TCP协议实现远程操作主机(客户端) import socket ret = socket.socket() ret.connect_ex(('127.0.0.1',9528)) while 1: num = input('请输入你要操作的命令:') ret.send(num.encode('utf-8')) a = ret.recv(1024).decode('gbk') print(a) ret.close()
6,TCP协议实现聊天
#TCP协议实现互相聊天(服务器) import socket ret = socket.socket() ret.bind(('127.0.0.1',9527)) ret.listen() info,addr = ret.accept() # print(info) while 1: msg = info.recv(2048).decode('utf-8') if msg.upper() == 'Q': break print('