Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przesyłanie string'ów w WinSock..

Ostatnio zmodyfikowano 2009-07-16 18:59
Autor Wiadomość
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:

C/C++
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..
P-8546
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ć.
P-8547
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.
P-8548
DejaVu
» 2009-07-15 19:06:10
stringi to obiekty, które zawierają wskaźniki, więc też będzie kwas.
P-8549
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.
P-8550
WinerFresh
» 2009-07-15 23:25:55
Poszukaj informacji na temat serializacji w C++ ( Boost.Serialize i s11n ).
P-8555
jimmye
Temat założony przez niniejszego użytkownika
» 2009-07-16 18:59:41
Już jest ok.
-------------------
C/C++
#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 ];
};
P-8558
« 1 »
  Strona 1 z 1