swd1978 0 18 августа, 2016 Опубликовано 18 августа, 2016 · Жалоба Доброго всем дня. Есть 2 программы (сервер на Дельфи, клиент на Турбо-Паскале в промышленном контроллере), обменивающиеся файлами по протоколу XModem. В качестве транспорта используется UDP. Во время передачи иногда происходит вот что. Клиент отправляет пакет с номером N (значение номера сейчас не важно). Сервер принимает пакет с номером N и отправляет ответ: пакет принят. При этом XModem в ответе не указывает номер пакета, а просто отправляет флаг: принят / не принят. Клиент отправляет пакет с номером N+1. ПАКЕТ ПО ПУТИ ТЕРЯЕТСЯ и, т.к. UDP не гарантирует доставку, клиент и сервер о потере не знают. Сервер ждет поступления данных 10 секунд, как предписывает ему XModem. Не дождавшись, он считает, что ответ не дошел до клиента и, опять же по правилам XModem, повторно отправляет ответ: пакет принят. Клиент принимает ответ, но считает, что он пришел к пакету N+1. После чего отправляет пакет N+2. Сервер принимает пакет N+2 и определяет, что пришел пакет не с тем номером (он-то ждет N+1). И отправляет ответ: ошибка. Клиент принимает ответ и по правилам XModem повторно отправляет пакет N+2. Сервер принимает пакет, опять обнаруживает несовпадение номеров и опять говорит: ошибка. Так повторяется 10 раз, после чего связь прерывается из-за превышения количества попыток передачи. Файл не передан. Вопрос: можно ли побороть это явление, не прибегая к программированию протоколов, гарантирующих доставку (TCP-FTP)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться