- •Програмні та апаратні засоби адміністрування комп’ютерних мереж
- •Задачі адміністрування комп’ютерних мереж.
- •3. Файли та права доступів до них
- •Зміна прав доступу до файлів.
- •Команди chown, chgrp.
- •Команда umask
- •7. Символічні вказівники
- •Команда find,xargs.
- •10. Команди cron, at, nohub, &.
- •11.Ввід та вивідданих в Shell.
- •9.Виконання команд в фоновому режимі.
- •12. Команда echo.
- •13. Команда read.
- •14.Koманда cat.
- •15. Канали.
- •16.Стандартні потоки вводу, виводу та помилок.
- •Стандартне введення Потік номер 0 (stdin) зарезервовано для читання команд користувача або вхідних даних.
- •Стандартне виведення
- •Стандартне виведення помилок
- •17. Порядок виконання команд
- •18. Регулярні вирази
- •19. Сімейство команд Grep
- •20. Утиліта awk
- •21. Редактор Sed
- •22.Команди sort, uniq, join, cut, paste, split
- •23. Процес реєстрації в Linux
- •26. ЗмінніінтерпритатораShell
- •27.Локальнізмінні
- •28. Вбудовані змінні інтерпретатора Shell.
- •29. Поняття Shell сценарію
- •35. Оператор Case.
- •36. Функції інтерпритатора Shell.
- •37. Файл функцій.
- •38. Передача параметрів сценарію через командну стрічку.
- •39. Команда shift.
- •40. Вбудовані команди інтерпритатора Shell.
- •Команди робот из мережею Ipconfig, route, ping.
- •Поняття сокета
- •Атрибути сокета
- •Іменування сокета
- •Встановлення зв’язку за допомогою сокета
- •Прив’язка сокета до локальних імен
- •Передача даних з допомогою сокета
- •Функції передачі даних з допомогою сокета
- •Функції прийому даних з допомогою сокета
- •Закриття сокета
- •55. Обмін дата грамами
- •56. Використання низькорівневих сокетів
- •57. Функції для роботи з dns та адресами
- •58. Доменна система імен
- •59. Опишіть шлях проходження даних від одного комп’ютера до іншого через механізм сокетів
- •60. Паралельне обслуговування запитів клієнтів
- •61. Робота на базі сокетів з стандартними протоколами
- •62. Особливості використання сокетів в різних ос
- •63. Описати різницю між tcp і udp пакетом
- •64. Особливості dhcp протоколу
- •65. Структура dhcp пакетів
- •67. Режими видачі ip-адрес
- •68.ОписатипослідовністьвидачідинамічноїIp- адреси
- •69.Dhcp - сервер
- •71. Поштові протоколи
- •72.Особливості pop3-протоколу
- •Особливості smtp пртоколу
- •Архітектура та формат повідомлень arp-протоколу
- •Написання cgi – програм
- •76. Метод Get
- •Метод Post
55. Обмін дата грамами
Як вже говорилося , датаграми використовуються в програмах досить рідко. У більшості випадків надійність передачі критична для програми, і замість винаходу власного надійного протоколу поверх UDP програмісти воліють використовувати TCP. Тим не менш, іноді датаграми виявляються корисні . Наприклад , їх зручно використовувати при транслюванні звуку або відео по мережі в реальному часі , особливо при широкомовному транслюванні .
Оскільки для обміну датаграму не потрібно встановлювати з'єднання , використовувати їх набагато простіше. Створивши сокет за допомогою socket і bind , ви можете тут же використовувати його для відправлення або отримання даних. Для цього вам знадобляться функції sendto і recvfrom .
int sendto ( int sockfd , const void * msg , int len , unsigned int flags ,
const struct sockaddr * to , int tolen ) ;
int recvfrom ( int sockfd , void * buf , int len , unsigned int flags ,
struct sockaddr * from , int * fromlen ) ;
Функція sendto дуже схожа на send . Два додаткових параметра to і tolen використовуються для вказівки адреси одержувача . Для завдання адреси використовується структура sockaddr , як і у випадку з функцією connect . Функція recvfrom працює аналогічно recv . Отримавши чергове повідомлення , вона записує його адресу в структуру , на яку посилається from , а записане кількість байт - в змінну , адресуемую покажчиком fromlen . Як ми знаємо , аналогічним чином працює функція accept .
Деяку плутанину вносять приєднані датаграмною сокети ( connected datagram sockets ) . Справа в тому , що для сокета з типом SOCK_DGRAM теж можна викликати функцію connect , а потім використовувати send і recv для обміну даними. Потрібно розуміти , що ніякого з'єднання при цьому не встановлюється. Операційна система просто запам'ятовує адресу , який ви передали функції connect , а потім використовує його при відправці даних. Зверніть увагу , що приєднаний сокет може отримувати дані тільки від сокета , з яким він з'єднаний .
Для ілюстрації процесу обміну датаграму я написав дві невеликі програми - sender (лістинг 3 ) і receiver (лістинг 4 ) . Перша відправляє повідомлення " Hello there ! " і " Bye bye ! " , а другий отримує їх і друкує на екрані. Програма sender демонструє застосування як звичайного , так і приєднаного сокета , а receiver використовує звичайний .
Листинг 3. Программа sender.
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h>
char msg1[] = "Hello there!\n"; char msg2[] = "Bye bye!\n";
int main() { int sock; struct sockaddr_in addr;
sock = socket(AF_INET, SOCK_DGRAM, 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); sendto(sock, msg1, sizeof(msg1), 0, (struct sockaddr *)&addr, sizeof(addr));
connect(sock, (struct sockaddr *)&addr, sizeof(addr)); send(sock, msg2, sizeof(msg2), 0);
close(sock);
return 0; } |
