一内容回顾
网络基础
网络应用开发架构
B/S架构 浏览器直接作为客户端的程序
C/S架构
B/S是特殊的C/S
osi七层模型
应用层 python代码 http https ftp smtp
socket
传输层 port tcp/udp协议 四层交换机 四层路由器
网络层 ip协议 三层路由器 三层交换机
数据链路层 mac地址 arp协议 网卡 二层交换机
物理层
tcp网络模型中
arp协议-网络层
二.今日内容
tcp协议
代码
协议特点
三次握手
为什么使用tcp协议
四次挥手
代码进阶 完善
udp协议
代码
协议特点
代码的进阶
tcp
import socket sk = socket.socket() sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 只在测试的时候添加,到正式的生产环境中应该去掉 sk.bind(('127.0.0.1',9000)) sk.listen() while True: conn,addr = sk.accept() # 接电话 while True: msg =conn.recv(1024) print(msg.decode('utf-8')) message = input('>>>') conn.send(message.encode('utf-8')) if message == 'q': break conn.close() sk.close()
# 起web服务 永远先启动服务端
# server端 - 服务端
# 端口被占用的原因 # bind 已经向操作系统申请了一个9000的端口 # 如果9000没有被占用,那么就批准给你使用 # 直到sk.close的时候,这个端口才归还给操作系统 # 程序结束但是忘记close关闭, # 那么操作系统就不能及时发现这个端口已经被归还 # 当你重启程序再次申请使用9000端口的时候 # 操作系统告诉你这个端口被占用了 # 网络上是否连通决定了两台电脑能否通信 # 和tcp建立了连接之后才能通信完全是两回事儿 # 可靠的协议 # 为什么要有tcp协议 # 可靠 # 全双工 # 效率低 # 建立连接 : 三次握手 # 断开连接 : 四次挥手 # 社交软件 # tcp就不适用了 udp协议
# 1.连接资源有限 # 同一时刻只能和一个客户端沟通 # 2.每一次数据的发送都需要一个回执来确保数据可靠 # 数据发送的效率不高
client
import socket sk = socket.socket() sk.connect(('127.0.0.1',9000)) while True: message = input('>>>') sk.send(message.encode('utf-8')) ret = sk.recv(1024) if ret == b'q': break print(ret.decode('utf-8')) sk.close()
udp
server
import socket sk = socket.socket(type = socket.SOCK_DGRAM) addr = ('127.0.0.1',9000) sk.bind(addr) while True: # udp来说 第一个信息 必须是先接收 msg,cli_addr = sk.recvfrom(1024) print(msg.decode('utf-8')) # message = input('>>>') sk.sendto('收到'.encode('utf-8'),cli_addr) sk.close() # 1 先把udp协议的cs调通 # 2 让cs之间通信多说点儿话 # 3 让多个client和server进行通信 # 在server端根本就不应该有input
client
import socket sk = socket.socket(type = socket.SOCK_DGRAM) # b'hello' == 'hello'.encode('utd-8') sk.sendto(b'hello',('127.0.0.1',9000)) msg,ser_addr = sk.recvfrom(1024) print(msg) print(ser_addr) sk.close()