[SFML] Odbieranie paru pakietów.
Ostatnio zmodyfikowano 2013-08-19 00:01
Nevea Temat założony przez niniejszego użytkownika |
[SFML] Odbieranie paru pakietów. » 2013-08-18 23:06:52 Załóżmy że mamy taką sytuację: Są dwa klienty podłączone do serwera. Jeden klient wysyła serwerowi pakiet z informacjami do logowania (string z loginem i string z hasłem) a drugi z np. informacjami do rejestracji (stringi z loginem, hasłem, mailem, nickiem). I teraz moje pytanie brzmi: skoro serwer dostaje pakiet i jeszcze nie wie co jest w środku to skąd ma wiedzieć jaką funkcję ma wywołać (sprawdzenie logowanie itd.). W formie kodu wyglądało by to mniej więcej tak: Klient pierwszy: (takie trochę pseudo-kody) ... std::string login =...logn.getText(); std::string password =...passwrd.getText(); sf::Packet login_data; login_data << login << password; socket.send( login_data ); ...
Klient drugi: ... std::string login =...logn.getText(); std::string password =...passwrd.getText(); std::string nickname =...nckname.getText(); std::string email =...eail.getText(); sf::Packet register_data; register_data << login << password << nickname << email; socket.send( register.data ); ...
Serwer: ... sf::Packet login_data; sf::Packet register_data; if( client.receive( login_data ) ) { check_login( login_data ); } if( client.receive( register_data ) ) { register_new_user( register_data ); } ...
Nie wiem może jeszcze nie do końca rozumiem połączeń sieciowych ;/ A może wpływ na to ma kolejność wysyłania i odbierania pakietów? Albo inaczej zadam pytanie: jak serwer ma identyfikować "rodzaj" pakietów? |
|
ison |
» 2013-08-19 00:01:46 Możesz sobie przykładowo przeznaczyć ileś pierwszych bajtów pakietu na nagłówek, w którym zapiszesz informację jakiego typu jest to pakiet. #define LOG_IN_PACKET ('l') #define REGISTER_PACKET ('r')
data << LOG_IN_PACKET << login << password;
|
|
« 1 » |