一、C\S 架构 client server
软件c\s架构:客户端\服务端架构:京东,淘宝,今日头条,qq,微信
B\S架构:浏览器(browser)\服务端>>>统一接口
硬件C\S架构:打印机
二、网络通信整个流程
网线:传输电信号
集线器:将所有连接到集线器的网络设备联通起来
交换机:升级版的集线器
网卡:接收电信号
MAC地址:即物理地址,8C-EC-4B-88-B9-X9 # 前三位厂商编号,后三位生产流水号
单播:单台pc向交换机发送消息(包含目标ip)
广播:交换机将消息广播,对应目的ip的pc接收消息,其他pc丢弃消息
广播风暴:网络拥堵,信息不安全
ip 地址:
ipv4 地址:192.168.15.46 # 4个点分十进制数字
作用,划分广播域,一个网段理论上可以划分256个地址,0-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
1 import socket 2 #创建一个socket对象 3 server = socket.socket() #相当于创建了一部电话 4 ip_port = ('192.168.111.1',8001) #创建一个电话卡 5 server.bind(ip_port) #插上电话卡 6 server.listen(5) #监听着电话,我能监听5个,接到一个电话之后,后面还能有四个人给我打电话,但是后面这四个人都要排队等着,等着我第一个电话挂掉,再来第6个的时候,第六个人的手机会报错 7 print('11111') 8 #等着别人给我打电话,打来电话的时候,我就拿到了和对方的这个连线通道conn和对方的电话号码addr 9 conn,addr = server.accept() #阻塞住,一直等到有人连接我,连接之后得到一个元祖,里面是连线通道conn和对方的地址(ip+端口) 10 print('22222') 11 print(conn) 12 print('>>>>>>>>>',addr) 13 while True: 14 from_client_data = conn.recv(1024) #服务端必须通过两者之间的连接通道来收消息 15 from_client_data = from_client_data.decode('utf-8') 16 print(from_client_data) 17 if from_client_data == 'bye': 18 break 19 server_input = input('明威说>>>>:') 20 conn.send(server_input.encode('utf-8')) 21 if server_input == 'bye': 22 break 23 conn.close() #挂电话 24 server.close() #关手机
1 import socket 2 #创建一个socket对象 3 server = socket.socket() #相当于创建了一部电话 4 ip_port = ('192.168.111.1',8001) #创建一个电话卡 5 server.bind(ip_port) #插上电话卡 6 server.listen(5) #监听着电话,我能监听5个,接到一个电话之后,后面还能有四个人给我打电话,但是后面这四个人都要排队等着,等着我第一个电话挂掉,再来第6个的时候,第六个人的手机会报错 7 print('11111') 8 #等着别人给我打电话,打来电话的时候,我就拿到了和对方的这个连线通道conn和对方的电话号码addr 9 conn,addr = server.accept() #阻塞住,一直等到有人连接我,连接之后得到一个元祖,里面是连线通道conn和对方的地址(ip+端口) 10 print('22222') 11 print(conn) 12 print('>>>>>>>>>',addr) 13 while True: 14 from_client_data = conn.recv(1024) #服务端必须通过两者之间的连接通道来收消息 15 from_client_data = from_client_data.decode('utf-8') 16 print(from_client_data) 17 if from_client_data == 'bye': 18 break 19 server_input = input('明威说>>>>:') 20 conn.send(server_input.encode('utf-8')) 21 if server_input == 'bye': 22 break 23 conn.close() #挂电话 24 server.close() #关手机
注意:先运行server,然后再运行client,然后你会发现client这个文件再输出台的地方让你输入内容,你输入一个内容然后回车,你会发现server那边的控制台就输出了以client发送的内容