Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MOS-labs-3.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
655.36 Кб
Скачать

Закриття сокета

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

Сlose(S)

де S - дескриптор сокета, що закривається.

Текст програми, що створює сервер.

#include <sys/socket.h>

#include <netinet/in.h>

#include <sys/types.h>

int main (void)

{ int S, K, New;

char bufer[250], buf[]="Server create.";

struct sockaddr_in serv =

{ sizeof (struct sockaddr_in),

AF_INET,

htons (3128),

INADDR_ANY

};

S=socket (AF_INET,SOCK_STREAM,0);

bind (S, (struct sockaddr*)&serv, sizeof(serv));

listen (S,10);

for (;;)

{

K=sizeof (serv);

New=accept (S, (struct sockaddr*)&serv,&K);

read (New,bufer,sizeof (bufer));

write (New,buf,sizeof(buf));

close (New);

}

close (S);

}

Опишемо функції, які ми використовували в даній програмі:

Для створення сокета використовується функція socket:

S = socket (protocol_family, socket_type, protocol);

де:

- Protocol_family - група або сімейство, до якої належить протокол, наприклад TCP/IP. У нашому випадку ми використовуємо комунікаційний домен AF_INET, що містить Internet протоколи.

- Socket_type - тип сокета, задає режим з'єднання: Датаграммним або орієнтований на потік байтів. В нашому випадку тип сокета - SOCK_STREAM - забезпечує послідовний, надійний, орієнтований на встановлення двостороннього зв'язку потік байтів.

- Protocol - визначає протокол, з яким працюватиме сокет. У нашому випадку для створення сокета з протоколом TCP даний параметр функції встановлюємо рівним 0.

Функція bind закладає здатність програми очікувати появи запиту від клієнта. Вона дозволяє пов'язати сокет з адресою і номером порту.

Адреса мережі інтернет називається IP-адресою. Якщо комп'ютер підключений до мережі інтернет, то відповідно він має IP-адресу. Довжина адреси Інтернет становить 4 байти або 32 біти. На одному комп'ютері може працювати кілька додатків, тому другою складовою адреси інтернет є порт. У термінології TCP/IP поняття «порт» дуже схоже на IP-адресу. Відмінності: порт позначає додаток, а IP-адресу - мережевий комп'ютер. В адресації Інтернет порт займає 2 байта або 16 біт (тип - integer).

bind (S, local_address, address_length);

де:

- S це дескриптор сокета, отриманий від функції socket.

- Local_address - локальна адреса сокета, який є покажчиком на структуру даних адреси сокета спеціального виду.

- Address_length - вказує довжину структури даних адреси сокета.

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

listen (S, qlength);

де:

- S - дескриптор сокета.

- Qlength - максимальна кількість запитів на встановлення зв'язку, які можуть стояти в черзі, чекаючи обробки сервером. Виберемо qlength = 10.

Коли сервер отримує запит від клієнта і приймає рішення про встановлення зв'язку, він створює новий сокет і пов'язує його з асоціацією (в internet домені асоціація складається з локальної і віддаленої адреси і з локального і віддаленого порту), еквівалентної «слухаючому сокету». Для цього використовується виклик функції accept:

New = аccept (S, clientaddr, clientaddrlen);

Сокет, асоційований клієнтом, і сокет, який був повернутий функцією accept, використовуються для встановлення зв'язку між сервером і клієнтом.

Коли зв'язок встановлено, може початися процес передачі даних. Посилати і отримувати повідомлення можна за допомогою функцій write і read відповідно:

write (S, buffer, sizeof (buffer));

read (S, buffer, sizeof (buffer));

де:

- S - дескриптор сокета;

- Buffer - буфер повідомлення, вказує на буфер, тобто область пам'яті, в якій розташовані передані дані.

- Sizeof (buffer) - довжина буфера, тобто кількість даних для передачі.

Закривається сокет за допомогою функції close:

Сlose (S)

де S - дескриптор закривається сокета.

Після запуску, дана програма створює найпростіший Web-сервер, який постійно запущений. Щоб звернутися до цього сервера, необхідно в командному рядку браузера написати IP адресу комп'ютера, на якому запущений сервер і порт (в нашому випадку порт 3128). На рис. 5 представлений приклад звернення до сервера.

Рис. 5. Приклад звернення до сервера

0

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]