Witam,
Próbuję od niedawnego czasu napisać sobie prosty klient IRC jak na razie. Chodzi o odbieranie danych z kanału.
O ile z połączeniem do sieci freenode udało się zrobić, o tyle z ircnet.pl już jest problem. Trzeba bowiem odesłać PONG z odpowiednim kodem.
Problem w tym, ze nie mogę zmusić programu do odebrania tego kodu.
Prosty klient w pythonie działa, odbieram chyba wszystko co wysyła serwer, a w przypadku programu w C# dostaję tylko pierwszą linijkę, a przynajmniej tyle udaje mi się odebrać.
Oparłem to na
System.Net.Sockets.TcpClient().
Udaje się połączyć bo dostaję pierwszą wiadomość "looking up for ...".
I nic poza tym. Dopiero po jakimś czasie tylko informację o rozłączeniu z powodu braku odpowiedniej rejestracji (odesłaniu tego PONGa). W pythonie udało mi się to ogarnąć dość szybko, a w C# stoję i nie mogę dojść do czego.
Odbieranie robię w osobnym wątku, w pętli.
W przypadku freenode było w tej pętli coś takiego (uproszczone):
clientSocket.GetStream().Read(myReadBuffer, 0, myReadBuffer.Length);
Potem obrabiam to przez
Encoding.ASCII.GetString[...].
Zacząłem próby z odczytywaniem niemalże bajt po bajcie i na tej jednej linijce nadal się kończyło. Chciałem dłużej poczekać i Stringa tworzyć dopiero później, też nic. Podobnie próby rozpisania tego na BeginReceive. Nawet wrzucenie Timeout = 1 niewiele daje.
Może mógłby mi ktoś podpowiedzieć jak odebrać tych kilka wiadomości wysyłanych niemalże pod rząd. Bo z pojedynczymi wysyłanymi w większym odstępie czasowym to nie ma problemu.
Z góry dzięki i pozdrawiam!
Adaśko.