AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Einstieg in Server-/Clientprogrammierung
Thema durchsuchen
Ansicht
Themen-Optionen

Einstieg in Server-/Clientprogrammierung

Ein Thema von everdream · begonnen am 15. Jan 2008 · letzter Beitrag vom 23. Jan 2008
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#11

Re: Einstieg in Server-/Clientprogrammierung

  Alt 15. Jan 2008, 19:16
Bei den Indys ist doch AFAIK eine Chat-Demo dabei, wo auch die Clients verwaltet werden
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von everdream
everdream

Registriert seit: 22. Feb 2007
Ort: Hiddenhausen
192 Beiträge
 
Delphi 2005 Personal
 
#12

Re: Einstieg in Server-/Clientprogrammierung

  Alt 15. Jan 2008, 19:50
Da werd' ich gleich mal nach sehen.

So wie ich es bis jetzt verstanden hab, kann man in AThread.Data (heißt bei mir übrigens AContext.Data) einen beliebigen Typen reinschreiben und diesen mit allen Informationen füllen, die man braucht. Oder ist es aus irgendeinem Grund besser nur einen Index da rein zu schreiben udn den Rest dann irgendwo anders zu haben... mit dem Index würde man dann ja auch direkt dran kommen.

edit:
Okay, die Identifizierung wird soweit kein Problem mehr sein.
Wie sieht das jetzt mit Routern usw. aus? Damals hab' ich den Zugriff von Clients auf meinen PC als Server durch Forwarding ermöglicht. Kann man das irgendwie umgehen??

edit2:
Mal ne ganz blöde Frage wegen OOP.
Wenn ich eine eigene Klasse schreibe, die den Server und die Clients verwaltet,... wie kann, z.B. bei nem "Connect"-Ereignis, der Form-Klasse sagen, dass sie die Clientliste(Listbox) und die History(Memo) aktualisieren soll?
Max
"Das Ziel ist im Weg!"
  Mit Zitat antworten Zitat
Benutzerbild von halinchen
halinchen

Registriert seit: 13. Jun 2006
508 Beiträge
 
Delphi 2007 Professional
 
#13

Re: Einstieg in Server-/Clientprogrammierung

  Alt 16. Jan 2008, 14:45
Zitat von everdream:
So wie ich es bis jetzt verstanden hab, kann man in AThread.Data (heißt bei mir übrigens AContext.Data) einen beliebigen Typen reinschreiben und diesen mit allen Informationen füllen, die man braucht. Oder ist es aus irgendeinem Grund besser nur einen Index da rein zu schreiben udn den Rest dann irgendwo anders zu haben... mit dem Index würde man dann ja auch direkt dran kommen.
Ich denke das ist Geschmackssache. Ich habe es, glaube ich, damals mit einer extra Liste gemacht. Aber nötig ist das IMHO nicht.

Zitat von everdream:
edit:
Okay, die Identifizierung wird soweit kein Problem mehr sein.
Wie sieht das jetzt mit Routern usw. aus? Damals hab' ich den Zugriff von Clients auf meinen PC als Server durch Forwarding ermöglicht. Kann man das irgendwie umgehen??
Tja, das wird nicht so leicht gehen. Wenn du mal guckst, haben auch alle Onlinespiele (TrackMania United, Need for Speed: Pro Street, ...) irgendwo stehen, dass man gewisse Port "forwarden" sollte.
Einzige Möglichkeit: Nimm einen zentralen Server, alle Clients verbinden sich dorthin. Der Server ist dann quasi der Vermittler zwischen Client und Client. Fast alle Chatprogramme machen das so (ICQ, GTalk, ...).

Zitat von everdream:
edit2:
Mal ne ganz blöde Frage wegen OOP.
Wenn ich eine eigene Klasse schreibe, die den Server und die Clients verwaltet,... wie kann, z.B. bei nem "Connect"-Ereignis, der Form-Klasse sagen, dass sie die Clientliste(Listbox) und die History(Memo) aktualisieren soll?
Kommt ganz darauf an wie man es macht.

a) Der Server sendet "Neuer Benutzer: X" an alle Clients
b) Der Server sendet "Neue Liste" und die Clients vergleichen die Liste vor und nach der Aktualisierung.
c) ...

Im Endeffekt könnte man dann eine neue Mehtode machen (z.B NewUser, etc. ) und darin vielleicht irgendwie am Ende eine andere Methode Refresh aufrufen.

So allgemein kann ich da aber nichts sagen.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: Einstieg in Server-/Clientprogrammierung

  Alt 16. Jan 2008, 15:05
Zitat von everdream:
Wie sieht das jetzt mit Routern usw. aus? Damals hab' ich den Zugriff von Clients auf meinen PC als Server durch Forwarding ermöglicht. Kann man das irgendwie umgehen??
Was ist Forwarding?
Am einfachsten über NAT des Routers (serverseitig).

Edit: Wer hat mir da ein quote-Tag geklaut?
Edit2:
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von halinchen
halinchen

Registriert seit: 13. Jun 2006
508 Beiträge
 
Delphi 2007 Professional
 
#15

Re: Einstieg in Server-/Clientprogrammierung

  Alt 16. Jan 2008, 15:26
Macht NAT nicht nur, dass die Daten, welche an die globale IP des Routers gesendet werden, an einen lokalen Rechner weitergegeben werden?

Unser Router kann auch NAT, aber die Forwarding-Einstellungen musste ich trotzdem ändern.

Außerdem blockt die integrierte Firewall meist ankommende Daten, welche von einer IP kommen an welche nichts geschickt wurde. Wenn der Server hinter einem Router sitzt, dann muss IMHO immer "forgewarded" werden. (Ich liebe Denglish ).

Aber so genau kenne ich mich da nicht aus.
  Mit Zitat antworten Zitat
Benutzerbild von everdream
everdream

Registriert seit: 22. Feb 2007
Ort: Hiddenhausen
192 Beiträge
 
Delphi 2005 Personal
 
#16

Re: Einstieg in Server-/Clientprogrammierung

  Alt 16. Jan 2008, 16:27
Hm, ich bleib' wohl erstmal beim "Forward", auch wenn meine Netzwerk-/Routeronfiguration im Moment quasi auf Messers schneide steht... Wenn ich mir jetzt ne statiscge IP einstelle, weiß ich nicht, ob ich irgendwie wieder ins inet komme... sehr launisch, das Teil!

btw: Was genau ist jetzt NAT? Wenn man trotz NAT noch die "Forward"-Einstellung machen muss, dann kann mans ja auch lassen.

Joa, die Daten packe ich jetzt alle in ein Array, in AContext.Data steht dann nur ein Index.

Zitat von halinchen:
Zitat von everdream:
edit2:
Mal ne ganz blöde Frage wegen OOP[...]
Kommt ganz darauf an wie man es macht.

a) Der Server sendet "Neuer Benutzer: X" an alle Clients
b) Der Server sendet "Neue Liste" und die Clients vergleichen die Liste vor und nach der Aktualisierung.
c) ...
Im Endeffekt könnte man dann eine neue Mehtode machen (z.B NewUser, etc. ) und darin vielleicht irgendwie am Ende eine andere Methode Refresh aufrufen.
Nee, so meinte ich das nicht.

Hm, vllt sollte ich das Problem etwas allgemeiner schildern. Also:
Ich möchte eine von meiner Form unabhängige Klasse entwickeln, die unter anderem(?) eine Instanz von TidTCPServer enthält.
a) Ist das überhaupt sinnvoll?
wenn a) dann
b) Wie muss ich das ganze aufbauen? Die Klasse als Hauptprogramm mit einer MainForm: TChatForm; (oder so), die dann angezeigt wird?

Habe in dem Bereich leider garnix drauf. Weiß nichtmal, wie man vernünftig mit einem Hauptprogramm und mehreren Fenstern arbeitet,... Gibts da was gegen?
Max
"Das Ziel ist im Weg!"
  Mit Zitat antworten Zitat
Benutzerbild von halinchen
halinchen

Registriert seit: 13. Jun 2006
508 Beiträge
 
Delphi 2007 Professional
 
#17

Re: Einstieg in Server-/Clientprogrammierung

  Alt 16. Jan 2008, 16:39
Zitat von everdream:
Ich möchte eine von meiner Form unabhängige Klasse entwickeln, die unter anderem(?) eine Instanz von TidTCPServer enthält.
a) Ist das überhaupt sinnvoll?
Ich denke schon.

Zitat von everdream:
b) Wie muss ich das ganze aufbauen? Die Klasse als Hauptprogramm mit einer MainForm: TChatForm; (oder so), die dann angezeigt wird?
Ich würde eher der Mainform ein Feld deiner Klasse geben. (Die Mainform beinhaltet eine Instanz der Klasse.)
  Mit Zitat antworten Zitat
Benutzerbild von everdream
everdream

Registriert seit: 22. Feb 2007
Ort: Hiddenhausen
192 Beiträge
 
Delphi 2005 Personal
 
#18

Re: Einstieg in Server-/Clientprogrammierung

  Alt 16. Jan 2008, 17:02
So hatte ich mir das anfangs ja auch gedacht.

Delphi-Quellcode:
[...]
type
  TMainForm = class(TForm)
    Server: TMeinChatVerwalterMitTCPServerDrin;
    BtStartServer: TButton;
    BtStopServer: TButton;
[...]
Muss ich dann eigene Ereignisse in meine Klasse einbauen? Sowas wie OnClientChange oder OnNewHistory, wo dann die Form jedes mal die Clientliste aktualisiert oder eine Zeile an das HistoryMemo anfügt....

Ich kann von der Form aus ja nicht mehr die Serverevents abfangen.

Wie mache ich eigene Events???
Max
"Das Ziel ist im Weg!"
  Mit Zitat antworten Zitat
Benutzerbild von halinchen
halinchen

Registriert seit: 13. Jun 2006
508 Beiträge
 
Delphi 2007 Professional
 
#19

Re: Einstieg in Server-/Clientprogrammierung

  Alt 16. Jan 2008, 17:28
Delphi-Quellcode:
type
  TMyEvent = procedure; //Hier Eventuell noch Parameter festlegen
//TMyEvent = procedure (MyVar1, MyVar2 : String);

  TMyClass = class
  public
    OnChangeList : TMyEvent;
    
    procedure MachWas;
  end;

...

procedure TMyClass.MachWas;
begin
  if assigned(OnChangeList) then
    OnChangeList;
end;
Sobald OnChangeList belegt ist, dann wird es in MachWas ausgeführt.

Du müsstest in der MainForm dein Event noch belegen:

InstanzVonTMyClass.OnChangeList := ProcedureZumAbarbeitenVonChangeList; Das ganze lässt sich noch mit property, etc. verfeinern, aber so sollte es erstmal funktionieren.


Du musst deine Klasse zur Laufzeit erstellen und ein Event zuordnen. Wenn du das zur Design-Time machen willst, dann musst du das als Komponente programmieren.

Ersteres ist aber zum schnellen Testen von Änderungen optimaler, da man bei der 2. Variante die Komponente erst neu installieren müsste.

P.S. Nächstes mal: Neue Frage, neuer Thread
  Mit Zitat antworten Zitat
Benutzerbild von everdream
everdream

Registriert seit: 22. Feb 2007
Ort: Hiddenhausen
192 Beiträge
 
Delphi 2005 Personal
 
#20

Re: Einstieg in Server-/Clientprogrammierung

  Alt 16. Jan 2008, 17:49
Okay, ich glaube es verstanden zu haben... ob ich recht habe, wird sich gleich zeigen.

P.S.: Okay


edit:
Okay, vielleicht sollte ich das mit den Klassen mal ganz einfach vergessen...
Durch die Events steig' ich leider nicht durch, zumal mir wohl viele Grundlagen fehlen, um sowas zu machen.

Und ohne die Events hab' ich auch keine Ahnung, wie meine Klassen verbunden werden könnten.

Ohne Klassen wirds aber wieder so unübersichtlich und ... arghs
Max
"Das Ziel ist im Weg!"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 00:01 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