python3.6入门到高阶(全栈) day026 CS架构 网络通信流程 socket
客户端\服务端架构(哪里用到了网络通信)
客户端英文名称:Client(使用服务端的服务),服务端英文名称:Server(一直运行着,等待服务别人,不能有一天访问百度,百度页面打不开,不行吧。),
下面所说的C\S架构就是说的Client\Server架构。
C\S架构(****) client server
软件C\S架构:客户端\服务端架构:京东,淘宝,今日头条,qq,微信.....
B\S架构:浏览器(browser)\服务端>>>统一接口
硬件C\S架构: 打印机.
网络通信的整个流程
网线:传输电信号
集线器:将所有连接到集线器的网络设备连通起来
交换机: 升级版的集线器
网卡:接受电信号
MAC地址:物理地址: 8C-EC-4B-88-B9-C9 #前三位厂商编号,后三位生产流水号
单播:
广播:
广播风暴:网络拥堵,信息不安全
Ip地址:
IPv4 地址: 192.168.15.46 #4个点分十进制
作用:划分广播域
192.168.15.46 #
Ipv4:192.168.15.0-192.168.15.255 # 八位二进制 256个电脑
Ipv6:
192.168.0.0 - 192.168.255.255
ip地址段:192.168.15.0 -- 192.168.15.255
DHCP:自动分配IP地址
Arp表:保存着ip地址和mac地址对应关系
Arp协议:通过ip地址获取mac地址
子网掩码:计算两个ip地址是否属于同一网段:
255.255.255.0
源ip地址:192.168.15.46
11000000.10101000.00001111.00101110
11111111.11111111.11111111.00000000
11000000.10101000.00001111.00000000 #192.168.15.0
目标的ip:192.168.16.30 #192.168.16.0
路由器:转发消息
路由协议:计算路由转发消息的最优路径
端口号:0 - 65535,确定电脑上的应用程序的
Ip地址+端口 = 确定某个电脑上的某个应用程序
初识socket
服务端
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import socket #实例化socket对象 server = socket.socket() #创建了一部手机 ip_port = ('192.168.15.46',8001) #买个电话卡 #绑定IP地址和端口 server.bind(ip_port) #插卡 #监听, server.listen() #开机 #等待客户端连接 print(111111) conn,addr = server.accept() #等别人的电话,阻塞 print(222222) #发送消息 # conn.send(b'leihao') #必须是bytes类型的数据 server_msg = input('服务端说>>>>') conn.send(server_msg.encode('utf-8')) #必须是bytes类型的数据 #接受消息 from_client_msg = conn.recv(1024) #1024,一次性能够接受的消息大小1024B print('来自客户端的消息',from_client_msg) conn.send(b'gun') #挂电话,关闭通道 conn.close() #关机,关闭socket server.close()
客户端
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import socket client = socket.socket() # #服务端的ip地址和端口 server_ip_port = ('192.168.15.46',8001) #连接服务端的应用程序 client.connect(server_ip_port) print('ssss') from_server_msg1 = client.recv(1024) #阻塞 print('mmmm') print('服务端第一条消息:',from_server_msg1.decode('utf-8')) client.send(b'yuema') from_server_msg = client.recv(1024) print('来自服务端的消息:',from_server_msg) client.close()
加强服务端
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import socket #实例化socket对象 server = socket.socket() #创建了一部手机 ip_port = ('192.168.15.46',8001) #买个电话卡 #绑定IP地址和端口 server.bind(ip_port) #插卡 #监听, server.listen() #开机 #等待客户端连接 print(111111) conn,addr = server.accept() #等别人的电话,阻塞 print(222222) #发送消息 # conn.send(b'leihao') #必须是bytes类型的数据 while 1: server_msg = input('马云>>>>') conn.send(server_msg.encode('utf-8')) #必须是bytes类型的数据 #接受消息 from_client_msg = conn.recv(1024) #1024,一次性能够接受的消息大小1024B print('来自麻花藤的消息',from_client_msg.decode('utf-8')) # conn.send(b'gun') #挂电话,关闭通道 conn.close() #关机,关闭socket server.close()
加强客户端
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import socket client = socket.socket() # #服务端的ip地址和端口 server_ip_port = ('192.168.15.46',8001) #连接服务端的应用程序 client.connect(server_ip_port) while 1: from_server_msg1 = client.recv(1024) #阻塞 print('来自马云消息:',from_server_msg1.decode('utf-8')) client_msg = input('麻花藤>>>') client.send(client_msg.encode('utf-8')) from_server_msg = client.recv(1024) print('来自服务端的消息:',from_server_msg) client.close()