Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Spiel! Suchen im Netzwerk! (https://www.delphipraxis.net/68513-spiel-suchen-im-netzwerk.html)

pacman1986 30. Apr 2006 19:54


Spiel! Suchen im Netzwerk!
 
Egal bei welchem Spiel man geht auf netzwerk und bekommt eine liste mit den netzwerkspielen die online sind !
Weiss einer wie das die Spiele machen?

meine Überlegung wäre parallel 254 Clientsocket auf einmal die suche beginnen lassen! aber gibt das nicht ein fehler da socket ?

mkinzler 30. Apr 2006 19:56

Re: Spiel! Suchen im Netzwerk!
 
Probiers doch aus. jeder Clientsocket muß natürlich einen anderen Port benutzen.

jim_raynor 30. Apr 2006 20:41

Re: Spiel! Suchen im Netzwerk!
 
Sowas nennt man IP-Broadcasting. Wenn du zum Beispiel an 192.168.1.255 und eine Subnetzmaske von 255.255.255.0 hast dann dürfte die Nachricht an alle Clients im Subnetz 192.168.1. gehen.

pacman1986 30. Apr 2006 21:17

Re: Spiel! Suchen im Netzwerk!
 
Funktioniert das auch bei windows ?

mkinzler 30. Apr 2006 21:17

Re: Spiel! Suchen im Netzwerk!
 
Das ist eine Eigenschaft des IP-Protokolls.

NookShar 1. Mai 2006 16:09

Re: Spiel! Suchen im Netzwerk!
 
ich habe das ganze mit Hilfe der INDYs gelöst:

benötigte INDYs
Client:
IdIPWatch
IdUDPServer (Port 10026)
IdUDPClient (Port 10025, BroadcastEnabled = True)

Server:
IdIPWatch
IdUDPClient (Port 10026)
IdUDPServer (Port 10025, BroadcastEnabled = True)

Im Spielclient:
Delphi-Quellcode:
//starte "suche"
IdUDPClient1.Broadcast(idIPWatch1.CurrentIP, 10025)

//ergebnis erhalten
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TBytes; ABinding: TIdSocketHandle);
begin
  ListBox1.Items.Add(Copy(BytesToString(Adata), 0, length(Adata)));
end;
Im Server:
Delphi-Quellcode:
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TBytes;
  ABinding: TIdSocketHandle);
var
  ip: string;
begin
  ip := Copy(BytesToString(Adata), 0, length(Adata));
  with IdUDPClient1 do
  begin
    Host := ip;
    Active := true;
    Send(ip, 10026, IdIPWatch1.CurrentIP);
    Active := false;
  end;
end;

Hoffe damit geholfen zu haben ;)

pacman1986 1. Mai 2006 16:42

Re: Spiel! Suchen im Netzwerk!
 
Auf jeden fall dankeschön :thumb:
:dp:
mfg pacman

tarnschaf 6. Mär 2007 14:17

Re: Spiel! Suchen im Netzwerk!
 
Es gibt auch eine Möglichkeit einen Broadcast auf nur einem Port durchzuführen, manchmal kann man dazu gezwungen sein, weil man an ein bestehendes Protokoll anlehnt.

Dazu braucht man beim Broadcaster nur eine Indy-Komponente, und zwar einen IdUDPServer. (Beispiel bezieht sich auf Indy Version 10)

Den Broadcast startet man mit
IdUDPServer1.Active := true; // Damit Antworten empfangen werden
IdUDPServer1.Broadcast('hallo', 1234); // Sendet 'hallo' an alle auf Port 1234

Die Antworten fängt man in OnUPDRead

procedure Form.IdUDPServer1UDPRead(Sender: TObject; AData: TBytes;
ABinding: TIdSocketHandle);
var
str : String;
begin
// Umwandeln der Daten in einen String
str := BytesToString(AData);
// IP-Adresse des Senders liegt in ABinding.PeerIP
end;


Interessanterweise scheint es dabei egal zu sein, ob man vorher einen Port oder die EnableBroadcast Eigenschaft des Servers festlegt. Weggelassen im Beispiel wurde die Gegenseite, d.h. der Client.

Grüße,
Michael


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz