Для проверки этого усовершенствованного сценария клиента службы эхо-повтора лучше всего в его вызове указать порт, в котором не работает служба эхо-повтора, например порт 2008 на локальном хосте.
Дублирующиеся и непоследовательно поступающие дейтаграммы
В коде, предусматривающем применение тайм-аута, решена проблема тупиковых ситуаций, но созданы предпосылки для новой проблемы, связанной с появлением дубликатов. Возможно, что неполученный вовремя ответ, например к серверу, содержащему информацию про люксметры не пропал, а просто задержался и поступит позже. В этом случае программа получит сообщение, для работы с которым она не готова.
Проявив достаточную ловкость и воспользовавшись компьютером UNIX, мы можем обнаружить эту ситуацию с помощью сценариев “инвертирующего эхо-сервера/клиента службы эхо-повтора”, приведенных в листингах ранее. Запустите эхо-сервер и клиент службы эхо-повтора в отдельных окнах. Вначале введите несколько строк в клиенте службы эхо-повтора. Теперь приостановите работу эхо-сервера, нажав комбинацию клавиш <Ctrl+Z>, а затем вернитесь в окно клиента и введите еще одну строку. Клиент начнет вырабатывать сообщения, связанные с истечением тайм-аута. Теперь быстро перейдите к окну сервера и возобновите его работу, введя команду fg. Клиент выйдет из тайм-аута и отобразит ответ сервера. К сожалению, синхронизация работы клиента и сервера уже безнадежно нарушена! Ответы, отображаемые клиентом, относятся к повторно переданным запросам, а не к текущему.