AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi IRC-Client über IdTelnet
Thema durchsuchen
Ansicht
Themen-Optionen

IRC-Client über IdTelnet

Ein Thema von faux · begonnen am 17. Okt 2005
Antwort Antwort
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#1

IRC-Client über IdTelnet

  Alt 17. Okt 2005, 15:09
Hallo!

Ich versuche grad einen simplen IRC-Client mittels der Telnet-Komonente von Indy zu programmieren.

Bis jetzt habe ich eine Form (siehe Anhang) mit zwei ComboBoxen, einem Edit und einem Memo. Ins Memo kommt die Aus- und Eingabe, in der ersten ComboBox steht der Befehl (zB NICK, JOIN oder PRIVMSG), in der zweiten ComboBox das Ziel (zB ein Channel oder ein User) und in der Edit steht der Text geführt von einem Doppelpunkt.
Ich baue per TIdTelnet (Indy Telnet) die Verbindung zum Server auf und sende die Befehle wie folgt:

Delphi-Quellcode:
procedure TForm1.CommandSending(Sender: TObject; var Key: Char);
var
  tmp: String;
begin
  if (Key = #13) and (Telnet1.Connected) then
  begin
    tmp := ComboBox1.Text + ' ' + ComboBox2.Text + ' ' + Edit1.Text;
    Telnet1.WriteLn(tmp); //Hier der eigentlich Befehl
    Memo1.Lines.Add('*** SEND: '+tmp);
    if (ComboBox1.Text <> '') and (ComboBox1.Items.IndexOf(ComboBox1.Text) = -1) then
      ComboBox1.Items.Add(ComboBox1.Text);
    if (ComboBox2.Text <> '') and (ComboBox2.Items.IndexOf(ComboBox2.Text) = -1) then
      ComboBox2.Items.Add(ComboBox2.Text);
    Key := #0;
    Edit1.Text := ':';
    Edit1.SelStart := 1;
    Edit1.SelLength := 0;
  end
  else if (Key = #13) and (not Telnet1.Connected) then
    Memo1.Lines.Add('*** NOT CONNECTED');
end;
Die Daten vom Server empfange ich so:
Delphi-Quellcode:
procedure TForm1.Telnet1DataAvailable(Sender: TIdTelnet;
  const Buffer: String);
begin
  Memo1.Lines.Add(Buffer);
end;
Und das Programm beendet so:
Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  i: Integer;
begin
  if Telnet1.Connected then
  begin
    Telnet1.WriteLn('QUIT :');
    Memo1.Lines.Add('*** QUITTING');
    while Telnet1.Connected do
      for i := 0 to 10000 do
        Application.ProcessMessages;
  end;
end;
So, nun aber zu den Fragen:

1. Mache ich in den genannten Codesegmenten alles richtig? Also sendet man den Text per WriteLn, oder doch eher über SendCmd? Und geht das Beenden nur auf so umständlichem Wege, oder gibt es da eine bessere Lösung?

2. Wie kann ich jetzt auf Text vom Server reagieren? ZB: Wie kann ich einen Ping der Form PING :12345678 pongen? Oder wie kann ich die Fehlernummern abfragen? Nick existiert hat IMHO den Fehler nummer 433 denn wenn ich einen existierenden Nick benutzen will, passiert das:
Code:
:online2.no.quakenet.org 433 * faux :Nickname is already in use.
So das wärs dann mal. Ich hoffe ihr könnt mir helfen.
Danke schon mal.

Grüße
Faux
Miniaturansicht angehängter Grafiken
telnet_166.gif  
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:43 Uhr.
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