网络编程 027
一 C\S 架构 (客户端与服务端架构)
软件c\s架构:京东 淘宝 qq 微信 暴风影音
硬件c\s架构: 打印机
客户端(client) :享受服务端提供的服务
服务端(server) :给客户端提供服务
B\S 浏览器和服务端 B(browser) 谷歌 360 IE
二 网络通信的整个流程(硬件\名词)
网卡 :接收电信号 网络插口 :插网线
mac地址 :(物理地址): 2C-56-DC-BA-B6-BF 16进制的6个数表示 前三位 厂商编号 后三位 流水号 网卡唯一标识, 全球唯一,相当于身份证
集线器 :将所有的插上集线器的电脑连通起来
交换机 :升级版集线器
广播(信息发给所有人)\单播(单独发给某个人或某个状态): 传输方式
广播风暴 :不安全 拥堵信息
IP地址 :192.168.15.129 四个点分十进制组成 划分广播域 (192.168.15.0 -- 192.168.15.255)
划分广播域
IPv4 : 4个点分十进制(0-255)
IPv6 : 6个冒号分十六进制
IPv6 地址: fe80::48c3:8f81:8474:c7d0%2
DHCP协议 :自动分配IP地址
子网掩码: 255.255.255.0 计算是否属于同一网段 属于同一网段的叫子网(计算目标IP地址是否属于同一网段)
另外一个班的同学的IP地址为 : 192.168.14.25
192.168.14.25
255.255.255.0
11000000.10101000.00001110.00001100
11111111. 11111111. 11111111. 00000000
11000000.10101000.00001110.00000000
192.168.14.0
PowerDesigner 制图软件 processon
路由器 :(内网)管理网络,(外网)联通外网,并且由路由转发 就是转发消息
DNS服务器:域名 :www.jd.com --> ip地址
DNS服务器: 记录着所有的域名和网站对应的那台服务器的ip地址(类似于字典)
例如 :{'www.jd.com':'192.158.165.02'}
路由协议 : 计算最优路径
网关 : 把关对外请求 公网(又称外网)IP,也可以说是路由器的IP地址
NAT :网络地址转换 将局域网的地址转换为公网的IP地址,也就是网关的IP地址
局域网\内网
端口:电脑创建的标识 电脑上程序用的 .
0-65535 , 0-1024 属于电脑内部的一些服务用的(千万别用) 自己写程序 一般用8000以后的
三 初识socket
它是一组接口, 把复杂的TCP/IP协议族隐藏在socket接口后面 对用户来说 一组简单的借口就是全部,让socket去组织数据,以符合指定的协议.例如 创建一个客户端和一个服务端彼此交互首先是服务端
# 服务器端 import socket server = socket.socket() # 创建一个接受信息的对象 例如手机 ip_port = ('192.168.15.129',8002)# 创建一个电话卡 server.bind(ip_port) # 绑定ip地址和端口 插上电话卡 # 监听ip地址和端口 server.listen() # 开机 # 等待客户端的链接....
print('等待客户端的链接.....') conn,addr = server.accept() # 等着别人打电话 阻塞住 addr 客户端的IP地址+端口 conn与客户端的连接通道 # 接收消息 from_client_msg = conn.recv(1024) # 1024位消息大小 单位B, MB = 1024KB 一次性接收的最大数据量 # 接收的消息是 bytes类型,需要转化为字符串 from_client_msg = from_client_msg.decode('utf-8') #解码 转化成字符串 print(from_client_msg) 该代码只能对客户端信息进行显示 没有回应
conn.close() # 关闭连接 挂电话
server.close()
接着创建客户端
import socket client = socket.socket() # 创建一个对象 即创建一个手机 client.connect(('192.168.15.129',8002)) #获取到服务器的电话号 client.send('约吗'.encode('utf-8')) #将信息进行编码 转成传输需要的bytes类型
下来是服务器和客户交互 先是服务器:
import socket server = socket.socket() # 创建一个手机 ip_port = ('192.168.15.129',8003) # 创建一个手机卡 server.bind(ip_port) # 插上手机卡 server.listen() #开机 conn,addr = server.accept() #等着别人打电话 while 1: try : from_client_msg = conn.recv(1024) from_client_msg = from_client_msg.decode('utf-8') print(from_client_msg) msg = input('服务器说:') conn.send(msg.encode('utf-8')) except ConnectionResetError: print('客户端已退出...') break conn.close() server.close()
接下来是客户端:
import socket client = socket.socket() server_ip_port = ('192.168.15.129',8001) #链接服务端 client.connect(server_ip_port) while True: msg = input('明杰想说:') print('22222') #发消息 client.send(msg.encode('utf-8')) #send里面的消息必须是字节类型的 from_server_msg = client.recv(1024) #阻塞住,等待接收消息 from_server_msg = from_server_msg.decode('utf-8') print(from_server_msg) client.close()