Entwickler-Ecke

Internet / Netzwerk - Brauche Crashkurs in UDP


maxk - Di 18.02.03 10:50
Titel: Brauche Crashkurs in UDP
Hi,

da ich gelesen habe, dass UDP schneller als TCP ist. Habe ich nun einige Newbie-Fragen (beziehend auf InDy 9):

Gibt es ein Tuturial?

maxk


O'rallY - Di 18.02.03 15:17

Zitat:
Was kann UDP im Vergleich zu TCP besser/schlechter?


UDP ist ein verbindungsloses Protokoll, d.h. der Three-Way-Handshake fällt weg. Die Daten werden einfach ins Netz geschickt, ohne auf eine Bestätigung zu warten. Das hat zwar den Vorteil, dass es schneller ist, aber die Wahrscheinlichkeit, dass ein Packet verloren geht ist größer.
TCP hingegen ist ein verbindungbehaftetes Protokoll. Die Daten kommen (fast) immer an. Der Three-Way-Handshake ist also nix anderes als etwas in der Art: "Achtung! Kommt was!" - "OK!" - "Habs empfangen!".
Ist aber wegen dieser Sicherheitsvorkehrung langsamer.

Zitat:
Wozu dient die BroadCast-Funktion, die sowohl Client und Server haben?


Mittels des Broadcast kannst du an jeden Client des Netzwerks eine Nachricht schicken. Der Broadcast ist ein Packet, dass an eine spezielle Adresse verschickt wird (z.B. 192.168.1.255). Alle Computer greifen dieses Packet ab.

Zitat:
Wie werden Daten gesendet/empfangen?


Wie ich schon mal geschrieben hab:

O'rallY hat folgendes geschrieben:
Um UPD zu nutzen, würd' ich dir die Indy-Kompos vorschlagen ([url]http://www.indyproject.org[/url]). Das sind TIdUPDClient u. TIdUPDServer. Der Umgang ist recht einfach. Ein Beispiel:

    IdUDPServer1 Einstellungen:
  • Active: true
  • DefaultPort: z.B. 1234
  • Falls du Broadcast benutzen willst: BroadcastEnabled: true

    IdUDPClient1 Einstellungen:
  • Port: z.B. 1234
  • Falls du Broadcast benutzen willst: BroadcastEnabled: true

Die Unit IdSocketHandle muss noch eingebunden werden :!:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var
   RecText: string;
begin
   SetLength(RecText, AData.Size);
   AData.ReadBuffer(PChar(RecText)^, AData.Size);
   ShowMessage(ABinding.PeerIP + ' hat "' + RecText + '" gesendet.');
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
   IdUDPClient1.Active := true;
   IdUDPClient1.Send('Hello World!');
   IdUDPClient1.Broadcast('Ich bin ein Broadcast!', 1234); // hier muss auch der Port angegeben werden
   IdUDPClient1.Active := false;
end;



Zitat:
Wie verbinde ich den Client zum Server?


Wie ich schon erklärt hab: Gar nicht! ;)

Hab ich dir helfen können?


maxk - Di 18.02.03 18:18

Geholfen hat das auf jeden Fall!
:D :)

Habe ich das richtig verstanden, Broadcaste ich, kann das jeder im Subnet lesen? Falls ja, habe ich das schon ewig gesucht.

Also Danke


Indeterminatus - Mo 24.02.03 11:51

Jawoll, hast du vollkommen richtig verstanden :wink:

Indeterminatus.