python udp客户端无法获取数据_Python 实现 udp 网络程序,发送、接收数据

本文介绍了如何使用Python实现UDP网络程序,包括发送和接收数据的步骤。通过创建UDP套接字,绑定本地信息,发送数据到指定IP和端口,以及接收并解码数据。同时,提到了UDP协议在网络不稳定时可能会导致数据包丢失,但因其资源消耗小、处理速度快,常用于音频、视频等场景。
摘要由CSDN通过智能技术生成

e1903a560fa5fc9e1a2b4f507b9c8581.png

Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。

UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。

udp网络程序模型图。

0b838efafa1525b4003e23be897997fd.png

接下来,我们用 python 代码实现udp数据的发送和接收。

一、udp网络程序,发送数据

流程:

创建客户端套接字

发送数据

关闭套接字

import socket

def main():

# 1.创建一个udp套接字

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

# 2.准备接收方的地址

# 192.168.65.149 表示目的地ip

# 30000 表示目的地端口

udp_socket.sendto("hello".encode("utf-8"), ("192.168.65.149", 30000))

# 3.关闭套接字

udp_socket.close()

if __name__ == "__main__":

main()

sendto 的第一个参数需要一个字节类型,所以需要编码一下,不能单单传一个字符串。

我们为了验证写的程序是否正确,可以使用网络调试助手来验证。

f0ae41690904229888a8a746bee70ff4.png

在上面的例子中,网络调试助手里的“本机主机地址”应该填写作为服务方电脑的ip地址。我们这里在一台电脑上测试,所以写了代码里的ip地址。

但是大家要理解成是另一台服务器的电脑的ip。

端口就选择一个号大一点的,不要占用主流端口。

二、udp网络程序,接收数据

流程:

创建套接字

绑定本地自己的信息

接收数据

关闭套接字

接收数据最重要的一步,就是要绑定端口。

import socket

def main():

# 1.创建一个udp套接字

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

# 2.绑定本地的相关信息,如果一个网络程序不绑定,则系统会随机分配

# 30000 表示本地的端口 ip一般不用写

local_addr = ("", 30000)

udp_socket.bind(local_addr)

# 3. 等待接收对方发送的数据

recv_data = udp_socket.recvfrom(1024)

# 1024表示本次接收的最大字节数

# 6. 显示对方发送的数据

# 接收到的数据recv_data是一个元组

# 第1个元素是对方发送的数据

# 第2个元素是对方的ip和端口

print(recv_data[0].decode("gbk"))

print(recv_data[1])

# 3.关闭套接字

udp_socket.close()

if __name__ == "__main__":

main()

将收到的数据解码时要注意,和客户端编码的格式要一样。

在选择UDP作为传输协议时必须要谨慎。

在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重。

但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。

比如我们聊天用的ICQ和QQ就是使用的UDP协议。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值