Полезные замечания по winsock

Лишь при успешной реализации всех перечисленных в первой части статьи операций может начаться обмен данными с помощью конечно же программирования. Для пересылки данных могут использоваться команды write, read, send, recv. Команды write и read имеют форму вызова:

R=write(s, buf, len) или R=read(s, buf, len),

где s - дескриптор соединителя, buf - имя массива, подлежащего пересылке (или предназначенного для приема), len - длина этого массива. Оператор writev отличается от write тем, что данные могут не лежать в виде непрерывного массива:

R=writev(s, io_vect, vectlen) или R=readv(s, io_vect, vectlen),

где s - дескриптор соединителя, io_vect - вектор-указатель на список указателей, vectlen - длина списка указателей. Команда выполняется медленнее, чем write или read.

Команды send(s, msg_buf, buflen, flags) и recv имеют аналогичный формат, но среди параметров обращения содержат переменную flags, которая служит для целей диагностики и управления передачей данных (например, пересылка информации с высоким приоритетом (MSG_OOB - Message Out Of Band), что используется, в частности, при передаче звуковых сообщений). При работе с операторами send или recv надо быть уверенным, что принимающая сторона знает, что ей следует делать с этими приоритетными сообщениями. Часто используется в спутниковых сетях

Другой возможный флаг, определяемый константой MSG_PEEK, позволяет анализировать запросы из входной очереди транспортного уровня. Обычно после считывания данных из входной очереди, они уничтожаются. Когда MSG_PEEK=1, данные из входной очереди не стираются. Этот флаг используется, например, программой FTP. При успешном выполнении команды будет возвращено число переданных байтов, в противном случае -1. используется в vsat сетях

Все перечисленные выше операторы рассчитаны на использование в рамках протоколов, ориентированных на установление соединения (TCP), где не требуется указание адреса места назначения. В протоколах типа UDP (не ориентированных на соединение) для передачи информации используются операторы sendto, recvfrom или sendmsg:

R=sendto(s, msg_buf, buflen, flags, adr_struc, adr_struc_len)

или recvfrom(s, msg_buf, buflen, flags, adr_struc, adr_struc_len),

где s - дескриптор соединителя, msg_buf - указатель на буфер, где лежит сообщение, buflen - длина этого буфера (длина сообщения), adr_struc - адресная структура, содержащая исчерпывающую информацию об адресате, adr_struc_len - длина этой структуры. Оператор recvfrom принимает все данные, приходящие на его порт. Приняв дейтограмму, recvfrom записывает также адрес, откуда эта дейтограмма получена. Сервер может посылать по этому адресу дейтограмму-отклик. Вызов оператора sendmsg имеет форму:

R=sendmsg(s, msg_struc, flags) [или recvmsg(s, msg_struc, flags)],

где s - дескриптор соединителя, msg_struc - информационная структура, формат которой показан ниже на рисунке 4. Применение структур делает программирование пересылки сообщений более гибким. Следует учитывать, что для обменов, не ориентированных на соединение, соединитель как бы состоит лишь из одной половины (IP-адрес и номер порта). Они могут принимать пакеты от других аналогичных оединителей сами посылать им дейтограммы (кавычки здесь связаны с тем, что это не реальный соединитель и никакого соединения здесь не осуществляется).

Взаимодействие операторов winsock для систем, не ориентированных на соединение, показано на рисунке 5. Здесь также как и в случае, ориентированном на соединение, сервер вызывает socket и bind, после чего обращается к процедуре recvfrom (вместо read или recv). Программа-клиент в данной схеме обращается к оператору bind и совсем не использует оператор connect (ведь предварительного соединения не нужно). Для передачи запросов и приема откликов здесь служат операторы sendto и recvfrom, соответственно.

Помимо уже описанных операторов для работы с соединителями (sockets) имеется еще один - select, довольно часто используемый серверами. Оператор select позволяет процессу отслеживать состояние одного или нескольких соединителей. Для каждого соединителя вызывающая программа может запросить информацию о статусе read, write или error. Форма обращения имеет вид:

R=select(num_of_socks, read_socks, write_socks, error_socks, max_time),
где num_of_socks - число контролируемых соединителей (в некоторых реализациях не используется и является необязательным, по умолчанию это число не должно превышать 64). В версии Беркли read_socks, write_socks и error_socks представляют собой побитовые маски, определяющие тип соединителя. Параметр read_socks представляет собой указатель на структуру, описывающую набор соединителей, состояние которых контролируется на возможность чтения (версия winsock). Если соединитель находится в состоянии listen, он будет помечен как отов для чтенияпри условии, что запрос на соединение уже получен. Это предполагает выполнение оператора accept без блокировки. Для других соединителей отовность к чтениюодразумевает наличие в очереди запросов чтения. Для соединителей типа SOCK_STREAM это означает, что виртуальный соединитель, соответствующий данному соединителю закрылся, и операторы recv или recvfrom будут выполнены без блокировки. Если виртуальное соединение закрыто корректно, оператор recv вернет код 0, в противном случае (например, принудительное закрытие) будет возвращен код WSAECONNRESET. Параметр write_socks - указатель на набор соединителей, состояние которых контролируется на возможность записи. Если соединитель находится в процессе выполнения процедуры connect, пособность к записизначает, что установление связи завершено. Для других соединителей это значит, что операции send или sendto будут выполнены без блокировки. Параметр error_socks - это указатель на набор соединителей, контролируемых на ошибки. В некоторых реализациях этот аргумент идентифицирует список соединителей, помеченных как приоритетные. Соединитель помечается как приоритетный, если опция SO_OOBINLINE=FALSE. На случай ошибки оператор select отмечает соединитель, где это произошло. select работает лишь с теми соединителями, которые были выделены с помощью масок. При успешном выполнении оператор возвращает число соединителей, готовых к операциям ввода/вывода и модифицирует коды масок в соответствии с состоянием соединителей. Прикладная программа может использовать результаты вызова оператора select, анализируя полученные коды масок. Аргумент max_time определяет максимальное время, выделенное select для завершения своей работы. Для уточнения типа ошибки, возникшей при исполнении операции select, можно воспользоваться процедурой WSAGetLastError.

Другим важным оператором является closesocket(s), который закрывает канал соединителя с одной из сторон. Все описанные выше операторы (кроме socket, bind и listen) блокируют работу программы до своего завершения. Практически любая операция, непосредственно связанная с выполнением процедур ввода/вывода, может блокировать выполнение других прикладных функций winsock.

Для обслуживания прикладных процессов (например, WWW-сервера, работа с распределенными базами данных и пр. ) разработано много других сервисных программ (WINSOCK. DLL), перечень которых представлен в таблице.

Имя команды Назначение
Getdomainname Возвращает имя домена
Gethostbyname Возвращает IP-адрес для заданного сетевого имени.
Gethostname Возвращает имя ЭВМ (обычно имя ее домена).
Gethostadr Возвращает IP-адрес ЭВМ.
Getnetaddr Возвращает адрес сети.
Getnetname Возвращает имя сети.
Getpeername Возвращает имя партнера, подключенного к соединителю.
Getportbyname Возвращает имя и код протокола для указанного имени (например, ICMP, UDP или TCP)
Getportbynumber Возвращает имя протокола для указанного его кода
Getservbyname Извлекает из базы данных название протокола и номер порта для указанного имени сетевой услуги
Getservbyport Возвращает имя сетевой услуги для заданного номера порта
Getsockname Возвращает местный адрес соединителя.
Getsockopt Запрашивает информацию о соединителе.
Htonl Преобразует порядок байтов 32-разрядного кода из машинного в сетевой.
Htons Преобразует порядок байтов 16-разрядного кода из машинного в сетевой.
inet_addr Преобразует символьную строку IP-адреса из десятично-точечного формата в 32-разрядный код с сетевым порядком байтов.
inet_ntoa Преобразует IP-адрес в десятично-точечный формат.
Ioctlsocket Управляет параметрами соединителя, связанными с обработкой операций ввода/вывода.
Ntohl Преобразует порядок байтов 32-разрядного кода из сетевого в машинный.
Ntohs Преобразует порядок байтов 16-разрядных кодов из сетевого в машинный.
Ethostname Устанавливает имя ЭВМ.
Setsockopt Устанавливает опции соединителя.
Socketpair Генерирует пару соединителей.

Море IT - Интернет портал

Автор статьи: неизвестный | Дата публикации: 15:56 14.12.2016 Effectdaily.Ru




Отзывы и комментарии
Ваше имя (псевдоним):
Проверка на спам:

Введите символы с картинки:



Удивительная поездка

Удивительная поездка


     Срочная телеграмма о тяжелой болезни отца моей жены пришла неожиданно, как и приходят подобные вещи. Ей надо было срочно собираться в дорогу. Ехать за 250 км удовольствие...


Дошкольное образование: скупой платит дважды?

Дошкольное образование: скупой платит дважды?


«Не хочу учиться, хочу жениться!» — так говорил своей матери Митрофанушка, знаменитый недоросль Фонвизина. Это слова, которые кто-то из нас услышит, будучи родителем подростка и...


Подарите Лондону пять дней

Подарите Лондону пять дней


На что обратить внимание: — В первую очередь стоит обратить взор в сторону Лондонского Тауэра. В этом известном всему миру месте на протяжении не одного века содержались узники из знати и храни...


Учить английский дома или на курсах?

Учить английский дома или на курсах?


Один воскликнет: «Конечно же, дома!», другой: Конечно, на курсах!". Первым окажется упорный и весьма пунктуальный человек, вторым — доверяющий профессионализму и желаю...


Андрей Петров: как киноактер чуть не стал шахтером?

Андрей Петров: как киноактер чуть не стал шах...


19 декабря 1919 года, 90 лет назад, в Саратове, в семье провинциального 31-летнего актера Алексея Петрова появился на свет сын. Его назвали Андреем. Воспитанием мальчика чаще занималась мама, пот...


Внедряем бизнес на столичный рынок.

Внедряем бизнес на столичный рынок.


Владелец бизнеса в ближайшем Подмосковье может впоследствии пожелать открыть филиал в Москве, – в современной бизнес-среде это очень распространённое явление. Продвигать свой бизнес в столице – дело в...


Познавательное

Иммиграция в Канаду глазами консультанта...

Татьяна Гуляева родилась в Ульяновске, окончила юридический факультет Ульяновского государственного университета (в те времена - филиала МГУ), а также дополнительный трёхлетний курс французского языка...

Автокредит

Кредитование, на первый взгляд, - весьма привычное явление. Клиент хочет что-то купить, а своих денег не хватает. Банк, в свою очередь, на этом зарабатывает. Но это только на первый взгляд. Когда же н...

Сантехнические перегородки: из чего их создают?

При ремонте или строительстве зданий никак не нужно забрасывать сантехнические помещения, особенно это касается коммерческих проектов. Магазины, офисы, торговые центры, государственные и образовательн...

Лук порей: замечательная культура

Описание Лук-порей — двулетнее растение, в культуре выращиваемое как однолетник. В пищу употребляются утолщенные основания листьев, которые образуют ложный стебель. Растения холодостойкие и способны п...

А еще, что посмотреть в Виннице...

Как пример - благодаря тому, что в 1634 году Петр Могила, один из выдающихся культурных и общественных деятелей Украины, открыл в Виннице филиал Киево-Могилянской академии, теперь один из ее «потомков...

Модернизация программного обеспечения электронной

В третьем квартале 2015 года компанией «ТЕХНОЛОГИИ БУДУЩЕГО» проведена масштабная модернизация программного обеспечения систем управления очередью в налоговых инспекциях, направленная на исполнение По...

Требования ОКК на изгибы по ГОСТ Р

Требования к кабельной продукции со стороны электроэнергетики непрерывно растут. Современный кабель для систем пожарной и охранной сигнализации как минимум обязан быть прочным, надежным, пожаробезопас...

Избавься от неуверенности в себе с помощью самовну

Многие люди пользуются и знают о силе, которой обладают аффирмации или позитивные самовнушения. И это действительно так, они могут творить настоящие чудеса с людьми и их жизнями. Немало известно случа...

Сетевые пираты

Из Сети можно скачать всё – музыку, фильмы, программы. В том числе и бесплатно, но, как правило, нелегально. Рассмотрим этот вопрос более подробно и с разных точек зрения. Для многих молодых людей хож...

Вкусные рецепты: Маффины солнечные сгрецкими ореха

Маффины солнечные сгрецкими орехами1.Смешать муку,соль,разрыхлитель и корицу.2.Взбить яйца с сахаром к ним добавить растопленное масло,туда же добавить растопленный мед.3.Готовим пюре из тыквы:тыкву р...

Новости развития информационнного портала:

Наш сайт является ресурсом, который включает в себя широкий каталог познавательных и занимательных статей. Каждый посетитель отыщет для себя что-нибудь нужное. Адаптированный дизайн дает возможность вам максимально быстро находить подходящую информацию. Самые разнообразные тематические статьи дают возможность вам совершенствоваться в той или иной сфере. Быть более начитанным и грамотным. Современный дизайн сайта позволяет просматривать статьи на всех гаджетах. Теперь найти нужную информацию стало просто.

Мы собрали для вас полезные и отличные статьи. На нашем сайте вы найдете ответы на необходимые для вас вопросы. Упрощенная система поиска позволяет вам мгновенно отыскать нужную информацию. Адаптированный дизайн позволяет вам просматривать информацию на абсолютно любых гаджетах. Теперь, поиск подходящей информации будет занимать у вас секунды.