[toc]
python基础二十六 网络编程-udp编程
1.Socket编程简介
1.1 含义
socket:套接字,通过网路完成进程间通信的方式(区别于一台计算机之间进程通信)

1.2 说明
-
socket本质是
编程接口(API):socket是对TCP/IP协议的封装,socket只是个编程接口不是协议,通过socket我们才能使用TCP/IP协议簇 -
TCP/IP也要提供可供程序员做网络开发所用的接口,这就是socket编程接口,socket提供了网络通信的能力
-
套接字之间的连接过程可分为3个步骤:
- 1.服务器监听
- 2.客户端请求
- 3.连接确认
2.创建socket
语法
#导入套接字模块
from socket import *
#创建套接字对象
s = socket(socket.AF_NENT,SOCK_DGRAM)
参数说明
AF_NENT #指明IPV4
SOCKET_DGRAM #套接字 类型,SOCKET_DGRAM是tcp协议
SOCKET_STREAM #套接字类型,SOCKET_STREAM是udp协议
3.socket编程-udp
3.1 udp说明
3.1.1 概念
UDP:User Data Protocol,用户数据报协议,是一个无连接的简单的面向数据报的传输层协议,udp不提供可靠性,它只是把应用层传给IP层的数据报发出去,但是并不能保证它们能到达目的地,由于udp在传输数据报前不用在客户端和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快
3.1.2 udp用处
udp一般用于多点通信和实时的数据业务,比如
- 语音广播
- 视频
- TFTP(简单文件传输)
3.2 使用udp发送数据
第一步
发送数据,为看到效果先安装网络调试助手NetAssist(windows安装)
NetAssist初始配置,协议选择UDP,IP地址会自动识别本机地址,端口号任意选择一个可使用的,配置完成后点击连接按钮

from socket import *
#AF_INET表示IPV4 SOCK_DGRAM表示udp协议
s = socket(AF_INET,SOCK_DGRAM)
#NetAssist中的默认编码是gb2312,这里需要指定一下,否则显示的信息会是乱码
s.sendto("你好".encode("gb2312"),("192.168.34.90",8080))
第二步
运行以上代码,会在NetAssist中看到效果
这里可以看到发送的你好已经在NetAssist中收到

3.3 使用udp接收数据
3.3.1 udp接收数据
from socket import *
s = socket(AF_INET, SOCK_DGRAM) #创建套接字
addr = ('127.0.0.1', 8888) #准备接收方地址
data = input("请输入:")
s.sendto(data.encode(),addr) #等待接收数据
redata = s.recvfrom(1024) #1024表示本次接收的最大字节数
print(redata)
s.close()
mac和linux中运行程序,输入内容后程序会卡住,原因未知⚠️⚠️⚠️
windows中运行程序,输入内容后会返回如下结果
(b'abc', ('127.0.0.1', 8888))
3.2.2 udp绑定信息 bind
如果信息(IP地址、端口号)没有绑定,每发送一次信息,系统会随机分配一个端口,还要避免同一台计算机上的不同进程端口号相同的问题
