Bardzo dziwne działanie (BinaryReader + Writer + własna klasa)

2011-09-14 15:35
0

Witam. Do mojego komunikatorsa napisałem klasę zarządzającą kontami użyszkodników. Robię sobię testy i na sztywno
writer.Write("admin"); writer.Write("test123"); działa - na serwerze metoda sprawdzająca czy passy są dobre zwraca true. To już dałem potem obsługę kont do klienta, która pobiera z pliku login i hasło, wysyłam sobie tak samo:
writer.Write(client.Login); writer.Write(client.Password); moim oczom ukazuje się własny log: Client rejected. WTF? Patrzę w debuggerze - wszystko ok, zmienne tak jak być powinne, login = "admin", password = "test123" - dupsko, wysyła, ale metoda sprawdzająca na serwie zwraca false, pomimo, że stringi identyczne jak być powinny. Sprawdziłem czy czegoś innego nie sknociłem i dałem jeszcze raz na sztywno - działa. O co tu może chodzić? Z pliku czytam StreamReader'em.


Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał
edytowany 1x, ostatnio: xeo545x39, 2011-09-14 15:35

Pozostało 580 znaków

2011-09-14 16:14
Rev
0

To sprawdź debuggerem na serwerze czy jest wszystko w porządku wysyłając dane z klienta.


Pozostało 580 znaków

2011-09-14 16:56
0

Właśnie sprawdzę, bo na razie mam klient na serwerze, bo jeszcze nie robiłem oddzielnego klienta. Zaraz zobaczymy czy będzie tak samo..

UPDATE
No zaraz ochujeje xD

user image
Nie znam się dogłębnie na działaniu Write'a ani Receive'a, ale czym ten string może się różnić od tego co wpiszę na sztywno oprócz tego, że się niczym nie różni? :D
Tzn. Ten Receive jest mój, ale w nim nie ma nic innego jak BinaryWriter.ReadString(), gdzie strumień to strumień TcpClient'a. A Write'a też używam Binary'ego.


Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał
edytowany 3x, ostatnio: xeo545x39, 2011-09-14 17:05

Pozostało 580 znaków

2011-09-14 18:16
0

jak porównujesz stringi w metodzie check? za pomocą equals(...)?


"Wszystko co może być wynalezione, zostało wynalezione"
Charless H. Duell - komisarz urzędu patentowego U.S., 1899

Pozostało 580 znaków

2011-09-14 18:28
0

Niet, za pomocą ==, a jest jakaś różnica?


Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał

Pozostało 580 znaków

2011-09-14 18:31
0

Nie znam się, ale czy w Javie stringi nie są obiektami?
Może to robi jakąś różnicę, że trzeba używać .equals...


To nie jest Java :| - Demonical Monk 2011-09-14 18:39

Pozostało 580 znaków

2011-09-14 18:40
0

Tak jak Demonical + w C# string'i też są jakby obiektami czyż nie?


Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał

Pozostało 580 znaków

2011-09-14 18:45
0
xeo545x39 napisał(a)

Tak jak Demonical + w C# string'i też są jakby obiektami czyż nie?

Są (prawie normalnymi) obiektami, ale Twórcy C# w przeciwieństwie do twórców Javy wiedzą, że jeśli ktoś pisze intuicyjne "abc" == "abc", to chce porównać zawartość, a nie położenie w pamięci.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
edytowany 1x, ostatnio: somekind, 2011-09-14 18:48
Pokaż pozostałe 6 komentarzy
"co można zmienić" - a więc operator == jest dla stringa przeciążony i taki sam sposób można go przeciążyć dla dowolnej innej klasy? Jeśli tak to OK. Chodziło mi o to, że z twojej wypowiedzi wynikało, że string jest jakoś specjalnie traktowany w C#. - Wibowit 2011-09-15 23:22
Tak, operator przeciążasz jak chcesz, a jak tego nie zrobisz, to porównuje referencje. W Scali jest inaczej? - somekind 2011-09-15 23:39
Z mojego kilkulinijkowego testu wynika że jest podobnie jak w C#. Nie zmienia to jednak faktu, że twój post sugeruje, że string w C# jest traktowany specjalnie. Gdyby w Javie było przeciążanie operatorów (jak w C#) albo brak operatorów na rzecz metod i notacji infiksowej (jak w Scali) to jest praktycznie pewne, że zrobiliby porównywanie zawartości stringów za pomocą przeciążonego ==. - Wibowit 2011-09-15 23:48
Po prostu w C# można przeciążać operatory i jego twórcy zrobili to dla stringa. :P Specjalne traktowanie polega na tym, że jest klasą immutable i tyle. - somekind 2011-09-15 23:51
Z drugiej strony Java ma String.intern(): "It follows that for any two strings s and t, s.intern() == t.intern() is true if and only if s.equals(t) is true.", a więc używając intern() można porównywać Stringi w Javie poprzez == :P Immutable to nie specjalne traktowanie, a tylko wymóg nieposiadania metod zmieniających stan czy też w ogóle mutowalnego stanu przez obiekt. Dowolna klasa może być niemutowalna, jeśli tak ją zaprojektujemy. - Wibowit 2011-09-16 00:00

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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