Это, вероятно, протокол, который начал жизнь при использовании с последовательными портами.Которые не имеют гарантии доставки и проверки ошибок, встроенной в TCP.Если «пакет», который вы должны отправить, имеет что-то вроде CRC или контрольной суммы, то для такого протокола это мертвый сигнал.
Добавление такого вида проверки не является обязательным для TCP.Это, вероятно, будет работать нормально, когда вы просто создаете файл и не обращаете внимания на ACK.Хотя вы должны прочитать их, чтобы предотвратить заполнение буфера.Вторичный способ - просто ждать, пока что-то будет отправлено обратно с этого сервера, прежде чем отправлять следующий кусок байтов.
Если вы все равно хотите проверить ACK, тогда ищите один байт сзначение 6, код управления ASCII по умолчанию для ACK.Я бы не реализовал функцию «переслать при истечении времени ожидания», если бы протокол не реализовал «номер блока», который помогает обнаруживать дубликаты блоков, которые, скорее всего, потерпят неудачу на принимающей стороне с удвоением данных.Просто отправьте следующий кусок.