首页 > 解决方案 > 在 python 中想要读取特定端口上的 UDP 广播消息

问题描述

我是 python 编程的新手。我的任务是读取 UDP 端口 4012 上的广播提要。我有 Visual Basic 代码,它工作正常。代码如下。

#Dim receivingUdpClient As New UdpClient(4012)
#Dim RemoteIpEndPoint As New IPEndPoint(IPAddress.Any, 0)
#receiveBytes = receivingUdpClient.Receive(RemoteIpEndPoint)
#returnData = Encoding.ASCII.GetString(receiveBytes)
#Dim TestArray() As String = Split(returnData, ";")

我在 python 中编写了以下程序来读取 UPD 端口 4012 上的广播提要,但无法使用以下 python 程序实现它。该程序正在运行并显示 cmd 窗口消息“等待来自 4012 的 4012 localhost”。

有人可以帮我解决这个问题吗?如果代码是正确的,我该如何检查解决这个问题?如果有人可以推荐任何视频或材料供阅读,我还想阅读有关 Python 中套接字编程的好材料,特别是有关 UDP 套接字广播阅读的内容。

import socket

s=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_host = 'localhost'
udp_port = 4012

s.connect((udp_host,udp_port))
print("waiting for 4012",udp_host, "from" ,udp_port)
data , addr= s.recvfrom(1024)
print("Received Messages: ", data ,"from", addr)

标签: python

解决方案


这个片段是我经常使用的创建基本套接字服务器的东西......

 socket_config = {
        'udp_ip_address': 'your.ip.here.bla',
        'udp_port_no':    '6789',
        'max_send_size':  '1024'
    }
    #
    # socket creation
    #
    serverSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    serverSock.bind((socket_config['udp_ip_address'],
                    int(socket_config['udp_port_no'])))
    
    def receive_loop():
    
        # eternal loop starts here
      while True:
        data, addr = serverSock.recvfrom(int(socket_config['max_send_size']))
        data = data.decode('utf-8')
        logger.debug("Message:" + data)

推荐阅读