Thema: Local Chat

Einzelnen Beitrag anzeigen

Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#3
  Alt 30. Mai 2003, 17:13
Hi,

ach Mist, ich glaub zwar dass ich meinem eigenen Chat der gerade inner Werft steht zwar ein Beinchen stell, aber ich denke, dass keiner von uns beiden in irgendeiner Weise messbaren Profit aus der Sache schlagen wird.
Hab mir dein Programm übrigens noch nicht angesehen (sorry), mach ich im Laufe des Abends wenns kühler wird und ich meinen Rechner länger laufen lass (sons wird die Bude zu heiß).
Zu dem Nachrichten an alle Rechner gleichzeitig schicken:
UDP- Broadcasting. Das preise ich jetz glaube ich zum dritten Mal an.
Du holst dir die Indys und guckst dir da die Tutorials zu UDP an.
Ein Broadcast ist quasi wie du schon sagtest eine Nachricht an das gesamte Netzwerk (an einem bestimmten Port).
Das Verschicken eines Broadcasts ist recht einfach:

UDPClient1.Broadcast('Nachrichtentext', port); Wie gesagt, ich (für meinen Teil) bevorzuge dafür die Indys. Is schön einfach und komfortabel.
Wenn ein Broadcast ankommt, dann kriegst du das über das Ergeinis "OnUDPRead" vom UDPServer mit:

Delphi-Quellcode:
procedure TForm1.UDPServer1UDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
var
  sstream: TStringStream;
  s: string;
begin
  sstream:= TStringStream.Create(''); //den String-Stream ohne Inhalt erstellen
  try
    sstream.CopyFrom(AData, AData.Size); //den Stream aus AData in unseren Stream schreiben
    s:= sstream.DataString; //Inhalt des Streams in einen normalen String schreiben
  finally
    sstream.free; //den Stream aus dem Speicher löschen
  end;
end;
Is eigentlich nichts weiter als eine Art Auszug aus den Tutorials. Da übers Netzwerk in diesem Fall nur gestreamt wird, müssen wir erstmal den String der uns geschickt wurde aus seinem Stream rausholen um damit leichter weiterarbeiten zu können.
ABinding ist beim Broadcasting (jedenfalls beim schlichten Empfangen) nicht so wichtig. Da stehen so Sachen wie Absender- IP und so drin. Das is ganz nützlich wenn du etwas, was dir per UDP geschickt wurde beantworten willst. Per UDP kannst du natürlich auch ganz normal Nachrichten verschicken (also keinen Broadcast), dafür bietet sich allerdings TCP/IP besser an. Wenn du jetzt aber wissen willst, wer dir den Broadcast geschickt hast und du diesen evtl. gezielt an den Absender beantworten willst, musst du ABinding auch noch auslesen.
Da verweise ich mal auf die Tutorials der Indys.

So, dann werd ich mir mal dein Prog ziehen nachdem ich so viel Bullsh.. gelabert hab.

Bis dann,

S - tefano
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat