Warum ist die Verbindung instabil (PingTimeout) ?

Alle Fragen zur Netzwerkkommunikation
Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Warum ist die Verbindung instabil (PingTimeout) ?

Beitrag von Nils »

Hi,

ich möchte eine Verbindung zu einem IRC-Server via Sockets herstellen. Nachdem etwas Zeit vergangen ist, bekomme ich den PingTimeout, aber habe nie zuvor ein PING bekommen (deshalb sendet mein Programm auch nie ein PONG). Warum ?
Host: irc.euirc.net
Port: 6667
User-ID: controller

Client ist TClientSocket.

Verbindung herstellen:

Code: Alles auswählen

with Client do
begin
  Host := eHost.Text;
  Port := StrToInt(ePort.Text);
  Open;
end;
ClientConnect:

Code: Alles auswählen

procedure TfrmMain.ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  with Client.Socket do
  begin
    SendText('NICK testnick');
    SendText('USER ' + eiD.Text + ' "" "'+ eHost.Text +'" :1337');
  end;
end;
Um die Fehlermeldung "ERROR :Closing Link: [...] (Ping timeout)" zu erhalten und eigentlich abzufangen (klappt nicht) noch diese Zeilen in OnRead:

Code: Alles auswählen

procedure TfrmMain.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var s : String;
begin
  s := Socket.ReceiveText;
 
  m.Lines.Add(s);
 
  if Pos('PING', s) > -1 then
  begin
    s := 'PONG' + StringReplace(s, 'PING', '', [rfReplaceAll]);
    Socket.SendText(s);
  end;
end;

Benutzeravatar
theo
Beiträge: 10874
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Wie wär's mit lesen:
http://board.euirc.net/ftopic1164.html" onclick="window.open(this.href);return false;

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Beitrag von Nils »

Eine IRC Verbindung muss registriert werden bevor man irgendwelche weiteren
Commands ausführen kann. Das läuft über NICK und USER ab.

Ich sende erst USER, danach NICK.
Wenn beideskorrekt empfangen wurde kann man auch weitere CMDs senden.
Wird meins etwa nicht korrekt empfangen ? Wenn ja: warum ?
Du wirst vermutlich entweder ein "PING" senden oder einen NOTICE (aufgrund der nospoof Meldung) senden bevor du "USER" gesendet hast.
Die Nospoof-Meldung habe ich nicht, also sehr unwahrscheinlich.

Benutzeravatar
theo
Beiträge: 10874
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Ich kenne TClientSocket nicht, benutze immer Synapse http://synapse.ararat.cz" onclick="window.open(this.href);return false; .
Tut SendText denn automatisch CRLF anhängen?

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Beitrag von Nils »

TClientSocket ist auch nicht wirklich vorhanden für Lazarus. Bin gerade unter Windows und kann mich einfach nciht von Delphi7 trennen. Da gibt es eben die Borland SocketComponents. Sind eigentlich auch recht brauchbar.

Es wird kein CLRF angehängt. Einfach #13#10 an jede Nachricht dranklatschen, z.B. so: SendText('USER ' + eiD.Text + ' "" "'+ eHost.Text +'" :1337' + #13#10) ?
Edit: bringt nichts.
Zuletzt geändert von Nils am Di 3. Jul 2007, 16:29, insgesamt 1-mal geändert.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Haarsträubend, wie implementierst du denn sonst Sachen ohne zu wissen wie sie funktionieren ??
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Beitrag von Nils »

War mir nur nicht mehr sicher.... Habe einfach überall Zeilenumbrüche reingesetzt, allerdings ist es wirkungslos.
Meine Musik: spiker-music.net

Benutzeravatar
theo
Beiträge: 10874
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Nils hat geschrieben:TClientSocket ist auch nicht wirklich vorhanden für Lazarus. Bin gerade unter Windows und kann mich einfach nciht von Delphi7 trennen. Da gibt es eben die Borland SocketComponents. Sind eigentlich auch recht brauchbar.
Dann frag doch in nem Delphi Forum.

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Beitrag von Nils »

Das hat doch mit Delphi nichts zu tun. Würde ich das mit Lazarus machen, dann würde der gleiche Fehler auftreten.
Meine Musik: spiker-music.net

Benutzeravatar
theo
Beiträge: 10874
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Nils hat geschrieben:Das hat doch mit Delphi nichts zu tun.
Stimmt, aber mit Lazarus hat es noch weniger zu tun. Du verwendest ja nicht mal Komponenten die's in Laz gibt.

Das ist doch eine Frage des Protokolls. Frag doch die Jungs da: http://board.euirc.net/" onclick="window.open(this.href);return false;

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Ne, theo das is Quatsch.

Frag die http://tools.ietf.org/html/rfc1459
Da steht super detailiert drin was du wie machen musst und du kannst sicher sein das die Server sich dran halten. Wo ist also das Problem ? Lesen kannst du doch anscheinend.

Edit: Verzeiht mir ich bin jetzt wieder der böse unfreundliche weil ich mir das nicht für ihn durchgelesen hab und ihm hier erklärt.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10874
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Christian hat geschrieben:Ne, theo das is Quatsch.
Frag die http://tools.ietf.org/html/rfc1459
Joh, RFC ist immer gut. Kann aber schon mal Kopfschmerzen verursachen ;-)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Stimmt einfach das Problem auf anderen abladen is immer einfach als selber lesen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Beitrag von Nils »

Ich habe mir den USER-Teil genauer angeschaut und mir ist das "guest" aufgefallen. Kann es sein, dass man sich besser als guest einloggen sollte ?
Meine Musik: spiker-music.net

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Villeicht hast du ja schon rausgelesen villeicht auch nicht, es hat sich hier noch niemand näher mit dem IRC Protokoll beschäftigt.
Also schau in die entsprechendenden Dokus oder wenn du das nicht hin bekommst nimmt eine fertige IRC Komponenten/Klasse.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten