服务器是否可以在未配置IP的情况下侦听UDP消息

时间:2016-03-30 10:22:21

标签: python udp broadcast

请查看以下python代码。 我创建了一个Server类来监听端口10000以接收UDP广播消息。

如果在系统中配置了IP地址,它可以接收UDP广播消息。如果未配置IP地址,则无法接收任何消息。

你能告诉我为什么吗?

import socket
import sys

class Server:

    class Handler:

        def handle(self, message):
            pass

        def __init__(self, serialNo):
            self.serialNo = serialNo

        def _setAddress(self, socket, message, address):
            self.message = message
            self.address = address
            self.socket = socket

        def send(self, message):
            self.socket.sendto(message, self.address)

        def getSerialNo(self):
            return self.serialNo

    def __init__(self, port, handler):
        self.ss = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.ss.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.ss.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
        self.handler = handler

        try:
            self.ss.bind(('<broadcast>', port))
        except:
            self.ss.close()
            raise RuntimeError("Create socket error")
        self.ss.setblocking(1)

    def loop(self):
        while True:
            try:
                print "Listening for broadcast..."
                message, address = self.ss.recvfrom(8192)
                print "Got request from %s:%s" % (address, message)
                self.handler._setAddress(self.ss, message, address)
                self.handler.handle(message)
            except (KeyboardInterrupt, SystemExit):
                raise
            except:
                sys.exc_info()[0]

1 个答案:

答案 0 :(得分:0)

在参考pydhcp客户端代码后,我进行了以下更改:

create()

现在它可以接收广播数据包,但它无法在RedHat上运行。