Hallo Wissende,
ich kann mir vorstelle, dass Euch dieses Thema langweilt, aber leider hat mich die Hilfe, bzw. die Demo von
Indy nicht weitergebracht. Ich habe das Problem, dass ich die Beispielanwendung für den Server und den Client compiliert habe, es aber leider nur lokal funktioniert, dass ich vom Client an den Server was sende.
Da ich aber eine andere Funktionalität benötige, nämlich das der Server an die Clients per UDP Nachrichten versendet, habe ich mir das einfach nur so umgebaut, dass lokal auch so funzt. Wenn ich aber nun im Netzwerk meine Clientapplikationen starte und vom Server aus ne Nachricht sende, erscheint bei meinen Clients keine Messagebox, wie ich es als Beispiel erstellt habe.
Was mache ich falsch? Muss ich Broadcast aktivieren und sonst noch was einstellen, damit alle Clients vom Server was empfangen?
Diesen Code hier verwende ich im Client, wo ich die UDPServer-Komponente verwende:
Delphi-Quellcode:
procedure TForm1.UDPServerUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
DataStringStream: TStringStream;
s: String;
begin
DataStringStream := TStringStream.Create('');
try
DataStringStream.CopyFrom(AData, AData.Size);
ShowMessage('Received "' + DataStringStream.DataString + '" from ' + ABinding.PeerIP + ' on port ' + IntToStr(ABinding.PeerPort));
s := 'Replied from ' + UDPServer.LocalName + ' to "' + DataStringStream.DataString + '"';
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, s[1], Length(s));
finally
DataStringStream.Free;
end;
end;
Und das hier passiert, wenn ich am Server einen Button betätige:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
MessageID: Integer;
ThisMessage: String;
ReceivedString: String;
begin
//MessageID := Random(MAXINT);
ThisMessage := 'Message: ' + 'Nachricht von Sam';//IntToStr(MessageID);
UDPMemo.Lines.Add('Sending ' + ThisMessage);
UDPClient.Send(ThisMessage);
ReceivedString := UDPClient.ReceiveString();
if ReceivedString = '' then
UDPMemo.Lines.Add('No response received from the server after ' + IntToStr(UDPClient.ReceiveTimeout) + ' millseconds.')
else
UDPMemo.Lines.Add('Received: ' + ReceivedString)
end;
Warum ist das nur so kompliziert?