Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Инициализация Winsock

Читайте также:
  1. Инициализация программы
  2. Объявление и инициализация переменных
  3. Строковые константы, массивы символьных строк и их инициализация. Указатели и строки, ввод-вывод и обработка строк.

Основы Winsock

В этом разделе описаны основные методики и API-вызовы, необходи­мые для написания сетевых приложений. Здесь рассмотриваются способы установления соединения между дву­мя компьютерами в сети и механизмы обмена данными. К методичке прилагается набор примеров клиент-серверных приложений. Единственная зависящая от протокола операция — это создание сокета. Большинство остальных вызовов функций Winsock, ответственных за установление соединения, отправку и прием дан­ных, не зависят от протокола. Примеры этого раздела помогут вам лучше понять вызо­вы Winsock, необходимые для установления соединений и обмена данными. Наша цель — изучить эти вызовы, поэтому в примерах используются прямые блокирующие вызовы Winsock. Другие модели ввода-вывода, реализованные в Winsock, обсуждаются в следующем разделе.

Инициализация Winsock

Любое Winsock-приложение перед вызовом функции должно загрузить со­ответствующую версию библиотеки Winsock. Если этого не сделать, функция вернет значение SOCKET_ERROR и выдаст ошибку WSANOTINITIALISED. Загруз­ку библиотеки Winsock выполняет функция WSAStartup:

 

int WSAStartup(

WORD wVersionRequested,

LPWSADATA lpWSAData

);

 

Параметр wVersionRequested задает версию загружаемой библиотеки Winsock. Старший и младший байты определяют дополнительный и основной номер версии библиотеки соответственно. Для получения значения парамет­ра wVersionRequested можно использовать макрос MAKEWORD(x, у), где х — старший байт, а у — младший.

Параметр lpWSAData — указатель на структуру LPWSADATA, которая при вызове функции WSAStartup заполняется сведениями о версии загружаемой библиотеки:

 

typedef struct WSAData {

WORD wVersion;

WORD wHighVersion;

char szDescription[WSADESCRIPTION_LEN +1];

char szSystemStatus[WSASYS_STATUS_LEN +1];

unsigned short iMaxSockets;

unsigned short iMaxUdpDg;

char* lpVendorlnfo;

} WSADATA, *LPWSADATA;

 

WSAStartup присваивает параметру wVersion значение загружаемой версии. Параметр wHighVersion содержит номер последней доступной версии Winsock. Помните, что в обоих полях старший байт определяет дополнительный, а младший — основной номер версии. Поля szDescription и szSystemStatus запол­няются не во всех реализациях Winsock и практически не применяются.

Не используйте и поля iMaxSockets и iMaxUdpDg. Предполагается, что в них заданы максимальное количество одновременно открытых сокетов и максимальный размер дейтаграммы. Макси­мальное количество одновременно открытых сокетов зависит от свободной физической памяти. Наконец, поле lpVendorlnfo зарезервировано для инфор­мации изготовителя реализации Winsock и не используется ни на одной из платформ Win32.

Для использования в приложении Winsock 1 необходимо под­ключить файл Winsock.h, а для Winsock 2 — Winsock2.h.

Даже если платформа поддерживает Winsock 2, не обязательно использовать самую последнюю версию. Напротив, если необходимо, чтобы приложение поддерживалось несколькими платформами, возьмите за основу Winsock 1.1. Такое приложение будет отлично работать на платформе Windows NT 4-0, по­тому что все вызовы Winsock 1.1 имеются в Winsock 2 DLL.

Как правило, если выходит новая версия Winsock, разработчики старают­ся ее обновить. В новых версиях исправлены ошибки, к тому же старый код должен без проблем выполняться, по крайней мере, теоретически. В неко­торых случаях поведение Winsock отличается от определенного специфи­кацией. В итоге многие программисты пишут приложения с учетом работы Winsock на конкретной платформе, а не согласно спецификации.

В большинстве случаев при написании новых приложений следует загру­жать последнюю доступную версию библиотеки Winsock. Если будет выпуще­на версия 3, приложение, использующее версию 2.2, должно выполняться кор­ректно. При запросе более поздней версии Winsock, не поддерживаемой ва­шей платформой, WSAStartup вернет ошибку, а в поле wHighVersion структуры WSADATA появится номер последней версии библиотеки, поддерживаемой данной системой.




Дата добавления: 2014-12-19; просмотров: 31 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав