Отправка ACK в сокет C # - PullRequest
       5

Отправка ACK в сокет C #

6 голосов
/ 06 апреля 2011

Мне нужно отправить файлы на сервер через Socket. Сервер будет отправлять ACK за каждое отправленное мной сообщение. Если я не получил ACK в течение 30 секунд, мне придется отправить запрос еще раз.

У меня вопрос, как отправить / получить ACK? Есть ли внутренний ACK или сервер должен отправлять ACK в байтах? Насколько я понимаю, сервер здесь не будет отправлять ACK как сообщение. Поэтому я хочу знать, как справиться с этой частью ACK.

Заранее спасибо.

1 Ответ

3 голосов
/ 06 апреля 2011

Это, вероятно, протокол, который начал жизнь при использовании с последовательными портами.Которые не имеют гарантии доставки и проверки ошибок, встроенной в TCP.Если «пакет», который вы должны отправить, имеет что-то вроде CRC или контрольной суммы, то для такого протокола это мертвый сигнал.

Добавление такого вида проверки не является обязательным для TCP.Это, вероятно, будет работать нормально, когда вы просто создаете файл и не обращаете внимания на ACK.Хотя вы должны прочитать их, чтобы предотвратить заполнение буфера.Вторичный способ - просто ждать, пока что-то будет отправлено обратно с этого сервера, прежде чем отправлять следующий кусок байтов.

Если вы все равно хотите проверить ACK, тогда ищите один байт сзначение 6, код управления ASCII по умолчанию для ACK.Я бы не реализовал функцию «переслать при истечении времени ожидания», если бы протокол не реализовал «номер блока», который помогает обнаруживать дубликаты блоков, которые, скорее всего, потерпят неудачу на принимающей стороне с удвоением данных.Просто отправьте следующий кусок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...