ich sende eine Broadcastanfrage "who is out there" an ein paar Embedded Systeme und anschließend Antworten diese mit einem String (Konfigdaten).
Hier Konfiguriere den server socket:
Code: Alles auswählen
HOST = ''
BC_CLIENT = '<broadcast>'
PORT = 30303
s_srv = None
addr = (HOST,PORT)
bc_addr = (BC_CLIENT, PORT)
def __init__(self, parent):
self._init_ctrls(parent)
self.root = self.treeCtrl1.AddRoot('Devices')
try:
self.s_srv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) ##init socket
socket.setdefaulttimeout(2)
self.statusBar1.SetStatusText("Socket OK", 0)
except socket.error, msg:
self.s_srv = None
self.statusBar1.SetStatusText("Socket Error", 0)
try:
self.s_srv.bind(addr) ##bind
self.s_srv.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) ##broadcast option
self.statusBar1.SetStatusText("Binding OK", 0)
except socket.error, msg:
self.s_srv.close()
self.statusBar1.SetStatusText("Binding Error... "+str(msg), 0)
Code: Alles auswählen
if self.s_srv is not None:
try:
self.s_srv.sendto('Discovery: Who is out there?',bc_addr) ##sende broadcast msg
self.textCtrl5.Clear()
data, address = self.s_srv.recvfrom(256)##empfange antworten
self.textCtrl5.AppendText("2: "+str(address)+" - "+data[0]+"\n ")
self.statusBar1.SetStatusText("Discovery: Who is out there?", 0)
except socket.error, msg:
self.statusBar1.SetStatusText('Send Error... '+str(msg), 0)
self.s_srv.close()
ich sehe über Wireshark, dass jedoch 3 Embedded Systeme antworten.
Wie kann ich den Code modifizieren, dass auch alle 3 Antworten empfangen werden??
Muss ich dafür auch drei verschiedene Sockets zur Verfügung stellen??
Wäre glücklich über eine kleine Hilfe.
Schönen Gruß
Piwi