Еще одной проблемой, с которой можно столкнуться во время работы по протоколу UDP, являются дейтаграммы, поступающие непоследовательно. В этой ситуации дейтаграммы поступают не в том порядке, в каком они были отправлены. Общепринятый способ решения обеих проблем состоит в присвоении порядкового номера каждому исходящему сообщению и в проектировании протокола взаимодействия клиента и сервера таким образом, чтобы сервер возвращал в своем ответе тот же порядковый номер. В настоящем разделе представлен улучшенный клиент службы эхо-повтора, в котором реализована эта схема. В этом сценарии показано, как использовать функцию select () с сокетами UDP для реализации тайм-аутов и предотвращения тупиковых ситуаций.
Для реализации схемы порядковой нумерации и в клиенте, и в сервере должен применяться согласованный формат сообщений. В описанном ниже сценарии используется простая схема. Каждый запрос, отправляемый клиентом серверу, состоит из порядкового Номера, за которым следует символ “:”, пробел и тело сообщения произвольной длины. Порядковые номера начинаются с 0 и последовательно возрастают. Например, следующее сообщение имеет порядковый номер 42 и тело “the meaning of life”.
42: the meaning of life
Инвертирующий эхо-сервер вырабатывает ответ, в котором соблюдается этот Фюрмат. Сервер должен прислать на запрос, приведенный выше, следующий ответ.