Przesyłanie string'ów w WinSock..
Ostatnio zmodyfikowano 2009-07-16 18:59
jimmye Temat założony przez niniejszego użytkownika |
Przesyłanie string'ów w WinSock.. » 2009-07-15 18:50:30 Otóż mam taki głupi problem ze stringami które przesyłam z klienta do serwera.. Dokładniej chodzi o system logowania w grze MMORPG, dane przesyłane/odbierane są strukturami, struktura zapytania o logowanie wygląda tak: struct LoginRequest { byte packetID byte actionID char * konto; char * haslo; }; Klient pobiera i wysyła dane konta prawidłowo, ale problem jest w serwerze, bo po odebraniu struktury dane konta są albo puste albo są jakieś dziwne litery. Przesyłam je jako tablice char, ponieważ łatwiej jest mi potem nimi operować na serwerze, tzn nie musze konwertować ich, żeby sprawdzić poprawność w bazie danych. Próbowałem przesyłać je też jako string'i ale jest taki sam efekt :/ Cały problem tkwi w odbieraniu danych chyba.. Nie mam napewno problemów ze strukturami bo: 1. Serwer/Klient już odbiera/wysyła dane strukturami bez problemu 2. Zrobiłem juz procedurę łączenia(zapytanie i odpowiedź) i wszystko działa, tyle, że tam nie używałem stringów do przesyłania danych do tej pory.. |
|
DejaVu |
» 2009-07-15 18:55:50 Nie czytając to napisałeś i widząc tą strukturę mogę powiedzieć Ci w czym jest problem: wysyłasz wskaźnik przez sieć, a nie łańcuch tekstowy. Jeśli chcesz wysłać tekst - musisz mieć pole: char blelble[ 100 ]; Drugą metodą jest ręczne kodowanie informacji - np. długość stringa, dane i w ten sam sposób później odczytywać. |
|
jimmye Temat założony przez niniejszego użytkownika |
» 2009-07-15 19:01:26 Czyli będę musiał przesyłać je jako stringi, bo tablic char o stałej długości nie mogę umieścić w strukturze :( Zostaje mi konwertowanie stringów do char na serwerze :P Po tym jak odbiore musze je włożyć w środek zapytania: SELECT * FROM ACCOUNTS WHERE account = 'konto' AND password = 'haslo'; Do tego używam strcpy/strcat więc muszą być konwertowane do tablicy char potem. |
|
DejaVu |
» 2009-07-15 19:06:10 stringi to obiekty, które zawierają wskaźniki, więc też będzie kwas. |
|
jimmye Temat założony przez niniejszego użytkownika |
» 2009-07-15 19:10:05 Spróbuje użyć tablic char o stałej wielkości. |
|
WinerFresh |
» 2009-07-15 23:25:55 Poszukaj informacji na temat serializacji w C++ ( Boost.Serialize i s11n ). |
|
jimmye Temat założony przez niniejszego użytkownika |
» 2009-07-16 18:59:41 Już jest ok. ------------------- #define MAX_ACC_LEN 32 #define MAX_PASS_LEN 12
struct Login { byte packetID; byte actionID; char account[ MAX_ACC_LEN ]; char password[ MAX_PASS_LEN ]; };
|
|
« 1 » |