Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Необходимо всегда учитывать все различия между порядком байтов, используемым для хранения целых чисел архитектурой узла и порядком байтов, используемых в проводной сети отдельными протоколами транспорта. Любая ссылка на адрес или номер порта, переданный в или из подпрограммы сокетов Windows, должна находиться в сетевом порядке (big-endian) для используемого протокола. В случае с IP-адресом это включает в себя IP-адрес и параметры порта структуры sockaddr (но не параметр sin_family).
Некоторые системы UNIX функционируют на CPU, представляющих целые числа в сетевом порядке байтов (big-endian). Поэтому необходимость преобразования целых чисел из порядка байтов узла в сетевой байтовый порядок может быть проигнорирована без возникновения проблем, даже если это не рекомендуется для переносимости.
В отличие от этого, порядок байтов, используемый для представления целых чисел большинством процессоров Intel®, называется little-endian. Поэтому необходимо преобразовать целые числа из байтов узла в сетевой порядок байтов перед использованием в функциях и структурах Winsock Sockets.
Рассмотрим приложение, которое обычно связывается с сервером на TCP-порту, соответствующим службе времени, но предоставляет механизм для пользователя, чтобы указать альтернативный порт. Номер порта, возвращаемый getservbyname уже находится в сетевом порядке, который является форматом, необходимым для создания адреса, чтобы не требуется перевод. Однако если пользователь выбирает использовать другой порт, введенный в качестве целочисленного числа, приложение должно преобразовать это из узла в порядок сети TCP/IP (используя htons или WSAHtons функцию), прежде чем использовать его для создания адреса. И наоборот, если приложение должно было отобразить номер порта в адресе (возвращаемый функцией getpeername, например), номер порта должен быть преобразован из сетевого порядка в порядок хоста с использованием функции ntohs или функции WSANtohs перед его отображением.
Поскольку порядки байтов Intel и Интернета отличаются, преобразования, описанные в предыдущем, являются неизбежными. Авторы приложений предупреждаются о том, что им следует использовать стандартные функции преобразования, предоставляемые в рамках Winsock, а не писать собственный код преобразования, поскольку будущие реализации Winsock, вероятно, будут работать на системах, для которых порядок байтов хоста идентичен сетевому байтовому порядку. Скорее всего, межплатформенными являются только приложения, использующие стандартные функции преобразования порядка байтов между хостом и сетью.
Связанные разделы