Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
практична робота 9.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
188.42 Кб
Скачать

Мережний порядок байт. Функції htons(), htonl(), ntohs(), ntohl()

Передача від одного обчислювального комплексу до іншого символьної інформації, як правило (коли один символ займає один байт), не викликає проблем. Проте для числової інформації ситуація ускладнюється.

Мал. 15-16.6.  Схема взаємодії клієнта і серверу для протоколу UDP

Як відомо, порядок байт в цілих числах, представлення яких займає більше одного байта, може бути для різних комп'ютерів неоднаковим. Є обчислювальні системи, в яких старший байт числа має меншу адресу, ніж молодший байт (big-endian byte order), а є обчислювальні системи, в яких старший байт числа має більшу адресу, ніж молодший байт (little-endian byte order). При передачі цілої числової інформації від машини, що має один порядок байт, до машини з іншим порядком байт ми можемо неправильно тлумачити прийняту інформацію. Для того, щоб цього не відбулося, було введено поняття мережного порядку байт, тобто порядку байт, в якому повинна представлятися ціла числова інформація в процесі передачі її по мережі (насправді – це big-endian byte order). Цілі числові дані з уявлення, прийнятого на комп'ютері-відправнику, переводяться призначеним для користувача процесом в мережний порядок байт, у такому вигляді подорожують по мережі і переводяться в потрібний порядок байт на машині-одержувачі процесом, якому вони призначені. Для перекладу цілих чисел з машинного уявлення в мережне і назад використовується чотири функції: htons(), htonl(), ntohs(), ntohl().

Функції перетворення порядку байт

Прототипи функцій

#include <netinet/in.h>

unsigned long int htonl(

unsigned long int hostlong);

unsigned short int htons(

unsigned short int hostshort);

unsigned long int ntohl(

unsigned long int netlong);

unsigned short int ntohs(

unsigned short int netshort);

Опис функцій

Функція htonl здійснює переклад цілого довгого числа з порядку байт, прийнятого на комп'ютері, в мережний порядок байт.

Функція Функція htons здійснює переклад цілого короткого числа з порядку байт, прийнятого на комп'ютері, в мережний порядок байт.

Функція Функція ntohl здійснює переклад цілого довгого числа з мережного порядку байт в порядок байт, прийнятий на комп'ютері.

Функція Функція ntohs здійснює переклад цілого короткого числа з мережного порядку байт в порядок байт, прийнятий на комп'ютері.

В архітектурі комп'ютерів i80x86 прийнятий порядок байт, при якому молодші байти цілого числа мають молодші адреси. При мережному порядку байт, прийнятому в Internet, молодші адреси мають старші байти числа.

Параметр у них – значення, яке ми збираємося конвертувати. Значення, що повертається, – те, що виходить в результаті конвертації. Напрям конвертації визначається порядком букв h (host) і n (network) в назві функції, розмір числа – останньою буквою назви, тобто htons – це host to network short, ntohl network to host long.

Для чисел з плаваючою крапкою все йде набагато гірше. На різних машинах можуть розрізнятися не тільки порядок байт, але і форма представлення такого числа. Простих функцій для їх коректної передачі по мережі не існує. Якщо вимагається обмінюватися дійсними даними, то або це потрібно робити на гомогенній мережі, що складається з однакових комп'ютерів, або використовувати символьні і цілі дані для передачі дійсних значень.