
- •Телекомунікаційні системи і технології методичнi вказiвки
- •3.1 Теоретичні відомості 12
- •Теоретичні відомості
- •Основні сервери Packet Tracer
- •Матеріали для виконанння роботи
- •Робота з Packet Tracer.
- •Створення моделі мережі.
- •Перевірка працездатності мережі
- •Завдання
- •Структура ip-адреси.
- •Десятковий запис ip-адреси.
- •Мережі та підмережі. Маски.
- •Організація підмереж
- •Матеріали для виконанння роботи
- •Проведення розрахунків для визначення адрес та маски мережі
- •Модель мережі і налагодження свіча
- •Аналіз і тестування мережі
- •Завдання
- •9 Аналіз і тестування мережі :
- •Питання
- •Теоретичні відомості
- •Матеріали для виконання роботи
- •Розділення мережі на підмережі
- •Модель мережі і налагодження свіча та маршрутизатора
- •Аналіз і тестування мережі
- •Завдання
- •Хід роботи
- •8 Аналіз і тестування мережі:
- •Питання
- •Теоретичні відомості
- •Робота з сокетами
- •Реалізація сервера
- •Реалізація клієнта
- •Приклад роботи з WinSock
- •Приклад роботи для Unix подібних систем
- •Завдання
- •Питання
- •Теоретичні відомості
- •Приклад роботи WinSock
- •Приклад роботи (для unix подібних систем)
- •Текст програми
- •Зміст дисципліни
- •Розподіл об'єму самостійної роботи
- •Екзаменаційні питання
- •Рекомендована література
Приклад роботи для Unix подібних систем
Ехо-Клієнт:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
char message[] = "Hello there!\n";
char buf[sizeof(message)];
int main()
{
int sock;
struct sockaddr_in addr;
sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock < 0)
{
perror("socket");
exit(1);
}
addr.sin_family = AF_INET;
addr.sin_port = htons(3425);
addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
if(connect(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
{
perror("connect");
exit(2);
}
send(sock, message, sizeof(message), 0);
recv(sock, buf, sizeof(message), 0);
printf(buf);
close(sock);
return 0;
}
Ехо-Сервер:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main()
{
int sock, listener;
struct sockaddr_in addr;
char buf[1024];
int bytes_read;
listener = socket(AF_INET, SOCK_STREAM, 0);
if(listener < 0)
{
perror("socket");
exit(1);
}
addr.sin_family = AF_INET;
addr.sin_port = htons(3425);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(listener, (struct sockaddr *)&addr, sizeof(addr)) < 0)
{
perror("bind");
exit(2);
}
listen(listener, 1);
while(1)
{
sock = accept(listener, NULL, NULL);
if(sock < 0)
{
perror("accept");
exit(3);
}
while(1)
{
bytes_read = recv(sock, buf, 1024, 0);
if(bytes_read <= 0) break;
send(sock, buf, bytes_read, 0);
}
close(sock);
}
return 0;
}
Завдання
Написати сервер котрий одночасно буде відповідати на запити від клієнтів.
Для студентів котрі хочуть отримати відмінну оцінку: клієнт повинен надсилати щосекунди повідомлення с поточною датою. На стороні сервера реалізувати перевірку, якщо прийнята дата парна (секунди), у відповідь відсилати дату що прислав клієнт та повідомлення «Число парне», інакше «Число не парне»;
Питання
1 Що таке сокет? Які існують типи сокетів?
2 Яка функція використовується при створені сокету? Охарактеризуйте параметри котрі передаються у функцію?
3 Навіщо вказувати на стороні сервера адресу/порт?
4 Поясніть, чому при адресації сокетів використовуються різні структури перетворення типів?
5 Яка функція використовується для читання даних із сокету? Охарактеризуйте параметри котрі передаються у функцію?
7 Які функції обов’язково повинні бути присутніми при створення сервера/клієнта? Охарактеризуйте відповідь?
5ЛАБОРАТОРНА РАБОТА № 5 Дослідження роботи з датаграмними сокетами в режимі опиту
Мета роботи: Вивчити роботу з датаграмними сокетами в режимі опиту. Створити сервер котрий буде відповідати на запити клієнтів.
Теоретичні відомості
Датаграмні сокети використовуються в програмах не так часто, оскільки надійність дуже низька. Корисні вони тоді, коли потрібно постійно передавати звук і відео по мережі. Оскільки для датаграмних сокетів не потрібно встановлювати з’єднання, використовувати їх значно простіше.
Реалізація сервера:
1 Підготувати бібліотеку до використання;
2 Створити об’єкт типу Socket;
3 Зв’язати цей об’єкт з локальною адресою/портом;
4 Прийняти/передати дані;
5 Закрити сокети, звільнити ресурси.
Реалізація клієнта:
1 Підготувати бібліотеку до використання;
2 Створити об’єкт типу Socket;
3 Прийняти/передати дані;
4 Закрити сокети, звільнити ресурси.
Створивши сокет за допомогою socket та bind, ви вже можете використовувати його для відправки і прийому повідомлень за допомогою функцій sendto та recvfrom.
Для відправлення повідомлення використовують функцію int sendto (SOCKET s, const char FAR * buf, int len,int flags, const struct sockaddr FAR * to, int tolen).
Вона майже така як і send, але має 2 додаткових параметри:
- to – вказуємо структуру sockaddr, в котрій є адреса призначення;
- tolen – розмір структури.
Для прийому даних використовують функцію int recvfrom (SOCKET s, char FAR* buf, int len, int flags, struct sockaddr FAR* from, int FAR* fromlen ).
Відповідно і тут є 2 додаткових параметри, один із них структура sockaddr, в котру ми запишемо адресу/порт відправника (на цю ж адресу і будемо відповідати в зворотному направці) і саме розмір цієї структури.
Доречі, можна використовувати і функції send та recv, зробивши connect, але майте на увазі, що ніякого з’єднання не відбувається, ми просто запам’ятовуємо адресу.