IRC Client [IdIRC] D7

Paulchen

Grünschnabel
Hi,

ich schreibe zur Zeit einen IRCClient in Delphi. Leider bin ich irgendwie auf die IndyKomps angewiesen, da D7 irgendwas mit der WinSock angerichtet hat (gelöscht, geändert, ka).

Auf jedenfall bekomm ich vom Server (Quakenet) immer eine Fehlermeldung: Your client may not be compatible with this server.

Muss ich irgendwelche Daten an den Server senden oder bedeutet das ich kanns vergessen?! :confused:

MfG

Sepp
 
Ich hab das auch mal mit den Indy-Komponenten versucht, bin aber nicht besonders weit gekommen. Ich glaube, ich bin damals sogar an dem gleichen Problem hängengeblieben.
Als Lösung hab ich dann die normalen Socket-Komponenten (TClientSocket) genommen. Dabei muss man sich zwar näher mit dem IRC-Protokoll auseinandersetzen, aber es funktioniert wenigstens.

Dass in Delphi 7 etwas an der WinSock-Schnittstelle geändert worden ist, glaube ich allerdings kaum. Und wenn dabei irgendwas nicht funktioniert, liegt es vermutlich eher an Windows oder einer fehlerhaften Delphi-Installation.
 
Nein, komplette Installation. Der Winsock Fehler kommt nicht bei den Indy Komponenten, jedoch bei der Vortex Kompo oder der TircKombo.

Delphi meldet dann immer einen wsocket.dcu Fehler. Die Datei ist nicht vorhanden!

In der Delphi FAQ ist das Problem auch behandelt worden. Leider habe ich keine Lösung für das Problem gefunden.

Kannst Du mir ein paar Tipps geben für die TSocketClient Lösung?!

Das einzigste was ich möchte, connecten auf Server, Nachricht schicken. Hast du ein Tutorial oder ähnliches, was mir die Arbeit abnehmen könnte (Dank an IndyTools :().

CU Sepp
 
Überprüf doch mal, ob die Datei vorhanden ist und such zur Sicherheit auch noch mal auf der Installations-CD von Delphi. Vielleicht ist die Datei nicht richtig kopiert worden.
Evtl. hilft Dir auch das hier weiter:
http://community.borland.com/article/0,1410,29768,00.html

Mit dem TClientSocket kannst Du alle möglichen Verbindungen herstellen, Du musst nur das Übertragungsprotokoll der jeweiligen Verbindung verstanden haben. Dabei wäre es ganz hilfreich, wenn Du Dich wirklich erstmal mit dem IRC-Protokoll selbst auseinandersetzt. Informationen darüber findest Du bei Google oder in der entsprechenden RFC-Dokumentation.
Du müsstest einfach nur mit den Ereignissen des TClientSocket-Objektes die Daten empfangen, auswerten und darauf reagieren. Ich kann mal bei Gelegenheit nachsehen, ob ich mein altes Projekt noch wiederfinde, dann poste ich mal den Code davon.
 
Das wäre echt super!!

Mir gehts wirklich nur um diese 2 dinge, connect, sendmessage!

Wenn jemand eine Komponente für D7 kennt, dann bitte her damit!!!


Danke Lirion, ich hoffe du findest das :)!

CU Sepp
 
-

So schwer ist das Ganze doch nicht ;-]

Um dich erfolgreich mit dem Server zu verbinden, musst du die Nachrichten richtig parsen.
Soll heißen, dass du die Server-Nachricht nach Benutzer, Kommando und folgende Parameter aufsplitten musst. Im OnReceive Ereignis von TClientSocket empfängst du die Nachrichten und parst sie dann. Dazu brauchst du nur Copy, Delete und Pos als String Funktionen. Wie nun diese Server-Nachrichten aufgebaucht sind, steht, wie schon von Lirion erwähnt, in der RFC 1459.
 
Meinst Du das OnRead Ereigniss? Ein OnReceive E. gibt es bei mir nicht. Sorry wenn ich mich so querstelle, ist keine Absicht! Funktioniert das mit dem Senden (Write) genauso?!

Könnte mal jemand so einen einfachen ClientSocketConnect hier posten?!

Also welche Kombos man braucht (außer TClientSocket) und wie man die Daten vom Server ausliest (nicht parsed - ich würde gern erstmal Daten erhalten ;)) und Daten zum Server schickt.

Ich bin schon mal zu einem Server connected und er hat mir auch infos ausgegeben (IRC: ... hostname resolved ...) jedoch konnte ich ihm nichts senden oder gar beibringen mir die MOTD auszulesen. Das ganze scheitert dann immer am PingTimeOut -- draußen bin ich.

Ich danke Euch für die Mühe, aber eine einfache "RAW"-Ausgabe würde mir schon reichen! Ich bekomms nicht mal das hin :mad:

MfG

Paulchen

PS: Oder ein Turorial über die TClientSocket.
 
-

Hallo Paulchen!
Du brauchst erstmal nur die TClientSocket Komponente auf deinem Formular. Dann trägst du in den Eigenschaften unter Host den IRC Server ein und unter Port halt den Standartport 6667. Active setzt du noch auf true, damit bei der Initilisierung deiner Komponente gleich eine Verbindung hergestellt wird. Im OnConnect Ereignis trägst du eine Prozedur ein, die dir per ShowMessage ausgibt, dass du verbunden bist. Die Nachricht sollte eigentlich immer ausgegeben werden, solange du den Server-Namen richtig eingegeben hast. Im OnRead Ereignis fängst du dann die Nachrichtigen, die vom Server kommmen, ab.
Um korrekt auf einen Server zu connecten benötigst du allerdings einen richtigen Ping-Reply, wofür du die Server-Nachrichtigen richtig parsen musst.
Um beim OnConnect deine Identifizierung an den Server zu schicken, kannst du per Socket.SendText('Konstanter String') deinen Text senden. Socket ist hier vom Typ TCustomWinSocket und wird dir schon als Parameter übergeben.

Code:
:Sender!uid@host COMMAND Target Argumente
So sieht die Nachricht vom Server im allgemeinen aus. Ob Sender etc. vorhanden ist, signalisiert der Doppelpunkt am Anfang, ist Sender vorhanden muss aber nicht unbedingt uid und host vorhanden sein, festzustellen am !. Der Befehl ist immer das nächste, darauf folgend das Target des Befehls, auf was dieser Befehl zutrifft (Channel, Nick). Danach kommen die Parameter des Befehls, welche z.T. mit einem Doppelpunkt beginnen können (NOTICE, PRIVMSG, QUIT,...). Mit Copy, Pos und Delete kann man die eingehende Zeile wunderbar zerlegen, versuchs mal.

Am Ende jeder Nachricht steht immer CRLF. Sollte jedoch eine Nachricht über 2 Packete gesendet werden, musst du den ersten Teil der Nachricht speichern und auf den nächsten CRLF warten, um dann zu parsen.

Das sollte an Informationen erstmal genügen, probier einfach ein bisschen rum, dann wird das schon ;)
 
Na das nenn ich mal ein Wort :) !

Danke für alles!

Ich werd gleich ein wenig rum experimentieren ...


CU Paulchen
 
Hi Zusammen,

hat jemand vielleicht einen source zur IdIrc

wäre echt super, ich komm einfach nicht weiter!

->Bin voll am verzweifeln


jetzt schon vielen dank

Ulli
 

Neue Beiträge

Zurück