Problem z czytaniem StreamReader

Odpowiedz Nowy wątek
2011-09-02 17:37
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?


<error>There was an error during loading user signature. Please try to reboot the Universe and check again.</error>
edytowany 1x, ostatnio: xeo545x39, 2011-09-02 17:44

Pozostało 580 znaków

2011-09-03 18:16
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?


<error>There was an error during loading user signature. Please try to reboot the Universe and check again.</error>
edytowany 3x, ostatnio: xeo545x39, 2011-09-03 18:37

Pozostało 580 znaków

2011-09-05 19:26
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??


<error>There was an error during loading user signature. Please try to reboot the Universe and check again.</error>
edytowany 1x, ostatnio: xeo545x39, 2011-09-05 19:35

Pozostało 580 znaków

2011-09-05 19:50
Rev
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.


Pozostało 580 znaków

2011-09-06 21:19
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 ;)


<error>There was an error during loading user signature. Please try to reboot the Universe and check again.</error>

Pozostało 580 znaków

2011-09-06 21:48
Rev
1

step in w debuggerze nadal działa, prawda?


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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