![]() |
irc + clientsocket
Hi@all!
ich wollte mal probieren wie man mittels des clientsocket an einen irc-server verbindet und auch daten von ihm bekommt, bzw sendet ( auch privat message) nur ich weiß nicht wie ich das machen soll! bei mir geht der nur bis connected! kann mir da jmd helfen? danke für jede antwort! |
Re: irc + clientsocket
Hi,
ein guter Start ist sicher mal, sich das RFC durchzulesen, da steht eigentlich alles drin, was du wissen musst (im das IRC-Protokoll umzusetzen). Prinzipiell sendet der Client am anfang seinen USER- und NICKname: USER <username> <hostname> <servername> :<realname> NICK <nickname> Anschließend sendet der Server für gewöhnlich eine NOTICE, auf jeden Fall aber ein PING <irgendwas>, auf das du mit PONG <irgendwas> (wobei <irgendwas> das selbe sein muss) antworten musst. Alles weitere ist dann spezifisch... cu BTW: Das RFC findest du auf ![]() |
Re: irc + clientsocket
das rfc habe ichmir shcon mal angeguckt, nur bin net draus schlau geworden! aber ich gucke mal nach dem was du mir da geschrieben hast!
danke noch! |
Re: irc + clientsocket
Hi,
das RFC beschreibt halt das komplette Protokoll, das ist vielleicht nicht gerade benutzerfreundlich, aber nunja... Ist eben eines der Dinge, mit denen man sich herumschlagen muss, wenn man für ein bestimmtes Protokoll Software schreibt ;). Du kannst das ganze ja mal mithilfe von Telnet simulieren: Windowstaste+R drücken, "telnet <IRCserver> 6667" eingeben und dann die von mir erwähnten zeilen schicken... cu |
Re: irc + clientsocket
hättest du da vllt mal nen beispiel? weil das was ich habe funktioniert nicht!
Delphi-Quellcode:
memo1.Lines.Add('connect');
clientsocket1.Socket.SendText('USER <top10> <addy> <irc.knuddelknutscher.biz> :<realname>'); clientsocket1.Socket.SendText('NICK <top10>'); |
Re: irc + clientsocket
Hi,
Zitat:
Delphi-Quellcode:
Eine Anmerkung noch: Bei dem dritten Parameter von USER, also dem Hostname, ist es besser, den Hostname zu benutzen, zu dem ClientSocket1 wirklich verbunden ist - das muss nicht unbedingt der angegebene in ClientSocket1.Host sein, schließlich gibt es im DNS auch Weiterleitungen...
ClientSocket1.Socket.SendText('USER top10 addy irc.knuddelknutscher.biz :Echter Name'+#13#10);
ClientSocket1.Socket.SendText('NICK top10'+#13#10); cu |
Re: irc + clientsocket
und noch ne frage:
ich habe:
Delphi-Quellcode:
und bekomme keien daten ins memofeld außer das was das programm ausgibt, also
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket); begin memo1.Lines.Add(socket.ReceiveText); end; procedure TForm1.ClientSocket1Write(Sender: TObject; Socket: TCustomWinSocket); begin memo1.Lines.Add(socket.ReceiveText) end;
Delphi-Quellcode:
wieso?
memo1.Lines.Add('connect');
|
Re: irc + clientsocket
so, nachdem ich das so gemahct habe wie du es gesgat hast bekam ich auch daten1 danke erstmal! weißt du vllt noch die befehle für privatmessage senden und empfangen, joinen und nachrichten im chan empfangen und senden?
|
Re: irc + clientsocket
wieder mal ich!
habe das mit ping udn pong probiert.
Delphi-Quellcode:
der sendet aber kein pong!
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket); var text:string; begin memo1.Lines.Add(socket.ReceiveText); if copy(socket.ReceiveText,1,4)='PING' then begin text:=socket.ReceiveText; delete(text,1,pos(':',text)); ClientSocket1.Socket.SendText('PONG :'+text+#13#10); memo1.Lines.Add('PONG :'+text+#13#10); end; end; |
Re: irc + clientsocket
Hi,
Zitat:
Außerdem sendest du was falsches: Du empfängst dreimal Text (Zugriff auf socket.Receivetext), aber die Nachricht ist ja in einem Stück... Also so müsste es aussehen:
Delphi-Quellcode:
cu
var text:string;
begin text:=socket.ReceiveText; Memo1.Lines.Add('Empfangen: "'+text+'"'); if (lowercase(copy(text,1,4)) = 'ping') then begin // Hab die Parameter von delete() nicht ganz im Kopf, aber müsste es nicht Pos(':',text)+1 sein, wenn du nachher nochmal : vornedranstellst? Delete(text,1,Pos(':',text)+1); socket.SendText('PONG :'+text+#13#10); Memo1.Lines.Add('Gesendet: PONG :'+text+#13#10); end; end; |
Re: irc + clientsocket
ich glaube das +1 is das was mir fehlt, na mal gucken!
|
Re: irc + clientsocket
soweit ist jetzt alles okay! der ist verbunden und empfägt nachrichten! nur wie sende ich nachrichten und wie joine ich einen raum?
|
Re: irc + clientsocket
Hi,
die Edit-Funktion kennst du, oder? Joinen mit "JOIN #raum", wer hätt's gedacht? ;) Nachrichten werden per PRIVMSG versendet (siehe RFC). cu |
Re: irc + clientsocket
der rest ist jetzt einfach! nur wie kann man sonderzeichen ausgeben? weil wenn ich den doppelpunkt sende sagt der es geht net ich dachte da an sowas wie #58 oder was es war, aber das geht auch net!
|
Re: irc + clientsocket
Hi,
was genau geht nicht? Doppelpunkte senden geht normalerweise ohne Probleme. Bedenke, dass du bei einer PRIVMSG mit mehreren Wörtern ohnehin einen Doppelpunkt vornedran hast... Zeig mal den Quelltext, der nicht funktioniert. cu |
Re: irc + clientsocket
also der quelltext lautet
Delphi-Quellcode:
wenn jetzt songwoche[1].name leer ist geht es! ansonsten wenn es net leer ist, zeigt er die anzahl udn die klammern darum nicht an!
clientsocket1.Socket.SendText('PRIVMSG '+wer+' :Platz 1: '+songwoche[1].name+' ('+inttostr(songwoche[1].anzahl)+')'+#13#10)
|
Re: irc + clientsocket
Hi,
hmm, kann ich mir so gar nicht vorstellen eigentlich... Vielleicht sind in "wer" noch zusätzliche Spaces am Ende? Lass dir doch mal den String komplett zusammenbasteln und dann ausgeben, das sollte helfen. cu |
Re: irc + clientsocket
der bot zeigt: "Platz 1: Led Zeppelin - Whole Lotta Love" obwohl er "Platz 1: Led Zeppelin - Whole Lotta Love (1)" zeigen sollte, wo das vorne leer is zeigt er: "(0)"
|
Re: irc + clientsocket
Hi,
Ich vermute, dass das eher an deiner Datenstruktur oder deren Inhalt liegt, als am Senden. Wie gesagt, schau dir doch im Debugger mal den Inhalt der Variablen an. cu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:36 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