潍坊做网站软件,网页设计与网站建设期末考试试卷,焦作市网站建设公司,云微助力网站建设文章目录 版权声明UDP网络应用程序开发UDP初识UDP知识要点socket类的使用UDP发送数据开发流程分析UDP服务客户端通信栗子UDP广播发送 版权声明
本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明#xff0c;所有版权属于黑马程序员或相关权利人所有。… 文章目录 版权声明UDP网络应用程序开发UDP初识UDP知识要点socket类的使用UDP发送数据开发流程分析UDP服务客户端通信栗子UDP广播发送 版权声明
本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明所有版权属于黑马程序员或相关权利人所有。本博客的目的仅为个人学习和交流之用并非商业用途。我在整理学习笔记的过程中尽力确保准确性但无法保证内容的完整性和时效性。本博客的内容可能会随着时间的推移而过时或需要更新。若您是黑马程序员或相关权利人如有任何侵犯版权的地方请您及时联系我我将立即予以删除或进行必要的修改。对于其他读者请在阅读本博客内容时保持遵守相关法律法规和道德准则谨慎参考并自行承担因此产生的风险和责任。本博客中的部分观点和意见仅代表我个人不代表黑马程序员的立场。
UDP网络应用程序开发
UDP初识
UDPUser Datagram Protocol是一种无连接的传输层协议它不保证数据传输的可靠性和有序性但具有传输速度快的优点。UDP协议可以用于音频、视频、游戏等实时应用场景因为这些应用对数据传输的实时性要求较高而对数据传输的可靠性和有序性要求较低。UDP通信的优点是速度快适用于实时应用场景但缺点是不可靠容易丢失数据因此在需要保证数据传输可靠性的场景下不适用。 UDP通信的基本流程如下 发送端将要发送的数据打包成UDP数据包包括目标IP地址、目标端口号、数据长度和数据内容等信息。 发送端将UDP数据包发送给目标主机。 接收端接收到UDP数据包后将数据包中的信息解析出来包括发送端IP地址、发送端端口号、数据长度和数据内容等信息。 接收端根据发送端的IP地址和端口号将数据传输到相应的应用程序中进行处理。 UDP知识要点
UDP网络通信本质不区分客户端和服务端在实际应用中通常会将发送数据的一方称为客户端将接收数据的一方称为服务端。 在实际应用中客户端通常是发送请求的一方服务端通常是提供服务的一方。例如在客户端与服务端之间进行网络游戏通信时客户端会向服务端发送游戏请求服务端会接收请求并处理然后再将处理结果发送回客户端。在这种情况下客户端和服务端的角色是明确的。 UDP协议可以直接通过对方IP地址和端口号发送数据而不需要像TCP协议那样需要先建立连接。 在UDP协议中发送数据时需要指定目标主机的IP地址和端口号数据直接发送到目标主机。接收数据时可以通过绑定本地IP地址和端口号来指定接收数据的地址和端口号然后等待数据的到来。当有数据到达时就可以直接从数据包中获取发送方的IP地址和端口号从而实现直接通信。 在UDP协议中可以指定一个固定的端口用于发送和接收数据也可以让操作系统自动选择一个空闲端口。 在发送UDP数据时可以指定源端口和目标端口。如果指定了源端口那么每次发送数据时就会使用该端口。如果未指定源端口操作系统会自动选择一个空闲端口然后发送数据。在接收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套接字对象绑定本地IP地址和端口号接收UDP数据发送UDP数据关闭UDP套接字对象 客户端 创建UDP套接字对象发送UDP数据接收UDP数据关闭UDP套接字对象
UDP服务客户端通信栗子
UDP服务端
import socketif __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))breakexcept BlockingIOError:pass# 关闭UDP套接字对象udp_socket.close()
UDP广播发送 广播地址(Broadcast Address)是专门用于同时向网络中所有工作站进行发送的一个地址 广播地址是一个特殊的IP地址用于向一个网络中的所有设备发送数据。在IPv4中广播地址是由主机地址全为1和网络地址组成的地址。例如如果你的网络地址是192.168.1.0那么广播地址就是192.168.1.255。
import socketif __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()