Entwickler-Ecke
Internet / Netzwerk - TCP Client ohne GUI
PSLenny - So 04.07.10 11:59
Titel: TCP Client ohne GUI
Guten Mittag liebe Community :)
Seit Tagen versuche ich einen TCP Client ohne Interface zu schreiben. Allerdings weiß ich nicht wie ich vorgehen soll, da ich zuvor immer nur das TTcpClient Control verwendet habe, und ich mir nicht sicher bin, ob ich dieses auch z.B. bei einer Konsolen Anwendung verweden kann.
Überlegt hatte ich mir folgendes:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| program TCPClient.Console;
{$APPTYPE CONSOLE}
uses Windows, SysUtils, Dialogs, Sockets;
var con: bool = false; CSocket: TTcpClient;
begin CSocket.RemoteHost := '127.0.0.1'; CSocket.RemotePort := '7777'; CSocket.Active := true; While (con = false) Do Begin If Csocket.Connect() then begin con := true; WriteLn('Successfully connected'); end; end; end. |
Allerdings gibt es dort nur eine Konsolen Ausgabe: Zugriffsrecht Verletzung Access Violation o.ä (Konjsole blinkt nur auf) und im Debugger steht:
[Warnung] Variable 'CSocket' ist möglicherweise nicht initialisiert worden
Bin ich so wie ich es bis jetzt habe auf dem richtigen Weg, oder brauch ich dafür andere Komponenten? Wie kann ich CSocket initialisieren, oder bin ich auf dem Holzweg?
Vielen Dank im Voraus, und schönen Sonntag noch!
Grüße,
Lenny
jaenicke - So 04.07.10 13:23
PSLenny hat folgendes geschrieben : |
| Wie kann ich CSocket initialisieren, oder bin ich auf dem Holzweg? |
Wie in einer normalen Anwendung auch.
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| xy := TXy.Create(nil); try xy. ... finally xy.Free; end; |
Du hast bei einer Konsolenanwendung aber keine Botschaftswarteschlange oder ähnliches, dementsprechend kannst du keine Windows Botschaften empfangen usw.
PSLenny - So 04.07.10 15:15
Hallo jaenicke und vielen Dank - das hat mir sehr geholfen!
In der Zwischenzeit bin ich auf die Indy Irc Komponente gestoßen - genau das wonach ich gesucht habe! Allerdings war mein Problem ja allgemeingültig - also hat es mir auch hier sehr viel geholfen!
Nun hätte ich zu der Komponente selbst noch ein Problem: Ich kann zu keinem Server connecten, bzw. keinem Channel joinen! Ich weiß nicht ob ich erfolgreich connecte, aber Irc.Connected sagt ja.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| program Project2;
{$APPTYPE CONSOLE}
uses SysUtils, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdIRC;
var IRC: TIdIrc;
begin IRC := TIdIrc.Create(nil); try IRC.Host := ('clanserver4u.de.quakenet.org'); IRC.Port := 6667; IRC.Username := 'PalimPalim'; IRC.Nick := 'SupderDuper'; IRC.AltNick := 'DingDong'; IRC.Connect(); Sleep(10000); IRC.Join('#UniChat10'); WriteLn('Joined'); Sleep(10000); finally IRC.Free; end; end. |
Wenn ich das gleiche Allerdings MIT Gui nachbaue, funktioniert alles Einwandfrei!
Weiß jemand einen Rat, woran kann es liegen?
Vielen Dank im Voraus und viele Grüße,
Lenny
jaenicke - So 04.07.10 16:42
Das kann durchaus daran liegen, dass in einer Konsolenanwendung eben vieles nicht zur Verfügung steht. Wobei die Indys eigentlich auch so gehen sollten. Ich vermute, dass es an deinem Sleep liegt.
Denn statt darauf zu reagieren, dass du verbunden bist, wartest du einfach 10 Sekunden und frierst in der Zeit das Programm komplett ein. So läuft das eben nicht sinnvoll, selbst wenn du es doch irgendwie so hinzufrickeln schaffst...
Voxe - Sa 24.07.10 15:28
Hallo, vielleicht kann ich da mal helfen.
Warum eine Konsolenanwendung ??? Schreibe eine normale GUI-Anwendung, mit allen Funktionen. Stelle im Projekt, ShowMainForm auf false. Du hast alle Funktionen und kein direkt sichtbares Programm.
Gruß
Niko S. - Sa 24.07.10 18:54
Probier einfach anstatt zu warten einfach das.
Delphi-Quelltext
1: 2: 3:
| repeat readln(aCmd); until aCmd = 'quit'; |
Dann musst du erst "quit" eingeben bevor sich das Programm beendet.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!