Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Consolen Application & TClientSocket ? (https://www.delphipraxis.net/98244-consolen-application-tclientsocket.html)

sk0r 23. Aug 2007 20:45


Consolen Application & TClientSocket ?
 
Guten Abend,

ich würde gerne eine Consolen Application schreiben,
welche sich mit dem IRC-Netzwerk verbindet.

Normalerweise arbeite ich mit dem TClientSocket auf GUI Ebene.
Bei einer Console kann man aber sowas natürlich nicht platzieren. :D

Ich habe schon versucht, einfach eine Variable als TClientSocket zu deklarieren
und dann die Events selbst zuzuweisen. Aber das wollte Delphi irgendwie nicht. :(

Desshalb frage ich euch:

Kann ich irgendwie trotzdem die Komponente benutzen? Oder muss
ich mich anderen Methoden bedienen? Wenn ja, welche würdet ihr empfehlen?

Ich würde mich über Hilfe freuen. :)

MfG: sk0r

Zacherl 23. Aug 2007 20:46

Re: Consolen Application & TClientSocket ?
 
Du kannst die Komponente zur Laufzeit erzeugen. Einfach als TClientSocket deklarieren und dann über Create erzeugen.

Apollonius 23. Aug 2007 20:50

Re: Consolen Application & TClientSocket ?
 
Aber dann musst du selbst die Nachrichten abfragen und kannst du kein einfaches readln() mehr benutzen. Kurz gefasst: Lass die VCL für dich arbeiten.

Falls du es dir dennoch nicht ausreden lassen willst, hier zeigt Sirius, wie es geht.

Luckie 23. Aug 2007 21:06

Re: Consolen Application & TClientSocket ?
 
Geht genauso wie ein Timer in einer Konsole benutzen:
http://www.michael-puff.de/Developer...n_Konsole.html

dominikkv 23. Aug 2007 21:10

Re: Consolen Application & TClientSocket ?
 
das hatte ich auch mal mit den Indys...
ich hab dann einfach eine klasse erstellt und IdHTTP und deren Ereignisse in dieser klasse deklariert.

sirius 23. Aug 2007 21:29

Re: Consolen Application & TClientSocket ?
 
@Luckie
Wo wird denn in deinem Programm ein Event bearbeitet? :gruebel:

Luckie 23. Aug 2007 21:36

Re: Consolen Application & TClientSocket ?
 
Delphi-Quellcode:
procedure NotifyEvent(Self: TMethodPointer; Sender: TObject);
begin
  writeln('yes');
  beep;
end;
Etwas unglücklich benannt.

sirius 23. Aug 2007 21:51

Re: Consolen Application & TClientSocket ?
 
Deine Prozedur-Methode :mrgreen: habe ich schon gesehen. Das ist sicherlich auch das, was du meintest: Aus einer simplen Funktion eine Methode machen.

Nur dir ist hoffentlich bewusst, dass dein Timer sie im Moment nicht auslöst. Dies geschieht derezit nur direkt:
Delphi-Quellcode:
for i := 1 to 5 do
begin
  sleep(500);
  writeln('warte ' + inttostr(i * 500) + 'ms...');
  NotifyEvent(p, T); // <-- hier wird die Prozedur ganz nomral aufgerufen
  //Der Timer ist völlig überflüssig
end;
So ist es für den Timer:
Delphi-Quellcode:
for i := 1 to 5 do
begin
  sleep(500);
  writeln('warte ' + inttostr(i * 500) + 'ms...');
  while peekmessage(msg,0,0,0,pm_remove) do dispatchmessage(msg);
end;
Wobei man allerdings bei nem Timer ohne Klasse hier ja mal viel schneller über die WInApi ist. (Das ist dir sicherlich auch bewusst.)

Letzteres bringt mich allerdings wieder zurück zum Thema:
Kann es vielleicht nicht günstiger sein, die Sockets direkt über die WinApi zu machen (ich habe damit noch keine Erfahrung), als VCL-Kompos in eine nonGUI-Anwendung mit erhöhten Aufwand hineinpressen zu wollen? Zumal die Unit scktcomp nicht grade knausrig an VCL-Ressorucen ist. Wenn man die scktcomp einbindet, kann man eigentlich auch gleich ein VCL-Anwendung schreiben.

nitschchedu 23. Aug 2007 21:59

Re: Consolen Application & TClientSocket ?
 
Zitat:

Zitat von sirius
Kann es vielleicht nicht günstiger sein, die Sockets direkt über die WinApi zu machen (ich habe damit noch keine Erfahrung), als VCL-Kompos in eine nonGUI-Anwendung mit erhöhten Aufwand hineinpressen zu wollen? Zumal die Unit scktcomp nicht grade knausrig an VCL-Ressorucen ist. Wenn man die scktcomp einbindet, kann man eigentlich auch gleich ein VCL-Anwendung schreiben.

Ähhhh lass es mich so sagen das ich schon selber mit den WinAPI Funktionen gearbeitet habe, ohne Komponente müsstest du dich um das Socket Handling, Error Handling, Multitasting und die Einstellung der Socket kümmern. Ne Bissel aufwändig für dein Programm oder ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:43 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