![]() |
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 ? |
Re: Spiel! Suchen im Netzwerk!
Probiers doch aus. jeder Clientsocket muß natürlich einen anderen Port benutzen.
|
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.
|
Re: Spiel! Suchen im Netzwerk!
Funktioniert das auch bei windows ?
|
Re: Spiel! Suchen im Netzwerk!
Das ist eine Eigenschaft des IP-Protokolls.
|
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:
Im Server:
//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;
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 ;) |
Re: Spiel! Suchen im Netzwerk!
Auf jeden fall dankeschön :thumb:
:dp: mfg pacman |
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