Einzelnen Beitrag anzeigen

torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

per UDP Nachricht an alle senden...WIE?

  Alt 9. Mai 2006, 10:48
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?
Danke
Tom
  Mit Zitat antworten Zitat