Wie Verarbeite ich Broadcast Antworten von mehreren PC?
Verfasst: Montag 18. Januar 2010, 13:58
Moin,
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:
Wenn nun der Discovery Button betätigt wird, wird eine Broadcast MSG losgeschickt (hier der code):
in diesem fall empfange ich nur eine einzige Antwort...
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
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