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

[SFML] Odbieranie paru pakietów.

Ostatnio zmodyfikowano 2013-08-19 00:01
Autor Wiadomość
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)
C/C++
...
std::string login =...logn.getText();
std::string password =...passwrd.getText();
sf::Packet login_data;
login_data << login << password;
socket.send( login_data );
...

Klient drugi:
C/C++
...
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:
C/C++
...
sf::Packet login_data;
sf::Packet register_data;
if( client.receive( login_data ) ) // tutaj może przyjść pakiet z danymi do rejestracji
{
    check_login( login_data );
}
if( client.receive( register_data ) ) // tutaj może przyjść pakiet z danymi do logowania
{
    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?
P-90502
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.
C/C++
#define LOG_IN_PACKET ('l')
#define REGISTER_PACKET ('r')

data << LOG_IN_PACKET << login << password;
P-90503
« 1 »
  Strona 1 z 1