# 网络概念
# 网络架构
# C/S client-server
#
# B/S browser-server
# web服务
# B/S是特殊的C/S
# 物理设备
# 网卡 mac地址 全球唯一的物理地址
# 交换机 完成局域网内的多台机器之间的通信
# 单播 组播 广播
# 只能识别mac地址
# arp协议(地址解析协议) :
# 通过ip地址获取它的mac地址
# 由交换机完成的
# 广播 单播
# 路由器 完成局域网与局域网之间的联系
# 能识别ip地址
# 网段
# 网关ip
# 访问局域网外部服务的一个出口ip
# ip地址在网络上定位一台机器
# ipv4
# ipv6
# port能够在网络上定位一台机器上的一个服务
# 0-65535
2.tcp协议和udp协议
# 概念
# tcp协议 -- 打电话
# 可靠 慢 全双工通信
# 建立连接的时候 : 三次握手
# 客户端-(请求连接)-服务端-(同意链接,请求连接)-客户端-(同意链接)-服务端
# 断开连接的时候 : 四次挥手
# 客户端-(请求断开)-服务端-(同意断开)-(请求断开)-客户端-(同意断开)-服务端
# 在建立起连接之后
# 发送的每一条信息都有回执
# 为了保证数据的完整性,还有重传机制
# 长连接 :会一直占用双方的端口
# IO(input,output)操作,输入和输出是相对内存来说的
# write send - output
# read recv - input
# 能够传递的数据长度几乎没有限制
# 应用场景
# TCP 文件的上传下载(发送邮件、网盘、缓存电影)
# udp协议 -- 发短信
# 无连接的 速度快
# 可能会丢消息
# 能够传递的数据的长度是有限的,是根据数据传递设备的设置有关系
# 应用场景
# UDP 即时通信类的(qq、微信、飞秋)
# osi七层模型
# 应用层
# 表示层
# 会话层
# 传输层
# 网络层
# 数据链路层
# 物理层
# osi五层协议 协议 物理设备
# 应用层 http https ftp smtp
# python代码 hello
# 传输层 tcp/udp协议 端口 四层交换机、四层路由器
# 网络层 ipv4/ipv6协议 路由器、三层交换机
# 数据链路层 mac地址 arp协议 网卡 、交换机
# 物理层
# 代码部分
# socket是什么
# socket 套接字
# python socket模块 完成socket的功能
# 工作在应用层和传输层之间的抽象层
# 帮助我们完成了所有信息的组织和拼接
# sokcet对于程序员来说 已经是网络操作的底层了
# socket历史
# 同一台机器上的两个服务之间的通信的
# 基于文件
# 基于网路的多台机器之间的多个服务通信
# 2.使用socket完成tcp协议的web通信
# server.py
import socket
sk = socket.socket()
sk.bind(('127.0.0.1',9000))
sk.listen() # n 允许多少客户端等待
print('*'*20)
while True: # outer
conn,addr = sk.accept() # 阻塞
print(addr)
while True: # inner
msg = conn.recv(1024).decode('utf-8')
if msg.upper() == 'Q': break
print(msg)
inp = input('>>>')
conn.send(inp.encode('utf-8'))
if inp.upper() == 'Q':
break
conn.close()
sk.close()
# client.py
import socket
sk = socket.socket()
sk.connect(('127.0.0.1',9000))
while True:
inp = input('>>>')
sk.send(inp.encode('utf-8'))
if inp.upper() == 'Q':
break
msg = sk.recv(1024).decode('utf-8')
if msg.upper() == 'Q': break
print(msg)
sk.close()
# 3.使用socket完成udp协议的web通信
# server.py
import socket
sk = socket.socket(type = socket.SOCK_DGRAM)
sk.bind(('127.0.0.1',9000))
while True:
msg,client_addr = sk.recvfrom(1024)
print(msg.decode('utf-8'))
msg = input('>>>').encode('utf-8')
sk.sendto(msg,client_addr)
sk.close()
# client.py
import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
while True:
inp = input('>>>').encode('utf-8')
sk.