Boost Asio - async_read_until - Połączenie przerwane przez system lokalny

Boost Asio - async_read_until - Połączenie przerwane przez system lokalny
J8
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:37
0

Witam,
mam kolejny problem z boost asio ;/ . Ale teraz z async_read_until . Chodzi o to , że gdy dostane dane od clienta to zawsze wywala mi errora "Połączenie przerwane przez system lokalny ". Nie wiem dlaczego .

edytowany 1x, ostatnio: JMII89
J8
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:37
0

Mimo tego , że w bufferze są dane to zawsze bytes_transferred ma wartość 0 ...

satirev
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 4 lata
0

Jak możesz to wrzuć całą klasę sesji.

J8
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:37
0

Tutaj kod :

edytowany 4x, ostatnio: JMII89
satirev
Implementację pokaż ; p
J8
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:37
0

;/

edytowany 2x, ostatnio: JMII89
satirev
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 4 lata
0

Masz sporo błędów w kodzie ale główna przyczyna, dla której dostajesz error code 1236 to to, że wołasz async_read_until bez zainicjowania end bajtu. Przez co później dostajesz timeout na timerze i woła się callback, który zamyka połączenie. Wtedy też woła się async_read_until z error codem 1236.
Poza tym masz UB w konstruktorze klasy TSession inicjujesz timer io_service pobranym z sock_ptr, który jeszcze nie został zainicjowany. Przypominam, że kolejność inicjalizacji na liście inicjalizacyjnej konstruktora zależy od kolejności deklaracji pól w klasie. W tym przypadku zadeklarowałeś sock_ptr przed timerem. Dalej... w kodzie masz pełno literówek/czasami brakuje &/const itd.

J8
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:37
0

W klasie brakuje const i & dlatego , że wtedy pisałem to z pamięci XD .
To jest poprawna klasa :

Chodzi o to , że przy odbieraniu pakietu EndByte ma w sobie jakąś wartość.

user image

edytowany 1x, ostatnio: JMII89
satirev
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 4 lata
0
satirev napisał(a):

Masz sporo błędów w kodzie ale główna przyczyna, dla której dostajesz error code 1236 to to, że wołasz async_read_until bez zainicjowania end bajtu

J8
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:37
0

Dobra koleś powiedział mi jaką wartością zainicjalizować EndByte . 0x0E . Ale po dostarczeniu 3 pakietu czyli hasła po aktualizacji już EndByte'u i Session Keya dostaje kolejny error... "Dostarczone dojście do pliku jest nieprawidłowe".

J8
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 9 lat
  • Postów:37
0

Naprawione.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.