python实现UDP通信

    UDP,用户数据报传输协议,它位于TCP/IP协议的传输层,是一种无连接的协议,它发送的报文不能确定是否完整地到达了另外一端。UDP广泛应用于需要相互传输数据的网络应用中,如QQ使用的就是UDP协议。在网络质量不好的情况下,使用UDP协议时丢包现象十分严重,但UDP占用资源少,处理速度快,UDP依然是传输数据时常用的协议。

下面是用python实现UDP服务器的代码:

#!/usr/bin/env python
import socket
address=('127.0.0.1',10000)
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(address)
while 1:
	data,addr=s.recvfrom(2048)
	if not data:
		break
	print "got data from",addr
	print data
s.close()

UDP客户端的代码:

#!/usr/bin/env python
import socket
addr=('127.0.0.1',10000)
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
while 1:
	data=raw_input()
	if not data:
		break
	s.sendto(data,addr)
s.close()

运行这两个程序,会显示以下结果:

服务器端:

客户端:

UDP的应用

在局域网中,如果要想局域网内所有计算机发送数据,可以使用广播,广播不能用TCP实现,可以用UDP实现,接受方收到广播数据后,如果有进程在侦听这个端口,就会接收数据,如果没有进程侦听,数据包会被丢弃。

广播的发送方:

#!usr/bin/env python
import socket
host=''
port=10000
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
s.bind((host,port))
while 1:
	try:
		data,addr=s.recvfrom(1024)
		print "got data from",addr
		s.sendto("broadcasting",addr)
		print data
	except KeyboardInterrupt:
		raise

广播的接收方:

#!/usr/bin/env python
import socket,sys
addr=('<broadcast>',10000)
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
s.sendto("hello from client",addr)
while 1:
	data=s.recvfrom(1024)
	if not data:
		break
	print data

运行广播程序,发送端会显示以下结果:

got data from (‘<地址>’,<端口号>)

hello fromclient

接收端会显示以下结果:

(‘broadcasting’,(<IP地址>,10000))

要使用Python实现UDP通信,可以使用socket模块提供的函数。以下是使用Python实现UDP通信的一般步骤: 1. 导入socket模块:`from socket import *` 2. 创建UDP套接字:`udp_socket = socket(AF_INET, SOCK_DGRAM)` 3. 设置服务器地址和监听端口:`server_host_port = ('服务器IP地址', 端口号)` 4. 准备要发送的数据:`data = '要发送的数据'.encode('utf-8')` 5. 发送数据:`udp_socket.sendto(data, server_host_port)` 6. 接收服务器返回的数据:`response, server_address = udp_socket.recvfrom(1024)` 7. 关闭套接字:`udp_socket.close()` 需要注意的是,UDP是面向无连接的协议,通信时不需要建立连接。它适用于多点通信和实时的数据业务,如语音广播、视频、文件传输和大型网络游戏。由于UDP是不可靠的协议,发送的数据报并不一定按相同的顺序到达接收方。同时,UDP传输数据时有大小限制,每个数据报的大小必须限定在64KB以内。 以上是用Python实现UDP通信的一般步骤和一些注意事项。根据实际需求,你可以根据这些步骤来编写你的UDP通信程序。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [python网络编程—UDP协议](https://blog.csdn.net/YZL40514131/article/details/120808489)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值