Скачать презентацию Интерфейс сокетов  Литература ¡ ¡ ¡ К. Скачать презентацию Интерфейс сокетов Литература ¡ ¡ ¡ К.

Интерфейс сокетов.ppt

  • Количество слайдов: 25

Интерфейс сокетов Интерфейс сокетов

Литература ¡ ¡ ¡ К. Джамса, К. Коул Программирование для Интернет в среде Windows Литература ¡ ¡ ¡ К. Джамса, К. Коул Программирование для Интернет в среде Windows В. Стоулинг Беспроводные линии связи и сети М. Кульгин Технологии корпоративных сетей Фролов А. В. , Фролов Г. В. Разработка приложений для Интернет Мэтью Ногл TCP/IP

Создание сокета Socket. handle = socket( protocol_family, socket_type, protocol); ¡ ¡ ¡ Семейство протоколов Создание сокета Socket. handle = socket( protocol_family, socket_type, protocol); ¡ ¡ ¡ Семейство протоколов - Protocol_family PF_INET - протоколы TCP/IP. PF_NS- протоколы Ксерокс XNS. PF_UNIX - протоколы внутренние Unix. AF_INET - Семейство адресов для Internet позволяет пользоваться разными семействами адресов внутри одного семейства протоколов. На сегодняшний день семейство адресов AF_INET и семейство протоколов PF_INET имеют одинаковое значение.

Создание сокета Тип соединения - Socket_type ¡ ¡ SOCK_STREAM - ориентированный на соединение тип Создание сокета Тип соединения - Socket_type ¡ ¡ SOCK_STREAM - ориентированный на соединение тип предназначен для перемещения потока байтов SOCK_DGRAM - не ориентированный на соединение предназначен для перемещения датаграмм Протокол - Protocol ¡ IPPROTO_TCP, IPPROTO_UDP - Семейство протоколов TCP/IP состоит из нескольких протоколов IP, ICMP, TCP, UDP. Константы shandle = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)

Дескриптор сокета ¡ Дескриптор – это указатель на структуру данных сокета. Дескриптор хранится в Дескриптор сокета ¡ Дескриптор – это указатель на структуру данных сокета. Дескриптор хранится в таблице дескрипторов. Таблица дескрипторов … Указатель на структуру … … Структура данных сокета Семейство протоколов Тип сервиса Локальный IP – адрес Удаленный IP – адрес Локальный порт протокола TCP Удаленный порт протокола TCP

Функции сокета bind() Присваивает имя новому сокету listen() Переводит сокет в состояние прослушивания accept() Функции сокета bind() Присваивает имя новому сокету listen() Переводит сокет в состояние прослушивания accept() Блокирует сокет. Образует новый сокет и соединяет его с удаленным сетевым компьютером. connect() Блокирует сокет. Устанавливает соединение на указанном сокете select() Блокирует сокет. Выполняет мультиплексирование при наблюдении за состоянием нескольких сокетов getpeername() Получает имя удаленного процесса, связанного с сокетом getsockname() Возвращает имя лакального сокета getsockopt() Возвращает статус (опции) указанного сокета

Функции сокета recv() Блокирует сокет. Принимает данные из соединенного сокета recvfrom() Блокирует сокет. Принимает Функции сокета recv() Блокирует сокет. Принимает данные из соединенного сокета recvfrom() Блокирует сокет. Принимает данные из соединенного сокета send() Блокирует сокет. Передает данные через соединенный сокет sendto() Блокирует сокет. Передает данные через не соединенный сокет shutdown() Закрывает одну сторону дуплексного соединения closesocket() Блокирует сокет. Закрывает одну сторону соединения сокетов

Сетевой порядок байтов ¡ ¡ Компьютеры имеют разный порядок хранения байтов. Этот порядок байтов Сетевой порядок байтов ¡ ¡ Компьютеры имеют разный порядок хранения байтов. Этот порядок байтов хоста. Порядок «с начала» - более значимые байты хранится в ячейке с младшим адресом. Противоречит способу написания чисел. Порядок «с конца» - более значимые байты хранятся в старших адресах. Применяется при письме на многих языках. Споры по поводу, какой порядок байтов лучше не дали результата. Платформа С начала С конца Intel 80 x 86 X DEC VAX PDP X Motorola 68000 X IBM 370 X

Порядок байтов хоста С начала Числ о 12 34 56 78 90 AB CD Порядок байтов хоста С начала Числ о 12 34 56 78 90 AB CD EF Адре 1001 1002 1003 1004 1005 1006 1007 1008 С конца с Числ 78 56 34 12 EF CD AB 90 о Адре с 1001 1002 1003 1004 1005 1006 1007 1008 В Internet принят сетевой порядок байтов «с начала» . Если эти данные числовые, то программа должна преобразовать их порядок. Winsock предоставляет функции преобразования данных

Функции сокета для преобразования чисел htonl() Преобразует порядок байтов 32 -разрядного числа из машинного Функции сокета для преобразования чисел htonl() Преобразует порядок байтов 32 -разрядного числа из машинного (порядок хоста) в сетевой htons() Преобразует порядок байтов 16 -разрядного числа из машинного (порядок хоста) в сетевой inet_addr() Преобразует строку с IP-адресом в виде десяточного с точкой в 32 -разрядное число с сетевым порядком байтов inet_ntoa() Преобразует I-адрес из 32 -разрядного числа в десятичное с точкой ntohl() Преобразует порядок байтов 32 -разрядного числа из сетевого в машинный (порядок хоста) ntohs() Преобразует порядок байтов 16 -разрядного числа из сетевого в машинный (порядок хоста)

Структура адреса сокета struct sockaddr_in { short sin_family; //семейство адресов AF_INET u_short sin_port; //порт Структура адреса сокета struct sockaddr_in { short sin_family; //семейство адресов AF_INET u_short sin_port; //порт struct in_addr sin_addr; //IP адрес char sin_zero[8]; };

Структура адреса сокета struct in_addr { union { struct {u_char s_b 1, s_b 2, Структура адреса сокета struct in_addr { union { struct {u_char s_b 1, s_b 2, s_b 3, s_b 4; } S_un_b; struct { u_short s_w 1, s_w 2; } S_un_w; u_long S_addr; } S_un;

Формы IP адреса ¡ ¡ ¡ двоичное число: 1000 0110 0001 1000 0000 1000 Формы IP адреса ¡ ¡ ¡ двоичное число: 1000 0110 0001 1000 0000 1000 0100 0010 десятичное с точкой: 134. 24. 8. 66 десятичное без знака: 2249721922 десятичное со знаком: – 2045245374 шестнадцатеричное: 0 x 86180842

Структура сервисов и хоста struct servent{ char FAR* s_name; // название службы char FAR* Структура сервисов и хоста struct servent{ char FAR* s_name; // название службы char FAR* s_aliases; // список псевдонимов short s_port; // номер порта char FAR* s_proto; //транспортный протокол }

Структура сервисов и хоста struct hostent{ char FAR* h_name; // имя хоста char FAR* Структура сервисов и хоста struct hostent{ char FAR* h_name; // имя хоста char FAR* h_aliases; // список псевдонимов short h_addrtype; // тип адреса хоста short h_length; //длина адреса char FAR* h_addr_list; //список адресов хоста }

Функции для работы с базами данных gethostbyaddr() Возвращает имена и IP адрес, соответствующие сетевому Функции для работы с базами данных gethostbyaddr() Возвращает имена и IP адрес, соответствующие сетевому адресу и записывает hostent gethostbyname() Возвращает имена и IP адрес, соответствующие сетевому имени и записывает hostent gethostname() Возвращает имя докального сетевого компьютера getprotobyname() Возвращает официальное имя и номер протокола по указанному имени протокола и записывает protoent getprotobynumber() Возвращает официальное имя и номер протокола по указанному номеру протокола и записывает protoent getservbyname() Возвращает имя сетевой службы и номер порта протокола по указанному имени протокола и записывает в servent getservbyport() Возвращает имя сетевой службы и номер порта протокола по указанному номеру портаи записывает в servent

База данных по сетевым службам База данных по сетевым службам

32. Файл сервисов services # <service name> <port number>/<protocol> [aliases. . . ] [#<comment>] 32. Файл сервисов services # / [aliases. . . ] [#] echo 7/tcp echo 7/udp systat 11/tcp users #Active users daytime 13/tcp daytime 13/udp ftp-data 20/tcp #FTP, data ftp 21/tcp #FTP. control telnet 23/tcp smtp 25/tcp mail #Simple Mail Transfer Protocol time 37/tcp timserver time 37/udp timserver nameserver 42/tcp name #Host Name Server nameserver 42/udp name #Host Name Server domain 53/tcp #Domain Name Server domain 53/udp #Domain Name Server tftp 69/udp #Trivial File Transfer gopher 70/tcp finger 79/tcp

# This is a sample LMHOSTS file used by the Microsoft TCP/IP for Windows. # This is a sample LMHOSTS file used by the Microsoft TCP/IP for Windows. # # 102. 54. 97 rhino #PRE #DOM: networking #net group's DC # 102. 54. 94. 102 "appname x 14" #special app server # 102. 54. 94. 123 popular #PRE #source server # 102. 54. 94. 117 localsrv #PRE #needed for the include # # #BEGIN_ALTERNATE # #INCLUDE \localsrvpubliclmhosts # #INCLUDE \rhinopubliclmhosts # #END_ALTERNATE #

33. Windows-расширения функций сокета WSAAsync. Get. Host. By. Addr() gethostbyaddr() WSAAsync. Get. Host. By. 33. Windows-расширения функций сокета WSAAsync. Get. Host. By. Addr() gethostbyaddr() WSAAsync. Get. Host. By. Name() gethostbyname() WSAAsync. Get. Proto. By. Name() getprotobyname() WSAAsync. Get. Proto. By. Number() getprotobynumber() WSAAsync. Get. Serv. By. Name() getservbyname() WSAAsync. Get. Serv. By. Port() getservbyport() WSAAsync. Select() Асинхронный вариант select() WSAGet. Last. Error() Возвращает сообщение об ошибке WSASet. Last. Error() Фиксирует сообщение об ошибке для вызова WSAGet. Last. Error() WSAStart. Up() Инициирует Winsock. dll

34. Ориентированные на соединение сокеты Клиент инициирует соединение Функция устанавливает сетевое соединение. int Result 34. Ориентированные на соединение сокеты Клиент инициирует соединение Функция устанавливает сетевое соединение. int Result = connect (shandle, remote_socket_address, address_length) Сервер пассивно прослушивает порт Функция связывает локальный адрес компьютера и номер порта с сокетом: int Result = bind (socket_handle, local_socket_address, address_length) Программа-сервер ожидает запроса от клиента. int result=listen(socket_handle, quere_length) Для последовательного сервера quere_length=1 для параллельного сервера quere_length=5. Socket s=accept(socket_handle, local_socket_address, address_length)

35. Передача данных через соединенный сокет n. Char. Send = send(socket_handle, sz. Buffer. Query, 35. Передача данных через соединенный сокет n. Char. Send = send(socket_handle, sz. Buffer. Query, lstrlen(sz. Buffer. Query), send_flags); Чтение данных из соединенного сокета n. Char. Recv = recv(socket_handle, sz. Buffer, sizeof(sz. Buffer), recv_flags);

36. Ориентированные на соединение сокеты Socket() Bind() Listen() Accept() connect() Блокирование до поступления запроса 36. Ориентированные на соединение сокеты Socket() Bind() Listen() Accept() connect() Блокирование до поступления запроса от клиента send() recv() send() closesocket()

37. Не ориентированные на соединение сокеты Сервер и клиент, не ориентированные на соединение, пассивно 37. Не ориентированные на соединение сокеты Сервер и клиент, не ориентированные на соединение, пассивно прослушивает порт. Функция связывает локальный адрес компьютера и номер порта с сокетом: Result = bind(socket_handle, local_socket_address, address_length)

38. Передача данных через не соединенный сокет Передача данных через соединенный сокет n. Char. 38. Передача данных через не соединенный сокет Передача данных через соединенный сокет n. Char. Send = sendto(socket_handle, sz. Buffer. Query, lstrlen(sz. Buffer. Query), send_flags, sockaddr_to_length); Чтение данных из соединенного сокета n. Char. Recv = recvfrom(socket_handle, sz. Buffer, sizeof(sz. Buffer), recv_flags, send_flags, sockaddr_from_length);