本文介绍: 广播地址是一个特殊的IP地址,用于向一个网络中的所有设备发送数据。在IPv4中,广播地址是由主机地址全为1和网络地址组成的地址。接收端接收到UDP数据包后,将数据包中的信息解析出来,包括发送端IP地址、发送端端口号、数据长度和数据内容等信息。发送端将要发送的数据打包成UDP数据包,包括目标IP地址、目标端口号、数据长度和数据内容等信息。广播地址(Broadcast Address)是专门用于同时向网络中所有工作站进行发送的一个地址。接收端根据发送端的IP地址和端口号,将数据传输到相应的应用程序中进行处理。
版权声明
- 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明,所有版权属于黑马程序员或相关权利人所有。本博客的目的仅为个人学习和交流之用,并非商业用途。
- 我在整理学习笔记的过程中尽力确保准确性,但无法保证内容的完整性和时效性。本博客的内容可能会随着时间的推移而过时或需要更新。
- 若您是黑马程序员或相关权利人,如有任何侵犯版权的地方,请您及时联系我,我将立即予以删除或进行必要的修改。
- 对于其他读者,请在阅读本博客内容时保持遵守相关法律法规和道德准则,谨慎参考,并自行承担因此产生的风险和责任。本博客中的部分观点和意见仅代表我个人,不代表黑马程序员的立场。
UDP网络应用程序开发
UDP初识
- UDP(User Datagram Protocol)是一种无连接的传输层协议,它不保证数据传输的可靠性和有序性,但具有传输速度快的优点。
- UDP协议可以用于音频、视频、游戏等实时应用场景,因为这些应用对数据传输的实时性要求较高,而对数据传输的可靠性和有序性要求较低。
- UDP通信的优点是速度快,适用于实时应用场景,但缺点是不可靠,容易丢失数据,因此在需要保证数据传输可靠性的场景下不适用。
UDP通信的基本流程如下:
UDP知识要点
- UDP网络通信本质不区分客户端和服务端,在实际应用中,通常会将发送数据的一方称为客户端,将接收数据的一方称为服务端。
- UDP协议可以直接通过对方IP地址和端口号发送数据,而不需要像TCP协议那样需要先建立连接。
- 在UDP协议中,可以指定一个固定的端口用于发送和接收数据,也可以让操作系统自动选择一个空闲端口。
socket类的使用
- 参看python之TCP的网络应用程序开发的socket类的使用部分的内容
- 栗子
- 创建UDP套接字对象:
import socket # 创建UDP套接字对象 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- 绑定本地IP地址和端口号:
# 绑定本地IP地址和端口号 local_addr = ('127.0.0.1', 8888) udp_socket.bind(local_addr)
- 发送UDP数据:
# 发送UDP数据 dest_addr = ('127.0.0.1', 9999) send_data = 'Hello, UDP!' udp_socket.sendto(send_data.encode('utf-8'), dest_addr)
- 接收UDP数据:
# 接收UDP数据 recv_data, remote_addr = udp_socket.recvfrom(1024) print('Received from %s:%s' % remote_addr) print(recv_data.decode('utf-8'))
- 关闭UDP套接字对象:
# 关闭UDP套接字对象 udp_socket.close()
UDP发送数据开发流程分析
UDP服务客户端通信栗子
- UDP服务端
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()
- UDP客户端
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()
UDP广播发送
-
广播地址是一个特殊的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()
原文地址:https://blog.csdn.net/yang2330648064/article/details/134592686
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_16037.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。