Problem z czytaniem StreamReader

0

Witam! Przepisując 4. raz mój prosty komunikator, natknąłem się na taką rzecz przy testowaniu. Metoda Receive klasy Client nie zwraca jakby nic bo ani if ani else się nie spełnia. Wcześniej robiłem podobne jak nie identyczne rozwiązanie i działało. Moglibyście przeanalizować kod i powiedzieć co jest do cholery nie tak??

                // to tutaj mam w wątku (pętlę i takie tam):
                Client client = new Client(listener.AcceptTcpClient());
                Log("New pending connection from: " + client.Address); // tu ok, wyświetla się o połączeniu
                if (client.Receive() == Client.LoginRequest) // o tu..
                {
                    clients.Add(client);
                    Log("Client login succeed");
                }
                else
                {
                    client.Close();
                    Log("Client rejected");
                }

                // to sobie robię na od razu serwerze, bo nie zdążyłem zaimplementować tego w kliencie:
                System.Net.Sockets.TcpClient c = new System.Net.Sockets.TcpClient("127.0.0.1", 1024);
                System.IO.StreamWriter w = new System.IO.StreamWriter(c.GetStream());
                w.WriteLine(Client.LoginRequest); // tu wysyłam prośbę i ch** ;/

                // metoda Receive klasy Client:
                public string Receive()
                {
                    return reader.ReadLine();
                }

Pomożetie?

0

I macie jakieś pomysły? Już się męczę z tym huk wie ile.. Pewnie albo jakiś głupi błąd, którego nie widzę (!) albo StreamWriter lub Reader się popsuł :D

Z breakpointa wynika, że program się stopuje na if'ie. Są jakieś inne pomysły co ten program odpier*** w tym czasie?

Jeszcze mam jedną rzecz. Spróbowałem wysyłać request'a w pętli i pomogło, jeżeli wykonają się 51 razy w.WriteLine(...) to wtedy serwer odbiera wiadomość ale też te 50 następnych.. no kurde wtf?

0

Pomóóóż ktoś!! :) Ja nie mogę nic wymyśleć...
Kurde jak dam Binary a nie Stream Reader to działa elegancko. yhh, tylko, że jak pamiętam Binary Reader dodaje jakieś krzaczki... Jak zrobić to ze Stream a nie Binary??

0

Z debuggera korzystać potrafisz? Program nie zatrzymuje się na if, bo to nie jest instrukcja blokująca. Prawdopodobnie na ReadLine - ale sprawdź. Zamień ją na zwykłe Read, być może w buforze znajduje się coś niezakończone znakiem nowej linii. Read/WriteString w BinaryReader/Writer tym się różni od TextReader/Writer, że napis przesyła wysyłając najpierw jego długość, a ten drugi szukając znaku nowej linii.

0

Ok, dzięki za wyjaśnienie, spróbuję z samym Readem - jeszcze tak nie próbowałem. Tak w sumie to zatrzymuje się na if bo to co w warunku należy do if'a :P Ale wiadomo o co chodzi ;)

1

step in w debuggerze nadal działa, prawda?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0