AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi [Indy 10]: mehrere Clients mit TCP-Server verwalten
Thema durchsuchen
Ansicht
Themen-Optionen

[Indy 10]: mehrere Clients mit TCP-Server verwalten

Ein Thema von Rindajel · begonnen am 3. Jun 2007 · letzter Beitrag vom 4. Jun 2007
Antwort Antwort
Rindajel

Registriert seit: 1. Jun 2007
2 Beiträge
 
Delphi 2006 Architect
 
#1

[Indy 10]: mehrere Clients mit TCP-Server verwalten

  Alt 3. Jun 2007, 21:47
Hallo zusammen,

ich arbeite derzeit an einem Multiplayerspiel über LAN unter Benutzung der TCP Server- und Clientkomponenten. Bis jetzt habe ich immer nur einen Client mit dem Server verbunden, klappt auch wunderbar. Aber wie funktioniert das jetzt mit mehreren Clients?
Ich muss dazu sagen, dass es mein erstes Projekt mit Indy (bzw. mein erstes Netzwerkprojekt überhaupt) ist, daher ein paar generelle Fragen:

Wo speichert der Server die verschiedenen Verbindungen, wie kann ich darauf zugreifen und sie ggf. unterscheiden?
Wie kann ich einen String gleichzeitig (bzw. nacheinander in einer Zählschleife) an alle verbundenen Clients senden?

Habe schon gegooglet und auch hier im Forum gesucht, bin aber nicht viel weitergekommen? Gibt es vllt. eine Chat-Demo für Indy 10?

Danke schon im Voraus,
Gruß Rindajel
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: [Indy 10]: mehrere Clients mit TCP-Server verwalten

  Alt 3. Jun 2007, 23:17
Jeder Client erzeugt einen eigenen Thread. Über die Data-Eigenschaft des TIdPeerThread kannst Du im OnConnect-Ereignis des Servers ein Datenmodul instantiieren (ob das nun von TDatamodule abgeleitet ist oder nicht, ist irrelevant) und dann die Daten der Connection in diesem Objekt speichern. Wenn deine Anwendung dagegen sessionbasiert ist, benötigst du einen threadsicheren Container sowie eine Session-ID. Das kann z.B. eine GUID sein. Dein Container kann eine TStringlist sein, die natürlich mit ggeigneten Verfahren threadsicher gemacht wird.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Rindajel

Registriert seit: 1. Jun 2007
2 Beiträge
 
Delphi 2006 Architect
 
#3

Re: [Indy 10]: mehrere Clients mit TCP-Server verwalten

  Alt 4. Jun 2007, 20:56
Danke für die Antwort, aber um ehrlich zu sein, habe ich von dem, was du geschrieben hast, nicht einmal die Hälfte verstanden. Kannst du es bitte nochmal für Idioten beschreiben?? Wenn möglich auch mit Codebeispielen, vor allem für das OnConnect Ereignis und wie dann Daten an alle Clienten verschickt werden.
Mein OnConnect sieht derzeit so aus:
Delphi-Quellcode:
procedure TForm1.IdTCPServer1Connect(AContext: TIdContext);
begin
AContext.Connection.IOHandler.WriteLn('100 Connected');
AContext.Data:=TUserData.Create;
end;
Ist nicht viel, ich habe es auch nur wo rauskopiert.

Für was ist eigentlich die Bindings Eigenschaft des Servers verantwortlich? Kann ich die Clients nicht auch darüber ansprechen?

Gruß, Rindajel


EDIT: Ich habe versucht, es anhand einer Indy 9 Demo nachzuvollziehen, mein OnConnect sieht jetzt so aus:
Delphi-Quellcode:
procedure TForm1.IdTCPServer1Connect(AContext: TIdContext);
var response:String;
    Client:TUserData;
begin
response:='100 Connected';
AContext.Connection.IOHandler.WriteLn(response);
Client:=TUserData.Create;
Client.Host:=AContext.Connection.Socket.Host; {Greife ich so auf den Host zu, oder geht das über AContext.Connection.IOHandler.Host ??}
Client.Port:=AContext.Connection.Socket.Port; //das selbe wie beim Host
{Client.Thread:=AContext.}  //wie weise ich den Thread zu?
Clients.Add(Client);
{AContext.Data:=TUserData.Create;}
Memo1.Lines.Add('***Verbindung hergestellt mit ' + Client.Host + '***');
Memo1.Lines.Add('Sende ' + response);
end;
Die entsprechende Klasse TUserData sieht so aus:
Delphi-Quellcode:
TUserData = class
  public
    Host:String;
    Port:Integer;
    Thread:Pointer;
  end;
Clients ist eine TList ...

Gruß, Rindajel
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:44 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