收跟发基本核心思想差不多,只不过收信息需要去绑定一下端口,如果我们发信息没有绑定端口,那系统会随机分配一个,如果是收信息,那我们必须要求自己绑定端口才行
基础的接收数据
import socket
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# socket 套接字的类型 IPV4 udp协议
local = ('',8888)
# 写入ip内容的变量
ipaddr = udp_socket.bind(local)
# 绑定ip地址和端口
recv = udp_socket.recvfrom(1024)
# 获取发过来的信息
print(recv)
# 输出
udp_socket.close()
意思是绑定我们自己的端口8888进行监听,我把这段代码放到了ubuntu上进行收,win10用来发送数据测试
当发送来了信息,可以看到内容为 hello 来自192.168.6.254 的52460端口
处理接收的数据
当我们接收到了信息发现是这样一段,这是收到了一个元组,我们可以自己去处理一下
import socket
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
localhost=('',8888)
bind=udp_socket.bind(localhost)
recv = udp_socket.recvfrom(1024)
test = recv[0]
ipadd = recv[1]
print(ipadd[0],test.decode("utf-8"))
udp_socket.close()
再接收过来的信息,我们想让他咋输出他就咋输出
循环接收信息
很简单直接加个while循环就行了
import socket
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
local = ('',8888)
bind = udp_socket.bind(local)
while True :
recv = udp_socket.recvfrom(1024)
test = recv[0]
ipaddr = recv[1]
print("消息来源: %s 内容为: %s" %(ipaddr[0],test.decode('utf-8')))
udp_socket.close()