AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi per UDP Nachricht an alle senden...WIE?
Thema durchsuchen
Ansicht
Themen-Optionen

per UDP Nachricht an alle senden...WIE?

Ein Thema von torud · begonnen am 9. Mai 2006 · letzter Beitrag vom 9. Mai 2006
Antwort Antwort
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, 11: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
torud

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

Re: per UDP Nachricht an alle senden...WIE?

  Alt 9. Mai 2006, 12:51
Problem gelöst.

Bei Host muss man 255.255.255.255 einstellen, damit an alle gesendet wird.
Danke
Tom
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: per UDP Nachricht an alle senden...WIE?

  Alt 9. Mai 2006, 13:00
Ähm, dann bekommt aber auch jeder diese Nachricht auch die 99,9% der User
die keinen Client von Dir installiert haben.
Außerdem solltes Du in Betracht ziehen, daß es eventuell sein
kann das die Router im Internet oder des Providers eine
Broadcastmessage blockieren werden.

Wenn Du an allen Clients eine Meldung schicken möchtest,
dann mach das bitte dediziert, denn Dein Server weiß ja welche Clients
verbunden sind. Also sollte es nicht so schwer sein
dies auszuwerten und die Clients gezielt anzusrechen.

Wenn es darum geht in einem begrenzten Netz diese Meldung zu verteilen
kannst Du auch einen Broadcast (so nennt sich das) im Subnetz machen.
z.B. 192.168.10.255 o.ä.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
torud

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

Re: per UDP Nachricht an alle senden...WIE?

  Alt 9. Mai 2006, 15:24
Hallo Klaus,

danke für Deine Info.

In meinem Fall geht es tatsächlich um ein "lokales" Netzwerk in dem 10-20 Clients hängen, die einfach nur ne Meldung vom Server erhalten sollen, dass sich die SQL-Datenbank geändert haben. Daraufhin sollen Sie dann eine Abfrage starten, um sich selbst zu abdaten.

Ich habe es nun mit nem Broadcast hinbekommen, dass ich ne Meldung an alle senden kann. Da sich unsere Clients von Veranstaltung zu Veranstaltung ändern, kann es also sein, dass immer wieder andere Clients dran hängen, die ich dann erst beim Server "bekannt" machen müsste.
Danke
Tom
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz