AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Broadcast - UDP und TCP in einem Projekt?
Thema durchsuchen
Ansicht
Themen-Optionen

Broadcast - UDP und TCP in einem Projekt?

Ein Thema von .chicken · begonnen am 3. Dez 2007 · letzter Beitrag vom 5. Dez 2007
Antwort Antwort
Seite 1 von 2  1 2      
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#1

Broadcast - UDP und TCP in einem Projekt?

  Alt 3. Dez 2007, 17:24
Also ich habe ne Frage. Ich habe hier im Forum gelesen, dass Broadcasts im Netzwerk, mit welchen ich eine Liste der verfügbaren Server im Netzwerk kriegen möchte, nur mit UDP gehen. Mein restliches Projekt lasse ich aber eigentlich über TCP laufen. Kann bzw. ist es "gut" nun eine UDP Komponente, nur für den Broadcast zu verwenden? Zusätzlich zur TCP Komponente?

Worin liegt eigentlich der Unterschied?

Danke schonmal
  Mit Zitat antworten Zitat
Torpedo

Registriert seit: 21. Dez 2003
410 Beiträge
 
#2

Re: Broadcast - UDP und TCP in einem Projekt?

  Alt 3. Dez 2007, 17:31
Das kannst du schon machen, also beide benutzen.
Bei TCP wird eine Verbindung zur Gegenstelle aufgebaut, die auch sicherstellt, dass das ankommt, was man abgeschickt hat.
Bei UDP wird einfach drauf losgeschickt, was den Vorteil hat, dass es schneller ist, wenn man viele Daten hintereinander schicken will (z.B. bei Egoshootern) und man kann eben Broadcasts senden. Nachteil: Man kann nicht sichergehen, dass die Daten fehlerfrei, oder ob sie überhaupt, angekommen sind.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Broadcast - UDP und TCP in einem Projekt?

  Alt 3. Dez 2007, 17:33
Für einen groben Überblick über die Unterschiede ist Wikipedia ganz nützlich: TCP UDP
TCP ist verbindungsbasiert, d.h. vor der Kommunikation muss eine Verbindung eingerichtet werden, weshalb auch ein Broadcast nicht möglich ist. Dafür ist jedoch sichergestellt, dass alle geschickten Pakete auch wirklich ankommen. Dies ist in UDP anders. UDP benötigt keinen Verbindungsaufbau, dafür können aber Daten verloren gehen.
Ich verwende in einem Spiel von mir auch TCP und UDP. TCP für die eigentliche Kommunikation und UDP für einen Broadcast, mit dem ich die im Netzwerk verfügbaren Server abfrage.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#4

Re: Broadcast - UDP und TCP in einem Projekt?

  Alt 3. Dez 2007, 17:39
Ok, also ist das keineswegs schlimm oder schlechter Stil oder sowas beides zu verwenden?
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Broadcast - UDP und TCP in einem Projekt?

  Alt 3. Dez 2007, 17:47
Bei UDP reicht einfach ein Socket. Mit dem kannst du überall hin senden und von überall empfangen.
Bei TCP existiert eine Verbindung zwischen zwei Hosts (die auch gleich sein können) und es können nur zwischen den beiden Daten ausgetauscht werden. Dazu benötigt man erstmal auf einer Seite einen Listener-Socket (die Seite nennt man Server). Dieser Socket macht nix weiter als auf Verbindungsanfragen zu warten und bei einer eingehenden Verbindung einen weiteren Socket zu initialisieren über den du dann mit dem jeweiligen Partner (und nur dem) kommunizieren kannst. Der Client ist es etwas kürzer. Du richtest den Socket ein und verbindest dich einfach zu einem Server (bzw. stellst die Anfrage an dessen Listener-Socket).
(die mehreren serverseitigen Sockets werden meist in einer Komponente verwaltet)


Ich hätte da noch ein Komponente, die das alles erledigt.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#6

Re: Broadcast - UDP und TCP in einem Projekt?

  Alt 3. Dez 2007, 17:57
Ok, danke, auch für die Komponente. Ich versuch aber das selbst zu lösen ohne die Komponente Dankeschön
  Mit Zitat antworten Zitat
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#7

Re: Broadcast - UDP und TCP in einem Projekt?

  Alt 4. Dez 2007, 15:05
So, also eigentlich dachte ich ich finde hier genug dazu im Forum, aber irgendwie bin ich doch nicht so fündig geworden. Wie realisiere ich dass denn nun?

Hat vll wer ne Anleitung oder n Codebeispiel oder sowas? Dann könnte ich das nachvollziehen, habe hier im Forum irgendwie nicht wirklich was gefunden.

Muss ich einfach eine Nachricht senden und bei Empfang eine Nachricht mit Name, IP etc des Servers zurückschicken? Und wenn, muss ich dann nen UDP Client und Server machen oder wie? Habe bisher nur mit TCP gearbeitet
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Broadcast - UDP und TCP in einem Projekt?

  Alt 4. Dez 2007, 15:46
Eigentlich gibt es bei UDP keine Unterscheidung zwischen Server und Client. Bei Indy wird es dennoch gemacht. Vielleicht, weill man beim Client davon ausgeht, dass nix empfangen wird und damit Code gespart werden kann.

Die UDPsocket-Komponente von Borland ist etwas schwach (da kann man auch gleich die WinAPI nehmen), deswegen habe ich mal bei Indy geschaut.
Du benötigst:
TidUDPServer mit folgenden Einstellungen (ich lege den Port mal auf 6000)
-DefaultPort: 6000
-BroadCastEnabled: True
-und wenn du etwas machen willst (empfangen oder senden): natürlich active auf true
und dann noch sowas hier:
Delphi-Quellcode:
procedure TForm1.IdUDPServerUDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var s:string;
begin
  setlength(s,aData.size);
  aData.Read(s[1],length(s));
  showmessage(s);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  idUDPServer.Send('255.255.255.255',6000,'Hallo');
end;
Edit: Aber ich bin in Indy nicht wirklich bewandert, vielleicht gibts noch andere Möglichkeiten (z.B. die Methode Broadcast)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#9

Re: Broadcast - UDP und TCP in einem Projekt?

  Alt 4. Dez 2007, 19:32
Zitat von sirius:
Eigentlich gibt es bei UDP keine Unterscheidung zwischen Server und Client. Bei Indy wird es dennoch gemacht. Vielleicht, weill man beim Client davon ausgeht, dass nix empfangen wird und damit Code gespart werden kann.

Die UDPsocket-Komponente von Borland ist etwas schwach (da kann man auch gleich die WinAPI nehmen), deswegen habe ich mal bei Indy geschaut.
Du benötigst:
TidUDPServer mit folgenden Einstellungen (ich lege den Port mal auf 6000)
-DefaultPort: 6000
-BroadCastEnabled: True
-und wenn du etwas machen willst (empfangen oder senden): natürlich active auf true
und dann noch sowas hier:
Delphi-Quellcode:
procedure TForm1.IdUDPServerUDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var s:string;
begin
  setlength(s,aData.size);
  aData.Read(s[1],length(s));
  showmessage(s);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  idUDPServer.Send('255.255.255.255',6000,'Hallo');
end;
Edit: Aber ich bin in Indy nicht wirklich bewandert, vielleicht gibts noch andere Möglichkeiten (z.B. die Methode Broadcast)
Ok, mit der zweiten Prozedur, wird das dann an alle IPs gesendet? Also quasi von 0.0.0.0 bis 255.255.255.255?

Und ansonsten nehme ich noch nen UDP Client bei der ClientAnwendung und da dann noch ne Read und Send Methode?

Danke schonmal!

Edit: Achso, warum is das mit nem Stream und nich einfach nem String? Gibts keine Möglichkeit einfach simpel nen String zu versenden? Ohne Stream?
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Broadcast - UDP und TCP in einem Projekt?

  Alt 4. Dez 2007, 20:02
Das war eigentlich schon alles. Du brauchst keine weitere Komponente oder weiteren Code. Die erste Methode ist das Ereignis onUDPRead (du musst ja in jedem Programm lesen und senden können, das macht hier eine Komponente)
Die zweite Methode sendet ein Hallo (255.255.255.255 ist die BroadCast-IP und sagt dem Router nur, dass er die Pakete in alle Richtungen schicken soll - übrigens auch zurück)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:15 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