python udp通信发送数组_Python 实现 udp 网络程序,发送、接收数据
互联网的整个协议体系不仅涵盖了所有基于无连接传输的技术细节,并且将这一通信方式统称为用户数据报protocol(缩写为UDP),其具体实现机制参考了传统的用户分组数据交换方法。
UDP通过提供一种不需在两端建立连接即可发送IP数据包被封装的方法
udp网络程序模型图。
接下来,我们用 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函数的第一个参数必须接受一种字节类型的输入数据类型,在这种情况下必须对输入数据进行适当的编码处理;直接传递单一字符串类型的数据会导致功能异常或性能问题
我们为了验证写的程序是否正确,可以使用网络调试助手来验证。
在上面的例子中,“本机主机地址”应该填写为“服务端计算机的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协议。
