Теми рефератів
> Реферати > Курсові роботи > Звіти з практики > Курсові проекти > Питання та відповіді > Ессе > Доклади > Учбові матеріали > Контрольні роботи > Методички > Лекції > Твори > Підручники > Статті Контакти
Реферати, твори, дипломи, практика » Курсовые проекты » Програма Server Socket

Реферат Програма Server Socket





що все пройшло успішно, інакше результатом виконання функції буде SOCKET_ERROR. Кожен створений тобою socket за допомогою функції socket (), повинен бути закритий за допомогою функції closesocket ().

У функцію передається єдиний параметр - дескриптор socketа, який необхідно закрити. Не намагайся використовувати цей socket після виклику функції closesocket (). У кращому випадку компілятор помітить помилку.

Використання цієї функції досить просте: (hSocket);

Однак, в реальний ситуаціях, необхідно трохи більше операцій, що б закрити socket належним чином. Це ми розглянемо трохи позднее.бил розроблений таким чином, що б він міг взаємодіяти з різними протоколами, включаючи ті, які повинні бути додані пізніше. Тому був розроблений загальний спосіб адресації. Наприклад, TCP/IP використовує IP адреса і номер порту для визначення адреси, але інші протоколи можуть робити це по-іншому. Якби WinScok дотримувався певного типу адресації, то додавання інших протоколів було б неможливим.

Перший варіант вирішення цієї проблеми - використання структури sockaddr: sockaddr

{

u_short sa_family; sa_data [14];

};

Перше поле цієї структури визначає «адресне сімейство» адреси. Дані, що зберігаються у змінній sa_data, можуть змінюватися в залежності від «адресного сімейства». У WinSock визначена структура sockaddr_in, яка є TCP/IP версією структури sockaddr.

struct sockaddr_in {sin_family; short sin_port; in_addr sin_addr;

char sin_zero [8];

};

Останні 8 байт структури не використовуються. Вони передбачені для того, що б дати структурі потрібний розмір (такий же як у структури sockaddr).

Перед тим, як рухатися далі, необхідно знати про мережевий порядок байт. Під «порядком байт» будемо розуміти послідовність, в якій зберігаються значення, що охоплюють кілька байт. Наприклад, 32-бітове цілочисельне значення 0x12345678 охоплює 8 квітня-бітових байта. Деякі комп'ютери використовують порядок байт, в якому менш значущі байти збережені спочатку. Тобто наше число 0x12345678 буде зберігатися в такій послідовності: 0x78, 0x56, 0x34, 0x12 (порядок байтів від молодшого до старшого, англ. Little-endian). Однак більшість машин використовують протилежний порядок, тобто більш значимий байт зберігається спочатку. У таких машинах наше число буде зберігатися у вигляді 0x12, 0x34, 0x56, 0x78. Оскільки протоколи, за якими будуть передані дані між двома комп'ютерами, можуть мати різні байтові порядки, то необхідний стандарт, щоб перешкоджати передачі даних неправильним чином.

Оскільки такі протоколи, як TCP/IP працюють між різними системами з різним порядком байтів, то був розроблений стандарт - порядок від старшого до молодшого (big-endian). Запис починається зі старшого байта і закінчується молодшим. Наприклад, 16-бітовий номер порту 12345 (0x3039) в цьому поданні буде виглядати так: спочатку 0x30, потім 0x39, тобто більш значимий байт йде спочатку. 32-бітовий IP адреса зберігається аналогічним чином: кожна частина IP адреси зберігається в одному байті, і перша частина зберігається в першому байті. Наприклад, IP адреса 216.239.51.100 буде зберігатися в такій послідовності байтів: 216,239,51,100. Цей порядок є стандартним для протоколів TCP/IP, він використовується в заголовках пакетів даних і в багатьох протоколах більш високого рівня, розроблених для використання поверх TCP/IP. Тому, порядок байтів від старшого до молодшого часто називають мережевим порядком байтів (network byte order).

Крім параметрів sin_family і sa_family в структурах sockaddr_in і sockaddr, відповідно, які не є частиною протоколу, але кажуть WinSock, яке «адресне сімейство» використовувати, всі інші поля цих структура зберігаються в мережевому порядку байтів. забезпечує декілька функцій для перетворення порядку байтів локальної машини в мережевій порядок байтів:

//Перетворює u_short з порядку байтів локальної машини в мережевій порядок байтів

u_short htons (u_short hostshort);

//Перетворює u_long порядку байтів локальної машини в мережевій порядок байтів

u_long htonl (u_long hostlong);

//Перетворює u_shorth з мережевого порядку байтів в порядок байтів локальної машини

u_short ntohs (u_short netshort);

//Перетворює u_long з мережевого порядку байтів в порядок байтів локальної машини

u_long ntohl (u_long netlong);

Повернемося до структурі sockaddr_in. Як писалося вище, всі параметри крім sin_family мають мережевий порядок байтів. Цей параметр у нас використовується в значенні AF_INET. sin_port - це 16-бітовий номер порту, sin_addr - 32-бітовий IP адресу. sin_zero не використовується, цей параметр потрібен, щоб надати структурі потрібний розмір.

Ось приклад заповнення полів структури sockaddr_in: _in sockAddr1, sockAddr2;

//Встановлюємо адресне сімейство

sockAddr1.sin_family=AF_INET;

...


Назад | сторінка 6 з 8 | Наступна сторінка





Схожі реферати:

  • Реферат на тему: Мій комп'ютер: призначення та порядок використання. Головне меню ОС Wi ...
  • Реферат на тему: Індивідуальні трудові спори і порядок їх вирішення в судовому порядку
  • Реферат на тему: Судовий порядок, умови встановлення фактів, що мають юридичне значення
  • Реферат на тему: Порядок надання та використання відпусток без збереження заробітної плати
  • Реферат на тему: Звітність за сегментами, її значення і порядок формування