【发布时间】:2016-03-30 10:22:20
【问题描述】:
请看下面的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]
【问题讨论】:
-
“系统中配置的IP”是什么意思? IP是网络栈的一层,而UDP是网络协议?
-
如果你没有ip地址并且没有连接到任何网络,你期望得到什么消息?
-
@syntonym,希望在没有配置 IP 地址时收到一些广播消息。
-
@syntonym,当没有配置IP地址时,主机仍然可以收到DHCP Offer消息,一种IP包。