[C#]IRC connection, error 451

Pagina: 1
Acties:
  • 115 views sinds 30-01-2008
  • Reageer

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Topicstarter
Hmmz, nu weet ik het niet meer :(

Het is inmiddels opgelost, dus je hoeft niet alles door te lezen :)

Ik probeer een connectie te maken met een irc server, in C#. Klinkt makkelijk he? Is geloof ik ook zo :). Ik heb lokaal ff UnrealIRC lopen, om te serveren.

code:
1
2
3
4
irc = new TcpClient (SERVER, PORT);
stream = irc.GetStream ();
reader = new StreamReader (stream);
writer = new StreamWriter (stream);


Gaat nog goed, ik krijg inderdaad een connectie, en de reader werkt. Ik heb ergens anders een threadje lopen die blijft readen, en alles gewoon op de console uitspuugt. Dat gaat ook nog goed :).

Als ik helemaal geen commands verstuur, krijg ik dit :

code:
1
2
3
4
5
6
7
8
:localhost NOTICE AUTH :*** Looking up your hostname...
:localhost NOTICE AUTH :*** Checking ident...
:localhost NOTICE AUTH :*** Checking for open socks server...
:localhost NOTICE AUTH :*** Received identd response
:localhost NOTICE AUTH :*** Found your hostname
:localhost 451 * :You have not registered
:localhost 451 * :You have not registered
:localhost 451 * :You have not registered


Die 451 komt elke 15 secs langs.

Best logisch, eigenlijk, want ik héb ook nog niet geregistreerd. Gaan we even doen.

Uit de rfc:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
3.1 Connection Registration

   The commands described here are used to register a connection with an
   IRC server as a user as well as to correctly disconnect.

   A "PASS" command is not required for a client connection to be
   registered, but it MUST precede the latter of the NICK/USER
   combination (for a user connection) or the SERVICE command (for a
   service connection). The RECOMMENDED order for a client to register
   is as follows:

                           1. Pass message
           2. Nick message                 2. Service message
           3. User message

   Upon success, the client will receive an RPL_WELCOME (for users) or
   RPL_YOURESERVICE (for services) message indicating that the
   connection is now registered and known the to the entire IRC network.
   The reply message MUST contain the full client identifier upon which
   it was registered.

Nou, eerst dus even een pass versturen, dan een nick en een user

code:
1
2
3
execCommand("PASS blaaat");
execCommand("NICK jopie");
execCommand("USER guest 0 * :Erikje B");

execCommand schrijft naar de stream, en flusht. Volgens mij komen de commands wel aan, want dit krijg ik nu:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Starting Reader Thread!
:localhost NOTICE AUTH :*** Looking up your hostname...
:localhost NOTICE AUTH :*** Found your hostname (cached)
:localhost NOTICE AUTH :*** Checking ident...
:localhost NOTICE AUTH :*** Checking for open socks server...
-> PASS blaaat
-> NICK jopie
-> USER guest 0 * :Erikje B
:localhost NOTICE AUTH :*** Received identd response
:localhost 451 * :You have not registered
NOTICE jopie :*** If you are having problems connecting due to ping timeouts, pl
ease type /notice B35EF12A nospoof now.
PING :B35EF12A
:localhost 451 * :You have not registered
:localhost 451 * :You have not registered


Hmmm, nu ben ik dus om de een of andere reden nog steeds niet geregistreerd, en nu snap ik het dus niet meer...

---------------------------------------------------------------------------
^Die lijn is het omslagpunt. Nu snap ik het namelijk weer wel :) In een uiterst hopeloze poging, om te kunnen zeggen dat ik écht álles heb geprobeerd deed ik nog even dit:

code:
1
execCommand(Console.ReadLine());

Om die nospoof in te tikken.

En, tralalalalaaa, het werkt :). Ik vind dat ze dat toch wel even ergens bij mogen zetten. Connecten is toch helemaal niet hetzelfde als registeren toch :S?

En ik hád al een ping thread lopen... Maja, ik ga het nog maar even uitzoeken. :) Ik post dit topic toch maar, voor in de archieven, laat maar lekker wegzakken.

----------------------------------------------------
ANTWOORD:
- Je moet de ping beantwoorden, of "notice {pingid} nospoof" sturen, vóórdat je geregistreerd bent :)


Waarom ben ik daar gisteren en eergisteren niet opgekomen?

[ Voor 3% gewijzigd door eamelink op 31-12-2002 12:11 ]


  • Twilight Burn
  • Registratie: Juni 2000
  • Laatst online: 21-08 22:41
Waarom zou je een aparte thread maken om je PING's te sturen? Ik heb ook een IRC programma in .Net geschreven, en die laat ik gewoon op het moment dat er een "PING" binnen komt, direct een PONG terug sturen, zoals het eigenlijk hoort..

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 26-08 12:42

Janoz

Moderator Devschuur®

!litemod

Het is juist erg makkelijk om in een apparte thread de socket uit te lezen. Ik heb zelf in java een aantal irc client classes geschreven. De thread handelt naast de pings ook alle andere binnenkomende berichten af. Aan de code's kun je de types zien waardoor ik in de thread heel makkelijk alle verschillende types kon scheiden en naar de verantwoordelijke onderdelen sturen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

eamelink schreef op 31 december 2002 @ 12:10:
Waarom ben ik daar gisteren en eergisteren niet opgekomen?
Omdat dat bij de meeste IRCd's niet nodig is. :)
Bij de meeste geeftie pas PING's na het inloggen.

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Topicstarter
Waarom zou je een aparte thread maken om je PING's te sturen? Ik heb ook een IRC programma in .Net geschreven, en die laat ik gewoon op het moment dat er een "PING" binnen komt, direct een PONG terug sturen, zoals het eigenlijk hoort..
Die thread stuurde elke zoveel tijd een ping naar de server. Hij doet verder niets met de pings die van de server afkomen. Ik maak nog even een ping-event die een pong terugstuurt.
Omdat dat bij de meeste IRCd's niet nodig is. :)
Bij de meeste geeftie pas PING's na het inloggen.
Aha, dat verklaart waarom ik het probleem verder nergens kon vinden. Unreal zal wel niet zo supervaak gebruikt worden (en nog minder voor ontwikkelingsdoeleinden).