UDP编程

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501

UDP是面向消息的协议,如果通信时不需要建立连接,数据的传输自然是不可靠的,UDP一般用于多点通信和实时的数据业务,例如:

l  语音广播

l  视频

l  聊天软件

l  TFTP(简单文件传送)

l  SNMP(简单网络管理协议)

l  RIP(路由信息协议,如报告股票市场、航空信息)

l  DNS(域名解释)

和TCP类似,使用UDP的通信双方也分为客户端和服务器。

1  创建UDP 服务器

UDP 服务器不需要 TCP 服务器那么多的设置,因为它们不是面向连接的。除了等待传入的连接之外,几乎不需要做其他工作。下面我们来实现一个将摄氏温度转化为华氏温度的功能。

图标 (35)

  实例04  将摄氏温度转换为华氏温度

在客户端输入要转换的摄氏温度,然后发送给服务器,服务器根据转化公式,将摄氏温度转化为华氏温度,发送给客户端显示。创建udp_server.py文件,实现UDP服务器。具体代码如下:

import socket                        # 导入socket模块

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)     # 创建UDP套接字

s.bind(('127.0.0.1', 8888))                 # 绑定地址(host,port)到套接字

print('绑定UDP到8888端口')

data, addr = s.recvfrom(1024)                 # 接收数据

data = float(data)*1.8 + 32                 # 转化公式

send_data = '转换后的温度(单位:华氏温度):'+str(data)

print('Received from %s:%s.' % addr)

s.sendto(send_data.encode(), addr)            # 发送给客户端

s.close()                            # 关闭服务器端套接字

上述代码中,使用socket.socket()函数创建套接字,其中设置参数为socket.SOCK_DGRAM,表明创建的是UDP套接字。此外需要注意,s.recvfrom()函数生成的data数据类型是byte,不能直接进行四则运算,需要将其转化为float浮点型数据。最后在使用sendto()函数发送数据时,发送的数据必须是byte类型,所以需要使用encode()函数将字符串转化为byte类型。

运行结果如图14所示。

图14  等待客户端连接

2  创建UDP 客户端

创建一个UDP客户端程序的流程很简单,具体步骤如下:

l  创建客户端套接字

l  发送/接收数据

l  关闭套接字

下面根据17.3.1小节的实例,创建udp_client.py文件,实现UDP客户端,用户接收转换后的华氏温度。具体代码如下:

import socket                         # 导入socket模块

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)     # 创建UDP套接字

data = input('请输入要转换的温度(单位:摄氏度):')        # 输入要转换的温度     

s.sendto(data.encode(), ('127.0.0.1', 8888))           # 发送数据

print(s.recv(1024).decode())                 # 打印接收数据

s.close()                             # 关闭套接字

在上述代码中,主要就是接收的数据和发送的数据类型都是byte。所以发送时,使用encode()函数将字符串转化为byte。而在输出时,使用decode()函数将byte类型数据转换为字符串,方便用户阅读。

在两个cmd窗口中分别运行udp_server.py和udp_client.py文件,然后在udp_client.py窗口中输入要转换的摄氏度,udp_client.py窗口会立即显示转换后的华氏温度。如图15所示。

图15  将摄氏温度转换为华氏温度效果

3  执行UDP 服务器和客户端

在UDP通信模型中,在通信开始之前,不需要建立相关的连接,只需要发送数据即可,类似于生活中的 “写信”。UDP通信模型如图16所示。

图16  UDP通信模型

  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
UDP是一种无连接的协议,适用于一些需要快速传输数据、但可靠性要求相对较低的应用场景。DNS(Domain Name System)是一种用于将域名转换为IP地址的网络协议。 在UDP编程中,我们可以使用Python的socket库来创建UDP套接字,实现UDP通信。具体步骤如下: 1. 导入socket库 ```python import socket ``` 2. 创建UDP套接字 ```python udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) ``` 其中,socket.AF_INET表示使用IPv4协议,socket.SOCK_DGRAM表示使用UDP协议。 3. 绑定端口号 ```python udp_socket.bind(("localhost", 8888)) ``` 这里以本地主机为例,绑定了端口号为8888的UDP套接字。 4. 接收数据 ```python data, addr = udp_socket.recvfrom(1024) ``` 该语句会阻塞程序,等待接收数据。当收到数据时,会返回一个元组,其中data表示接收到的数据,addr表示发送方的地址信息。 5. 发送数据 ```python udp_socket.sendto(data, addr) ``` 该语句将data数据发送给addr地址。 在DNS中,我们可以使用Python的socket库来实现DNS查询。具体步骤如下: 1. 创建UDP套接字 ```python dns_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) ``` 2. 发送DNS查询请求 ```python dns_socket.sendto(query_data, (dns_server_ip, dns_server_port)) ``` 其中,query_data表示DNS查询请求数据,dns_server_ip和dns_server_port表示DNS服务器的地址和端口号。 3. 接收DNS查询响应 ```python response_data, server_addr = dns_socket.recvfrom(1024) ``` 该语句会阻塞程序,等待接收DNS查询响应。当收到响应时,会返回一个元组,其中response_data表示DNS查询响应数据,server_addr表示DNS服务器的地址信息。 以上就是UDP编程和DNS查询的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙子味冰可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值