Работаю с TCP и столкнулся с вопросом, который по факту упирается в понимание протокола.
Я беру некоторые данные и отправляю их клиенту, например через блокирующий сокет clientSocket.write(data)
или через Netty client.channel.writeAndFlush(data)
.
Вопрос 1. Предположим метод write
завершился без ошибок. Правильно ли я понимаю, что это означает, что клиент 100% получил данные, потому что клиент выслал подтверждение приема?
Вопрос 2. Если write
свалился по таймауту с исключением, означит ли это что клиент 100% отбросит данные? (не может ли произойти такого, что клиент выслал подтверждение что данные успешно приняты и начнет их обработку, но сервер каким либо образом его не получил? Например ack был выслан уже после происхождения тайм-аута на сервере или даже сеть отвалилась и ack вовсе не пришел серверу)
Нет и нет.
Метод write завершается без ошибок когда данные были успешно скопированы во внутренний буфер драйвера TCP.
Виртуальный выделенный сервер (VDS) становится отличным выбором
В общем у меня есть проект, которые скачивает архив 7zip после проверяет есть ли он и тогда пытается его распаковать с помощью библиотеки rgapache