![]() |
Re: Einstieg in Server-/Clientprogrammierung
Bei den Indys ist doch AFAIK eine Chat-Demo dabei, wo auch die Clients verwaltet werden :gruebel:
|
Re: Einstieg in Server-/Clientprogrammierung
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? |
Re: Einstieg in Server-/Clientprogrammierung
Zitat:
Zitat:
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:
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. |
Re: Einstieg in Server-/Clientprogrammierung
Zitat:
Am einfachsten über NAT des Routers (serverseitig). Edit: Wer hat mir da ein quote-Tag geklaut? Edit2: :wall: |
Re: Einstieg in Server-/Clientprogrammierung
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 :wink: ). Aber so genau kenne ich mich da nicht aus. |
Re: Einstieg in Server-/Clientprogrammierung
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:
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. :gruebel: Weiß nichtmal, wie man vernünftig mit einem Hauptprogramm und mehreren Fenstern arbeitet,... Gibts da was gegen? :roll: |
Re: Einstieg in Server-/Clientprogrammierung
Zitat:
Zitat:
|
Re: Einstieg in Server-/Clientprogrammierung
So hatte ich mir das anfangs ja auch gedacht.
Delphi-Quellcode:
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....
[...]
type TMainForm = class(TForm) Server: TMeinChatVerwalterMitTCPServerDrin; BtStartServer: TButton; BtStopServer: TButton; [...] Ich kann von der Form aus ja nicht mehr die Serverevents abfangen. Wie mache ich eigene Events??? |
Re: Einstieg in Server-/Clientprogrammierung
Delphi-Quellcode:
Sobald OnChangeList belegt ist, dann wird es in MachWas ausgeführt.
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; Du müsstest in der MainForm dein Event noch belegen:
Delphi-Quellcode:
Das ganze lässt sich noch mit property, etc. verfeinern, aber so sollte es erstmal funktionieren.
InstanzVonTMyClass.OnChangeList := ProcedureZumAbarbeitenVonChangeList;
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 :wink: |
Re: Einstieg in Server-/Clientprogrammierung
Okay, ich glaube es verstanden zu haben... ob ich recht habe, wird sich gleich zeigen.
P.S.: Okay :stupid: 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 :pale: :pale: :pale: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 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