Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   VCL-Server mit Konsolen-Clienten verbinden. - (Peinliches) Anfänger Problem. (https://www.delphipraxis.net/183761-vcl-server-mit-konsolen-clienten-verbinden-peinliches-anfaenger-problem.html)

Alieze 2. Feb 2015 21:37

VCL-Server mit Konsolen-Clienten verbinden. - (Peinliches) Anfänger Problem.
 
Heyho,

Mir ist es etwas peinlich danach zu fragen da es unzählige Tutorials gibt, die mir aber alle nicht weitergeholfen haben. Ich habe bereits einen Chat mit Server und Clienten programmiert. ( Wie so ziemlich jeder der mit Sockets etc anfängt. :P ) Beide Anwendungen waren VCL-Anwendungen. Es hat auf den ersten Versuch reibungslos geklappt. Nun versuche ich meinen VCL-Server mit einem Konsolen-Clienten zu verbinden.. klappt aber agr nicht. Delphi gibt mir keinen Syntax-Fehler jeddoch verbinden die beiden nicht. Den Server habe ich mit telnet getestet, es ging. Liegt wohl am Client. Hier unten ist mal der Client Code.


Delphi-Quellcode:
program Project2;
{$APPTYPE CONSOLE}
{$R *.res}
uses
  System.SysUtils, ScktComp, ShellApi, Windows;
  var clientSocket: TClientSocket;
begin
 try
       //Sockets
       clientSocket := TClientSocket.Create(nil);
       clientSocket.Host := '127.0.0.1';
       clientSocket.Port := 9126;
       clientSocket.Open;
       Readln;
 Finally
  end;
end.

himitsu 2. Feb 2015 22:14

AW: VCL-Server mit Konsolen-Clienten verbinden. - (Peinliches) Anfänger Problem.
 
Man mag es kaum glauben, aber diese Socket-Komponenten arbeiten mit Windows-Messages ... sie benötigen also die VCL (deren Messagebehandlung) oder du mußt selber diese Messages behandeln/verarbeiten (Stichwort: Message-Loop).

Der schöne Günther 3. Feb 2015 08:11

AW: VCL-Server mit Konsolen-Clienten verbinden. - (Peinliches) Anfänger Problem.
 
Wenn man das kaum glauben mag ist das durchaus berechtigt. Dass man aus der schwammigen Formulierung
Zitat:

Add a TClientSocket object to a form or data module to turn an application into a TCP/IP Client
sich nicht gleich bastelt "Das hier ist ein uraltes Relikt aus Windows 3.1-Zeiten das über irgendwelche obskuren "Messages" realisiert wird" kann man einem sicher keinen Vorwurf machen.

Ich fände mir von einem "Man mag es ja kaum glauben, ..." doch ziemlich auf die Füße getreten.

himitsu 3. Feb 2015 09:01

AW: VCL-Server mit Konsolen-Clienten verbinden. - (Peinliches) Anfänger Problem.
 
Diese Tatsache hätte man eventuell auch aus vielen Tutorials rauslesen können, welche das Problemchen hoffentlich erwähnen, oder indem man nach hängt/freeze/... sucht.

PS: In Vielen der Socketkomponenten fundet man so schöne HWND und Dergleichen.
Unit ScktComp: Messages, WM_USER und in TCustomWinSocket die vielen Message-Events, hätten einen schon etwas stutzig machen können.



Unit Sockets?

Arbeitet Indy eigentlich komplett mit Threads, Events und ohne Windows-Messages? (abgesehn vom TidAntiFreeze)

Der schöne Günther 3. Feb 2015 09:06

AW: VCL-Server mit Konsolen-Clienten verbinden. - (Peinliches) Anfänger Problem.
 
Zitat:

Zitat von himitsu (Beitrag 1288688)
Messages, WM_USER und in TCustomWinSocket die vielen Message-Events, hätten einen schon etwas stutzig machen können.

Nicht wenn man ein "peinliches Anfängerproblem" hat. Denn dann versteht man auch bei einem "WM_USER" nur Bahnhof und fragt lieber in einem Internetforum nach.

himitsu 3. Feb 2015 09:36

AW: VCL-Server mit Konsolen-Clienten verbinden. - (Peinliches) Anfänger Problem.
 
Kommt drauf an, bei was man Anfänger ist.

Vielleicht hatte er ja vorher ja auch schon viele Jahre Erfahrung in C++ oder mit Nicht-Socket-Delphi-Zeugs. :D

Der schöne Günther 3. Feb 2015 09:49

AW: VCL-Server mit Konsolen-Clienten verbinden. - (Peinliches) Anfänger Problem.
 
Was mich nur wundert- Die Win3.1-Socket-Komponenten sind doch schon seit Delphi7 oder so standardmäßig nicht mehr installiert, oder? Höchst mysteriös.

PS: Wie verhält sich das eigentlich mit Datenmodulen in einer Konsolenanwendung? Ich meine, ich hatte für einen Test mal eine Konsolenanwendung mit einem Datenmodul mit Timer drauf. Und der funktionierte bestens. Und der geht ja auch über Messages. Also hätte in diesem Fall die Doku, trotz der flachsigen Formulierung, wahrscheinlich absolut Recht: Wenn du in einer Konsolenanwendung noch gerne mit den Windows 3.1-Socketkomponenten arbeiten möchtest stehen die Chancen wohl gut, diese auf ein Datenmodul packen zu können.

p80286 3. Feb 2015 11:53

AW: VCL-Server mit Konsolen-Clienten verbinden. - (Peinliches) Anfänger Problem.
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1288695)
Was mich nur wundert- Die Win3.1-Socket-Komponenten sind doch schon seit Delphi7 oder so standardmäßig nicht mehr installiert, oder? Höchst mysteriös.

PS: Wie verhält sich das eigentlich mit Datenmodulen in einer Konsolenanwendung? Ich meine, ich hatte für einen Test mal eine Konsolenanwendung mit einem Datenmodul mit Timer drauf. Und der funktionierte bestens. Und der geht ja auch über Messages. Also hätte in diesem Fall die Doku, trotz der flachsigen Formulierung, wahrscheinlich absolut Recht: Wenn du in einer Konsolenanwendung noch gerne mit den Windows 3.1-Socketkomponenten arbeiten möchtest stehen die Chancen wohl gut, diese auf ein Datenmodul packen zu können.

Schreib mal ob Du dazu was findest, sonst müßte ich mich dann auch mal aufmachen um heraus zu bekommen wie mann eine Messageloop ordentlich implemantiert.

Gruß
K-H

himitsu 3. Feb 2015 12:39

AW: VCL-Server mit Konsolen-Clienten verbinden. - (Peinliches) Anfänger Problem.
 
Timer: Eine Konsolenanwendung hat keine Messagebehandlung, außer du hattest selber eine eingebaut,

oder du hattest etwas benutzt, welches sowas macht. (z.B. Application.ProcessMessages?)

DeddyH 3. Feb 2015 12:59

AW: VCL-Server mit Konsolen-Clienten verbinden. - (Peinliches) Anfänger Problem.
 
TTimer erzeugt einfach sein eigenes Windowhandle.
Zitat:

Delphi-Quellcode:
constructor TTimer.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FEnabled := True;
  FInterval := 1000;
  FWindowHandle := AllocateHWnd(WndProc);
end;



Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 Uhr.
Seite 1 von 2  1 2      

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