Ja, ich denke das sollte für meine Zwecke genügen
Ich habe mich auch schon über einige Experimente her gemacht und bin bereits auf die nächsten Probleme gestoßen...
Ich habe ein Clientprogramm mit einer IdUDPClient-Komponente und einer ComboBox mit folgenden
IP-Adressen: 127.8.0.4 und 127.8.0.5. Dazu gibt es 2 Buttons, einer davon verwendet die beiden
IP's aus der ComboBox:
Delphi-Quellcode:
procedure TSDIAppForm.SendBtnClick(Sender: TObject);
begin
IdUDPClient1.Active := TRUE;
IdUDPClient1.Send(SendIPCB.Items[SendIPCB.ItemIndex], 3333, Format('Sending to %s <Hallo Welt!>', [SendIPCB.Items[SendIPCB.ItemIndex]]));
end;
Dazu gibt es auch noch einen Broadcast-Button:
Delphi-Quellcode:
procedure TSDIAppForm.BroadCastBtnClick(Sender: TObject);
begin
IdUDPClient1.Active := TRUE;
IdUDPClient1.BroadcastEnabled := TRUE;
IdUDPClient1.Broadcast('Broadcasting to all <Hallo Welt>!', 3333);
end;
Bewusst momentan nicht drin ist das warten auf eine Antwort....
Dann gibt es eine Serverapplikation die momentan 2 IdUDPServer-Komponenten enthält. Beide wurden wie folgt initialisiert (im Designer):
Delphi-Quellcode:
Active := TRUE;
BroadcastEnabled := TRUE;
DefaultPort:=3333;
Bindings := 127.8.0.4:3333 (IdUDPServer1)
Bindings := 127.8.0.5:3333 (IdUDPServer2)
Der Rest bleibt auf Defaultwerten. Das OnUDPRead-Ereignis beider Komponenten ist mit folgender Methode verbunden:
Delphi-Quellcode:
procedure TSDIAppForm.UDPServer_Read(Sender: TObject; AData: TBytes; ABinding: TIdSocketHandle);
Var
s: TIdBytes;
begin
dbPrint('
OnRead: %s("%s")', [TComponent(Sender).
Name, BytesToString(AData)]);
dbPrint('
IP: %s (Port: %d)', [ABinding.IP, ABinding.Port]);
dbPrint('
PeerIP: %s (PeerPort: %d)', [ABinding.PeerIP, ABinding.PeerPort]);
// SetLength(s, 3);
// AppendString(s, '+OK', -1);
// ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, s);
end;
dbPrint gibt dabei Text in ein Memofeld aus.
1. Problem
Verwende ich die Send-Funktion dann wird das UDPServer_Read-Ereignis korrekt ausgelöst. Drücke ich den Broadcast-Button, wird jedoch
kein Ereignis ausgelöst.
2. Problem
Nehme ich die Kommentare im UDPServer_Read weg (sende also eine Antwort), bekomme ich die Fehlermeldung:
Socket Error # 10065 - No route to host. Natürlich bekomme ich auch im IdUDPClient ein Timeout, wenn ich dort mit
IdUDPClient1.ReceiveString; eine Antwort zu empfangen versuche ...
3. frage ich mich, ob das überhaupt klappen kann, wenn ein Broadcast antworten von mehreren Quellen bringt, ich aber nur auf dieses eine ReceiveString warte ...?
Vielleicht gibts ja jemand der da einwenig Licht in die ganze Sache bringen kann ...
TIA
Whookie