Цитата:
Сообщение от st01en
У меня проскакивала идея, что несколько пакетов подряд склеиваются в один
|
собсно так и есть, причём ты ловиш TCP пакет, и в нем может быть как целое число пакетов линейки так и не целое, тоесть игровой пакет может начинаться в одном TCP пакете а заканчиваться в другом
вобщем логика твоих действий должна быть примерно такой:
при поступлении пакета ты добавляеш его в буфер, а затем начинаеш из буфера вытаскивать игровые пакеты читая первые два байта в которых указана длинна пакета, а затем оставшиеся байты согласно размеру который тока что узнал (за вычетом уже прочитанных 2х байт), далее удаляеш из буфера прочитанный пакет, обрабатываеш его и если в буфере ещё есть данные опять читаеш два байта в которых указан размер следующего пакета и если в буфере есть ещё стока байт то опять читаеш оставшиеся, а если в буфере осталось меньше данных чем указано, значит остаток пакета ещё не пришёл поэтому надо ждать нового TCP пакета чтоб добавить его данные в конец буфера ну а дальше всё по старому)
Добавлено спустя 1 минуту 25 секунд:
кстати некоторые сниферы могут один и тот же TCP пакет выдавать дважды подряд иногда, при этом естественно тоже всё собьётся так что если будет наблюдаться такое явление то придётся ещё фильтр повторов сделать...