python UDP(udp)协议发送和接收的实例

下面是详细的攻略:

1. 简介

UDP(用户数据报协议)是一种面向无连接的传输协议,可以在不建立连接的情况下直接发送和接收数据,通信效率高,但不保证数据传输的可靠性。在Python中可以使用socket模块来实现UDP协议的发送和接收操作。

2. 发送数据

UDP发送数据分为以下几个步骤:

2.1 创建socket对象

import socket

udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

2.2 绑定端口(可选)

如果需要手动绑定端口,可以使用bind()方法:

udp_socket.bind(('192.168.1.100', 8888))

其中('192.168.1.100', 8888)表示服务器IP地址和端口号。

2.3 发送数据

使用sendto()方法发送数据,该方法需要传入两个参数:发送的数据和目标地址(包括IP地址和端口号)。

data = b'Hello, UDP!'    # 发送的数据,必须为bytes类型
dest_addr = ('192.168.1.200', 8888)    # 目标地址

udp_socket.sendto(data, dest_addr)

2.4 关闭socket

发送数据完成后一定要关闭socket,释放资源。

udp_socket.close()

以下是完整的UDP发送数据示例代码:

import socket

udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)   # 创建socket对象

# udp_socket.bind(('192.168.1.100', 8888))    # 绑定端口,可选

data = b'Hello, UDP!'    # 发送的数据,必须为bytes类型
dest_addr = ('192.168.1.200', 8888)    # 目标地址

udp_socket.sendto(data, dest_addr)    # 发送数据

udp_socket.close()    # 关闭socket

3. 接收数据

UDP接收数据的流程如下:

3.1 创建socket对象

import socket

udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

3.2 绑定端口

需要绑定端口来监听数据:

udp_socket.bind(('192.168.1.100', 8888))

3.3 接收数据

使用recvfrom()方法接收数据,该方法返回一个元组,包含接收到的数据和发送方的地址。

buf_size = 1024    # 缓冲区大小
data, remote_addr = udp_socket.recvfrom(buf_size)

3.4 关闭socket

接收数据完成后一定要关闭socket,释放资源。

udp_socket.close()

以下是一个完整的UDP接收数据示例代码:

import socket

udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)    # 创建socket对象
udp_socket.bind(('192.168.1.100', 8888))    # 绑定端口

buf_size = 1024    # 缓冲区大小
data, remote_addr = udp_socket.recvfrom(buf_size)    # 接收数据
print(f'Received data: {data} from {remote_addr}')

udp_socket.close()    # 关闭socket

4. 示例说明

示例1:UDP发送数据

在本示例中,我们通过UDP协议向目标地址发送一条消息,然后输出发送的数据。

import socket

udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)   # 创建socket对象

data = b'Hello, UDP!'    # 发送的数据,必须为bytes类型
dest_addr = ('127.0.0.1', 8888)    # 目标地址

udp_socket.sendto(data, dest_addr)    # 发送数据

print(f'Sent data: {data}')

udp_socket.close()    # 关闭socket

输出结果:

Sent data: b'Hello, UDP!'

示例2:UDP接收数据

在本示例中,我们使用UDP协议监听指定端口的数据,并输出接收到的数据和发送方的地址。

import socket

udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)    # 创建socket对象
udp_socket.bind(('127.0.0.1', 8888))    # 绑定端口

buf_size = 1024    # 缓冲区大小
data, remote_addr = udp_socket.recvfrom(buf_size)    # 接收数据
print(f'Received data: {data} from {remote_addr}')

udp_socket.close()    # 关闭socket

执行结果:

Received data: b'Hello, UDP!' from ('127.0.0.1', 65058)

注意,发送方的地址和端口号是随机生成的,每次执行都可能不同。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python UDP(udp)协议发送和接收的实例 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • qq帐号申诉技巧方法分享 以及浅谈qq的一些安全常识

    QQ账号申诉技巧方法分享 1. 申诉前的准备 在进行QQ账号申诉前需要将以下信息准备好: QQ号码和密码(必须是账号主人提供的信息); 绑定的手机号码/邮箱; 手机号码的运营商和归属地; 账号注册的时间和地点; 最近一次登录的时间和地点; 身份证号码; QQ秀或空间头像(如有)。 2. QQ账号申诉流程 2.1 进入QQ账号申诉页面 首先,进入QQ账号申诉页…

    other 2023年6月27日
    00
  • 小程序自定义导航栏兼容适配所有机型(附完整案例)

    下面是详细讲解“小程序自定义导航栏兼容适配所有机型”的完整攻略。 什么是小程序自定义导航栏? 小程序是一种可以在微信内部运行的轻量级应用,它有自己的界面结构,包括标题栏、导航栏、TabBar等。 但是,对于一些特殊的业务场景,我们可能需要对小程序原有的导航栏进行定制,比如更改样式、添加按钮等,这就需要用到自定义导航栏。 自定义导航栏兼容适配所有机型的方法 自…

    other 2023年6月25日
    00
  • Win7系统32位版本和64位版本有啥区别

    Win7系统32位版本和64位版本的区别 Windows 7是一款广泛使用的操作系统,它有32位版本和64位版本两种。这两个版本之间存在一些区别,包括以下几个方面: 1. 内存支持 32位版本:最大支持4GB的内存。由于32位系统的寻址空间有限,所以无论计算机实际安装了多少内存,32位系统只能使用其中的一部分。如果你的计算机安装了4GB以上的内存,32位系统…

    other 2023年7月28日
    00
  • php下将多个数组合并成一个数组的方法与实例代码

    将多个数组合并成一个数组是在PHP开发中非常常见和实用的一种操作。下面我将为您提供完整的攻略: 函数array_merge() PHP提供了array_merge()函数可以将多个数组合并成一个数组。它将所有数组的所有元素放入一个数组中,并返回该数组。数组键名保持原样,如果两个或多个数组具有相同的键名,则后面的键值将覆盖前面的键值。 示例1: $array1…

    other 2023年6月25日
    00
  • 工具-quicktime播放器

    工具-QuickTime播放器 QuickTime播放器是苹果公司推出的一款全能媒体播放软件,在电影、音乐、图像等方面使用广泛。QuickTime能够播放多种媒体格式,包括但不限于MP4、AVI、MOV等视频格式、MP3等音频格式以及JPG等图像格式。它除了是一款优秀的播放器外,还可以对媒体文件进行剪辑、转码和合并等操作。 QuickTime播放器的特点 Q…

    其他 2023年3月28日
    00
  • Win10正式版10586.104更新了什么?Win10正式版10586.104更新内容汇总(不断更新中)

    Win10正式版10586.104更新内容汇总 本文将详细讲解Win10正式版10586.104更新了什么,并提供一些示例说明。请注意,该版本的更新内容可能会随时间变化而更新。 更新内容 以下是Win10正式版10586.104的更新内容: 安全性更新:该更新修复了一些安全漏洞,提高了系统的安全性。例如,修复了一个可能导致远程执行代码的漏洞,这可以防止恶意软…

    other 2023年8月3日
    00
  • Golang学习之内存逃逸分析

    Golang学习之内存逃逸分析攻略 什么是内存逃逸分析 内存逃逸分析是指编译器在编译阶段对代码进行分析,确定变量的生命周期是否逃逸到堆上分配内存。如果变量逃逸到堆上,意味着它的生命周期超出了函数的作用域,需要在堆上分配内存空间。相反,如果变量没有逃逸,它可以在栈上分配内存,提高程序的性能。 为什么进行内存逃逸分析 内存逃逸分析的目的是优化程序的性能和内存使用…

    other 2023年8月2日
    00
  • 详解Python3中的多重继承和混入类

    详解Python3中的多重继承和混入类 什么是多重继承 多重继承是指一个类可以从多个父类继承属性和方法。在Python中,我们可以使用逗号分隔多个父类。 下面是一个例子,让我们来看看多重继承如何工作: class Base1: pass class Base2: pass class MultiDerived(Base1, Base2): pass 在上面的…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部