Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi irc + clientsocket (https://www.delphipraxis.net/69512-irc-clientsocket.html)

mr.unbekannt 16. Mai 2006 11:43


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!

sECuRE 16. Mai 2006 12:00

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 http://www.faqs.org/rfcs/rfc1459.html

mr.unbekannt 16. Mai 2006 12:03

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!

sECuRE 16. Mai 2006 12:07

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

mr.unbekannt 16. Mai 2006 12:10

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>');

sECuRE 16. Mai 2006 12:16

Re: irc + clientsocket
 
Hi,

Zitat:

Zitat von mr.unbekannt
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>');

Der Ansatz ist schon richtig... Allerdings dienten die <> nur dazu, auszudrücken, dass hier etwas zu ersetzendes steht. Außerdem schließt man (nicht nur im IRC) Zeilen mit #13#10 (CRLF) ab. Quelltext:
Delphi-Quellcode:
ClientSocket1.Socket.SendText('USER top10 addy irc.knuddelknutscher.biz :Echter Name'+#13#10);
ClientSocket1.Socket.SendText('NICK top10'+#13#10);
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...

cu

mr.unbekannt 16. Mai 2006 12:19

Re: irc + clientsocket
 
und noch ne frage:
ich habe:
Delphi-Quellcode:
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;
und bekomme keien daten ins memofeld außer das was das programm ausgibt, also
Delphi-Quellcode:
memo1.Lines.Add('connect');
wieso?

mr.unbekannt 16. Mai 2006 12:22

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?

mr.unbekannt 16. Mai 2006 12:29

Re: irc + clientsocket
 
wieder mal ich!

habe das mit ping udn pong probiert.
Delphi-Quellcode:
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;
der sendet aber kein pong!

sECuRE 16. Mai 2006 12:44

Re: irc + clientsocket
 
Hi,

Zitat:

Zitat von mr.unbekannt
wieder mal ich!

habe das mit ping udn pong probiert.
Delphi-Quellcode:
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;
der sendet aber kein pong!

Bist du sicher, dass er das nicht sendet? Du bekommst vom Server darauf keine Antwort, sondern er "lässt dich dann rein".

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:
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;
cu


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:24 Uhr.
Seite 1 von 2  1 2      

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