1、架构
C/S架构(鼻祖)
c:client 客户端
s:server 服务器
B/S架构(隶属于C/S架构)
b:browser 浏览器
s: server 服务器
B/S架构的优点:统一了应用的入口(是一个趋势)
=====================网络编程基础====================
2、同一台电脑上两个py文件通信:文件
网卡:网卡生产厂商生产的,不是电脑厂商生产的
网卡上有一个mac地址,又叫做物理地址,全世界唯一
查看mac地址命令:ipconfig -all
3、两台电脑如何通信:一根网线
4、几十台电脑如何通信:局域网
交换机通信:
广播:吼一嗓子
单播:方向固定的向某一个主机发送
组播:朝某一部分或某一组主机发送
ip地址:是一个四位点分十进制的一串数字
子网掩码:是计算机根据你的ip地址生产的一个东西
网段:ip地址 &(与) 子网掩码
ip :192.168.12.84
11000000.10101000.00001100.01010100
11111111.11111111.11111111.00000000
-----------------------------------
11000000.10101000.00001100.00000000
192.168.12.0
子网:255.255.255.0
5、更多电脑之间的通信:
广域网 交换机+路由器+代理ip
6、库 == 模块 :别人已经写好的代码,我可以直接拿来调用
tcp和udp协议都是基于socket模块
tcp:安全可靠,面向连接,字节流服务--代表没有边界
udp:不安全不可靠,不面向连接,但是效率高
7、端口号:
ip + prot 唯一确定一台主机上的某一个程序
允许开发人员使用的端口号范围从8000开始 8000-10000
8、tcp协议的三次握手过程:
客户端先发:我想请求连接
服务器发: 同意,我也想连接你
客户端发: 同意连接
9、tcp协议的四次挥手过程:
客户端:我想断开连接
服务器:行
服务器:我也想和你断开连接
客户端:行
面试题:
1、你知道哪些研发相关的架构?
c/s b/s(统一了应用的接口)
2、arp协议做了什么事情?
通过ip地址找到对应的mac地址
3、交换机的通讯方式?
广播,单播,组播
4、你认为tcp和udp的区别?
tcp:安全,面向连接
udp:快
5、请描述出osi五层模型?
应用层(py文件)----传输层(tcp,udp协议)----网络层(ip协议)----数据链路层(网卡,arp协议)----物理层(网线,集线器,电信号)
6、网段ip怎么确定?
ip地址 按位与 子网掩码
7、请描述B/S架构的优势
b/s(统一了应用的接口)
====================socket====================
tcp协议,不允许在同一时间点同时和多个客户端连接通信
s:server 服务器
import socket sk = socket.socket() #创建 sk.bind(("127.0.0.1",8090)) #绑定 sk.listen(5) #监听 while True: fd,addr = sk.accept() # fd 收到的信息 addr 客户端的地址 while 1: msg_s = input(">>>") fd.send(msg_s.encode("utf-8")) # 发送 if msg_s == "q": break msg_r = fd.recv(1024).decode('utf-8') #接收 if msg_r == "q": break print(msg_r) fd.close() sk.close()
c:client 客户端
import socket sk = socket.socket() sk.connect(('127.0.0.1',8090)) #连接 while True: msg_r = sk.recv(1024).decode('utf-8') #接收 if msg_r == "q": break print(msg_r) msg_s = input(">>>") sk.send(msg_s.encode('utf-8')) #发送 if msg_s == "q": break sk.close()
udp协议,允许在同一个时间点同时和多个客户端连接通信
s:server 服务器
import socket import random ls = ["\033[1;"+str(i)+"m" for i in range(30,38)] #生成颜色
print(socket.gethostbyname(socket.gethostname())) #查看本机的ip地址
sk = socket.socket(type=socket.SOCK_DGRAM) # SOCK_DGRAM == udp协议 sk.bind(('192.168.12.130',8080)) # 本机的ip地址 while True:
msg_s,addr = sk.recvfrom(1024) # msg_s 接收信息 msg_s = msg_s.decode('utf-8') a = random.choices(ls)
print("%s %s \033[0m" % (a[0],msg_s)) a = input(">>>").encode('utf-8') sk.sendto(a,addr) #回复信息
c:client 客户端
import socket name = input('<<<<') sk = socket.socket(type=socket.SOCK_DGRAM) while 1: tall = input('<<') tall = name+':'+tall if tall == 'q': break sk.sendto(tall.encode('utf-8'),('192.168.12.130',8080)) conn, addr = sk.recvfrom(1024) msg_r = conn.decode('utf-8') print(f'\033[0;32;40m{name} : \033[1;32;44m{msg_r}\033[0m') sk.close()
================用udp协议获取时间=============
s:server 服务器
import socket import time
sk = socket.socket(type=socket.SOCK_DGRAM) sk.bind(("127.0.0.1",8080)) while True: tm,addr = sk.recvfrom(1024) #接收 tm_f = time.strftime(tm.decode('utf-8')) #时间转换 sk.sendto(tm_f.encode('utf-8'),addr) #发送 sk.close()
c:client 客户端
import socket import time sk = socket.socket(type=socket.SOCK_DGRAM) tm = input("请输入时间格式:") while True: sk.sendto(tm.encode("utf-8"),("127.0.0.1",8080)) #发送 tma,addr = sk.recvfrom(1024) #接收 print(tma.decode("utf-8")) time.sleep(3) sk.close() # %Y-%m-%d %H:%M:%S 时间格式