[SFML 2.3 Network] Ignorowanie niewłaściwych pakietów przez receive
Ostatnio zmodyfikowano 2016-10-25 16:03
ScuroGuardiano Temat założony przez niniejszego użytkownika |
[SFML 2.3 Network] Ignorowanie niewłaściwych pakietów przez receive » 2016-10-24 10:19:31 Witam. Koszę sobie sieciowo za pomocą SFML i przy pisaniu serwera pojawił mi się taki problem: Używam socket selectora do odbierania klientów i pakietów. Do odbierania pakietów używam klasy sf::Packet jednak jak jakiś pakiet nie jest zakodowany przy użyciu tej klasy (np. wpiszę adres wraz z portem w przeglądarce) to cały serwer się zawiesza próbując odebrać pakiet. Jak zrobić ignorowanie pakietów, których nie można odebrać jako sf::Packet? Kod: if( selektor.isReady( Klienty[ i ] ) ) { sf::Packet temp; Klienty[ i ]->receive( temp ); }
|
|
Gibas11 |
» 2016-10-24 20:58:08 Jesteś pewny, że zawiesza się przy odbiorze a nie gdy próbujesz z tym pakietem coś zrobić? |
|
ScuroGuardiano Temat założony przez niniejszego użytkownika |
» 2016-10-25 00:28:14 No jedynie tutaj by mogło, bo zaraz za linijką receive mam cout << "Odebrano pakiet od klienta " << i << endl;
Ona się już nie wyświetla, a program nie rusza dalej dopóki nie zamknę niekompatybilnego klienta (np. przeglądarkę) |
|
1aam2am1 |
» 2016-10-25 15:19:32 Nie odbieraj za pomocą sf::Packet, gdyż on przesyła wielkość danych paczki i dane w odpowiedniej formie i inny klient będzie nie kompatybilny jeżeli użyjesz innego formatu. Jeżeli chcesz aby się nie zawieszało i odrzucać błędne paczki powinieneś odbierać surowe dane i napisać własny parser który będzie sprawdzał poprawność odebranych danych i najwyżej je odrzuał. |
|
ScuroGuardiano Temat założony przez niniejszego użytkownika |
» 2016-10-25 16:03:08 Ehh czyli trochę się nakoduję, dzięki za odpowiedź :D |
|
« 1 » |