本文介绍: 广播地址一个特殊的IP地址,用于一个网络中的所有设备发送数据。在IPv4中,广播地址是由主机地址全为1和网络地址组成的地址。接收端接收到UDP数据包后,将数据包中的信息解析出来,包括发送端IP地址、发送端端口号数据长度数据内容信息。发送端将要发送的数据打包成UDP数据包,包括目标IP地址、目标端口号数据长度数据内容信息广播地址(Broadcast Address)是专门用于同时向网络中所有工作站进行发送的一个地址。接收端根据发送端的IP地址和端口号,将数据传输到相应的应用程序中进行处理

版权声明

UDP网络应用程序开发

UDP初识

  1. 发送端将要发送的数据打包成UDP数据包,包括目标IP地址、目标端口号、数据长度和数据内容信息

  2. 发送端将UDP数据包发送给目标主机

  3. 接收端接收到UDP数据包后,将数据包中的信息解析出来,包括发送端IP地址、发送端端口号、数据长度和数据内容等信息

  4. 接收端根据发送端的IP地址和端口号,将数据传输到相应的应用程序中进行处理


UDP知识要点

  1. UDP网络通信本质不区分客户端服务端,在实际应用中,通常会将发送数据的一方称为客户端,将接收数据的一方称为服务端
  2. UDP协议可以直接通过对方IP地址和端口号发送数据,而不需要像TCP协议那样需要先建立连接
  3. 在UDP协议中,可以指定一个固定的端口用于发送和接收数据,也可以操作系统自动选择一个空闲端口。

socket类的使用

  1. 创建UDP套接字对象
    import socket
    
    # 创建UDP套接字对象
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
  2. 绑定本地IP地址和端口号:
    # 绑定本地IP地址和端口号
    local_addr = ('127.0.0.1', 8888)
    udp_socket.bind(local_addr)
    
  3. 发送UDP数据:
    # 发送UDP数据
    dest_addr = ('127.0.0.1', 9999)
    send_data = 'Hello, UDP!'
    udp_socket.sendto(send_data.encode('utf-8'), dest_addr)
    
  4. 接收UDP数据:
    # 接收UDP数据
    recv_data, remote_addr = udp_socket.recvfrom(1024)
    print('Received from %s:%s' % remote_addr)
    print(recv_data.decode('utf-8'))
    
  5. 关闭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()

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广播发送

  • 广播地址(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()

原文地址:https://blog.csdn.net/yang2330648064/article/details/134592686

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_16037.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注