2021-05-12 第二阶段day29

一、数据库的二进制文件

1、存入二进制文件

with open("Tom.jpeg","rb") as file: # 二进制读取
    data = file.read()

sql = "update class set image=%s where id=1;"
cur.execute(sql,[data])
db.commit()

2、提取二进制文件

sql = "select name,image from class where id=1;"
cur.execute(sql)
tmp = cur.fetchone()
with open(tmp[0]+'.jpeg',"wb") as f: # 二进制写入
    f.write(tmp[1])

二、网络通信标准

1、OSI标准化流程模型

在这里插入图片描述

2、TCP/IP模型

在这里插入图片描述


三、通信地址

1、IP地址

(1)定义

在网络中标识一台计算机的地址编号。

(2)分类

  • IPv4 : 192.168.1.5(点分十进制)
  • IPv6 :fe80::80a:76cf:ab11:2d73(冒分十六进制)

(3)相关命令

ifconfig:查看Linux系统下计算机的IP地址
在这里插入图片描述

ping [ip]:查看计算机的连通性
在这里插入图片描述

(4)公网IP与内网IP

公网IP指的是连接到互联网上的公共IP地址,大家都可以访问。
内网IP指的是一个局域网络范围内由网络设备分配的IP地址。

在这里插入图片描述

2、端口号

端口:网络地址的一部分,在一台计算机上,每个网络程序对应一个端口。
取值范围:0–65535
端口号特点:一台计算机上的网络应用所使用的端口不会重复。

三、服务端与客户端

  • 服务端(Server):服务端是为客户端服务的,服务的内容诸如向客户端提供资源,保存客户端数据,处理客 户端请求等。
  • 客户端(Client) :也称为用户端,是指与服务端相对应,为客户提供一定应用功能的程序,我们平时使用的 手机或者电脑上的程序基本都是客户端程序。
    客户端与服务端

四、UDP传输服务

1、套接字简介socket

是实现网络编程进行传输的一种技术手段。网络上各种各样的网络服务大多都是基于 Socket 来完成通信的。
python中socket有标准库模块。
import socket

2、UDP套接字编程

(1)创建套接字

语法:

变量名 = socket.socket(family,type)
family:网络地址类型。AF_INET表示ipv4、AF_INET6表示ipv6
type:套接字类型 SOCK_DGRAM表示udp套接字(数据报套接字)
返回值:套接字对象

eg:

sockfd = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

(2)绑定地址(服务器端需要)

语法:

变量名.bind(addr)
参数: 二元元组 (ip,port) (‘0.0.0.0’,8888)
port为端口号,可自行设定

  1. 本地测试 客户端使用127.0.0.1/localhost访问且需要在同一计算机上
sockfd.bind(("127.0.0.1",8888))
  1. 网络地址,客户端通过192.168.2.232访问 ifconfig查看
sockfd.bind(("192.168.2.232",8888))
  1. 自动获取地址 等于上面两种情况
sockfd.bind(("0.0.0.0",8888))

(3)消息的收发

1、接受消息

语法:

data,addr = sockfd.recvfrom(buffersize)
功能: 接收UDP消息
参数: 每次最多接收多少字节
返回值: data 接收到的内容(bytes格式)
addr 消息发送方地址 客户端地址

recvfrom函数是阻塞函数,等到有人发消息才会进行下去,不然就等待。类input。
eg:

data, addr = udp_socket.recvfrom(1024)
print(f"从服务端接收:{data.decode()}") # data为字节串,必须转化为字符串
2、发送消息

语法:

n = sockfd.sendto(data,addr)
功能: 发送UDP消息
参数: data 发送的内容 bytes格式
addr 目标地址
返回值:发送的字节数

eg:

n = udp_socket.sendto(b"Thanks", addr)
# 或者
n = udp_socket.sendto("Thanks".encode(), addr)
# 发送时必须以字节串形式发送
3、关闭套接字
sockfd.close()

3、客户端与服务器端的流程图

在这里插入图片描述

4、server与client请求与应答示例

"""
    UDP服务端
"""
from socket import *
udp_socket = socket(AF_INET, SOCK_DGRAM)
# 绑定地址
udp_socket.bind(("0.0.0.0", 8888))
# 先接收
data, addr = udp_socket.recvfrom(1024)
print(f"从{addr}收到:{data.decode()}")  # 收到的是字节串,要转化为字符串

# 后发数据
n = udp_socket.sendto(b"Thanks", addr)
print(f"发了{n}个字节")

udp_socket.close()
"""
    udp客户端
"""
from socket import *

# 服务端地址
ADDR = ("192.168.2.232", 8888)
udp_socket = socket(AF_INET, SOCK_DGRAM)
# 先发
msg = input(">>")
udp_socket.sendto(msg.encode(), ADDR)
# 后收
data, addr = udp_socket.recvfrom(1024)
print(f"从服务端接收:{data.decode()}")

udp_socket.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值