![]() |
Einstieg in Server-/Clientprogrammierung
Hallo,
ich habe während eines Praktikums schon einmal mit Server-/Clientanwendungen zu tun gehabt, allerdings lief da alles auf C# und so ganz durchgestiegen bin ich damals wirklich nicht, zumal das nun auch schon lange her ist. Wenn ich mich richtig erinnere, hatte ich 2 .dll Dateien und ein Beispielprogramm, mit dem man Strings verschicken konnte. Hat jemand sowas für Delphi irgendwo rumfliegen oder weiß, wo es das online gibt? Probleme mit Routern, IPs und, und, und,... hatte ich damals zwar, aber das krieg' ich schon geregelt. Vielen Dank schonmal für die Hilfe! :stupid: :stupid: |
Re: Einstieg in Server-/Clientprogrammierung
Die Indys sind für die Netzwerkprogrammierung ganz praktisch. Ich habe
![]() |
Re: Einstieg in Server-/Clientprogrammierung
Guten Abend,
und ![]() Grüße Klaus |
Re: Einstieg in Server-/Clientprogrammierung
Danke für die schnellen Antworten!
Habe in meinem "lib" Ordner schon 2 Ordner mit Namen "Indy9" und "Indy10", muss ich das trotzdem noch runterladen? werde mich erstmal weiter durchlesen... edit: Habe auch Zahlreiche Indy-Komponenten in meinem Delphi... TIdTCPServer + Client sind auch dabei. |
Re: Einstieg in Server-/Clientprogrammierung
Liste der Anhänge anzeigen (Anzahl: 1)
Schau doch mal ob die Komponenten da sind.
Palettenseite wären: Indy Clients, Indy Servers ,Indy Misc und Indy I/O Handlers. edit: Zitat:
|
Re: Einstieg in Server-/Clientprogrammierung
Sehr schön ^_^
Dann werde ich mich nun in die Programme vertiefen. Vielen Dank nochmal! |
Re: Einstieg in Server-/Clientprogrammierung
Mit
Delphi-Quellcode:
unter uses kann mein Delphi nix anfangen.
... ,IdCustomTCPServer,...
Aber wenn ich ...
Delphi-Quellcode:
... lösche, dann läuft das Programm aber trotzdem.
program Server;
uses Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} begin Application.Initialize; Application.MainFormOnTaskbar := True; //<-- DIESE ZEILE Application.CreateForm(TForm1, Form1); Application.Run; end. Ist das wichtig? Laufen tuts auch ohne... |
Re: Einstieg in Server-/Clientprogrammierung
MainFormOnTaskbar gibt es erst seit Delphi 2007. Die Zeile kannst du einfach weglassen.
|
Re: Einstieg in Server-/Clientprogrammierung
Okay...
Also, Verbindung aufbauen ist soweit kein Problem (zumindest, zu mir selbst :cyclops: ). Nun fehlt mir aber so'n bischen der Ansatz, wie ich die Clients verwalten könnte.. ich weiß nichtmal, wie ich da dran komme -.- |
Re: Einstieg in Server-/Clientprogrammierung
Wenn ich mich richtig errinnere hatte ich ein ähnliches Problem.
![]() Vielleicht hilft es. Ich muss dann aber erstmal weg, bis morgen. :cheers: |
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: |
Re: Einstieg in Server-/Clientprogrammierung
Habe hiermit erstmal auf Pause geschaltet...
Bevor ich weitermache, möchte ich das ganze besser strukturieren! (siehe ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10: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