1,网络基础相关的知识
- 1.1>架构
- 1.1.1>c/s架构:client客户端和server服务器端
- 优势:能充分发挥pc机的性能
- 1.1架构.2>b/s架构:browser浏览器和server服务器,隶属于c/s架构
- b/s架构 统一了应用的接口
- 1.1.1>c/s架构:client客户端和server服务器端
- 1.2>通信的事:
- 1.2.1>同一台电脑上两个py程序通信:打开一个文件
- 1.2.2>两个电脑通信:连一个网线
- 1.2.3>多个电脑通信:
- eg:电脑1(源)要找电脑2(目标)
- 电脑1首先发送一个请求帧,里边包含(电脑1的IP地址:192.168.1.1,电脑1的mac的地址:xxxxx,寻求目标的IP地址为192.168.1.2de 主机)把这条请求帧交给交换机,交换机以广播的形式传给其他所有的主机
- 所有主机接收到消息后,都会对比自己的IP地址,当目标主机的的IP地址和区广播的IP地址一致时,回复给交换机(回复的内容包括自己的IP地址和mac地址)
- 此时交换机以单播的形式返回给源主机
2,知识点
- 2.1>mac地址:是一个物理地址,全球唯一,是有网卡制造商分配的,类似于身份证
- 2.2>IP地址:是一个四位点分十进制,它表示了计算机在网络中的位置,类似于学号
- 2.3>交换机的通信方式:
- 广播:放射状信息(吼一嗓子)
- 单播:一对一
- 组播:一对多
- 2.4>arp协议:通过目标IP地址来获取目标的mac地址的一个协议
- 2.5>端口:操作系统为本机上每一个运行的程序都随机分配一个端口(程序级别的),其他电脑上的程序可以通过端口获取到这个程序(类似于文件句柄),IP地址+端口 能唯一找到某台电脑上的某一个服务程序
- 2.6>路由器:链接不同网段,路由
- 2.7>网关:类似于 一个局域网的出口和入口
- 2.8>网段:一个局域网内的IP地址范围
- 2.9>子网掩码:子网掩码和IP地址得到网段 (255)
- 2.10>osi五层模型:
- 应用层 :http/https/ftp
- 传输层 :tcp/udp 四层交换机/四层路由器
- 网络层 :IP协议 路由器/三层交换机
- 数据链路层 :arp协议 以太网交换机/网卡/网桥
- 物理层 :传输电信号 网线/光纤/集线器
3,socket模块
- socket又叫套接字,有很多种类型
- 3.1>AF_UNIX基于文件类型的套接字(早期socket是源自unix系统而研发的一个功能,主要是为了用一台电脑上,多个程序直接通信),unix的中心思想是:一切皆文件
- 3.2>AF_INET基于网络类型的套接字
- type:一种是基于TCP协议 SOCK_STREAM
- 一种是基于UDP协议 SOCK_SYREM
- TCP协议:可靠的,面向连接的,面向字节流形式的传输方式
- UDP协议:不可靠的,不面向连接的,面向数据报的传输方式,但是它快
4,client和server代码
- server服务端:
import socket sk = socket.socket() # 括号里不用传参数,默认是基于网络型的套接字,协议:TPC(好比买了一部手机) sk.bind(("192.168.12.37",8008)) # 买一张手机卡(里边以元组的形式包括IP地址,端口,的端口的范围是:0-65535,但是0-1023i操作系统用的,不要用,所以的端口的数字在范围内可以随便给) sk.listen() # 不用传参数,表示同时能接收的连接(相当于开机) conn,addr = sk.accept() # 等待接收客户端的连接,是一种阻塞等待(相当于等待开机) while 1: mas_c = conn.resv(1024) # 建立起联系然后接收客户端发送的消息(conn里边包括客户端的消息)括号里必须给一个参数是字节数的倍数这个数尽量大一点,保证一次都接收完 print("mas_c".encode("utf-8"),addr) massage = input(">>>") conn.send(massage.encode("utf-8")) conn.close() sk.close()
- client客户端
import socket sk = socket.socket() # 建立通信的条件 sk.connect(("192.168.12.37",8008)) # .和要通信的主机连接 while 1: mass = input(">>>") sk.send(mass.encode("utf-8")) mas_c = sk.resv(1024) print(mas_c.decode("utf-8")) sk.close()