发送端将要发送的数据打包成UDP数据包,包括目标IP地址、目标端口号、数据长度和数据内容等信息。
发送端将UDP数据包发送给目标主机。
接收端接收到UDP数据包后,将数据包中的信息解析出来,包括发送端IP地址、发送端端口号、数据长度和数据内容等信息。
接收端根据发送端的IP地址和端口号,将数据传输到相应的应用程序中进行处理。
import socket
# 创建UDP套接字对象
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定本地IP地址和端口号
local_addr = ('127.0.0.1', 8888)
udp_socket.bind(local_addr)
# 发送UDP数据
dest_addr = ('127.0.0.1', 9999)
send_data = 'Hello, UDP!'
udp_socket.sendto(send_data.encode('utf-8'), dest_addr)
# 接收UDP数据
recv_data, remote_addr = udp_socket.recvfrom(1024)
print('Received from %s:%s' % remote_addr)
print(recv_data.decode('utf-8'))
# 关闭UDP套接字对象
udp_socket.close()
import socket
if __name__ == '__main__':
# 创建UDP套接字对象
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 设置为非阻塞模式
udp_socket.setblocking(False)
# 绑定本地IP地址和端口号
local_addr = ('127.0.0.1', 8888)
udp_socket.bind(local_addr)
while True:
try:
# 接收UDP数据
recv_data, remote_addr = udp_socket.recvfrom(1024)
print('Received from %s:%s' % remote_addr)
print(recv_data.decode('utf-8'))
# 发送UDP数据
send_data = 'Hello, UDP客户端!'
udp_socket.sendto(send_data.encode('utf-8'), remote_addr)
except BlockingIOError:
pass
# 发送UDP数据
send_data = 'Hello, UDP客户端!'
udp_socket.sendto(send_data.encode('utf-8'), remote_addr)
# 关闭UDP套接字对象
udp_socket.close()
import socket
if __name__ == '__main__':
# 创建UDP套接字对象
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 设置为非阻塞模式
udp_socket.setblocking(False)
# 发送UDP数据
dest_addr = ('127.0.0.1', 8888)
send_data = 'Hello, UDP服务端!'
udp_socket.sendto(send_data.encode('utf-8'), dest_addr)
# 接收UDP数据
while True:
try:
recv_data, remote_addr = udp_socket.recvfrom(1024)
print('Received from %s:%s' % remote_addr)
print(recv_data.decode('utf-8'))
break
except BlockingIOError:
pass
# 关闭UDP套接字对象
udp_socket.close()
广播地址(Broadcast Address)是专门用于同时向网络中所有工作站进行发送的一个地址
广播地址是一个特殊的IP地址,用于向一个网络中的所有设备发送数据。在IPv4中,广播地址是由主机地址全为1和网络地址组成的地址。例如,如果你的网络地址是192.168.1.0,那么广播地址就是192.168.1.255。
import socket
if __name__ == '__main__':
# 创建UDP套接字对象 将UDP套接字对象设置为广播模式
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 设置广播选项 socket.SO_BROADCAST广播
udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
# 广播地址
dest_addr = ('192.168.1.255', 8888)
# 发送UDP数据
send_data = 'Hello, UDP broadcast!'
udp_socket.sendto(send_data.encode('utf-8'), dest_addr)
# 关闭UDP套接字对象
udp_socket.close()