Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programmirovanie_elektronnykh_ustroystv.doc
Скачиваний:
53
Добавлен:
28.05.2015
Размер:
1.44 Mб
Скачать
      1. Windows Sockets

Winsockили WindowsSockets– это интерфейс программирования приложений (API) созданный для реализации программ в сети на основе протоколов TCP/IP.

При взаимодействии «клиент – сервер» в сети каждого участника взаимодействия можно рассматривать как конечную точку или другими словами сокет. Windows Socketsразрабатывался на основе интерфейса Беркли для UNIX (илиBSDсокетов), но к ним добавлены функции поддержки событий Windows. Таким образом, несмотря на то, что рассмотрены только WindowsSockets, в целом программирование сокетов в UNIX системах и Windows похоже.

В настоящее время существует две основные версии WinsockAPI:

  1. WinSock 1.1 – осуществляется поддержка только протоколов TCP/IP;

  2. WinSock 2.0 – введена возможность работы с самыми разными сетевыми протоколами и моделями, например SPX/IPX.

Официальная спецификация Winsockразделяет функции на три типа:

  1. функции Беркли;

  2. информационные функции (получение информации о наименовании доменов, службах, протоколах Интернета);

  3. расширения Windows для функций Беркли.

Все функции могут быть блокирующие и неблокирующие. Обычно блокирующие это функции Беркли. То есть при работе такой функции нельзя выполнять другие функции WinSock.

Код программы, осуществляющей инициализацию интерфейса WinsockAPI(WSA) и его деинициализацию следующий:

#include <stdio.h>

#include <winsock.h>

const int WINSOCK_VERSION = 0x0101;

void main()

{

WSADATA wsaData;

if (WSAStartup(WINSOCK_VERSION, &wsaData))

printf(“Winsock startup FAILED!\n”);

else

printf(“Winsock startup is successful.\n”);

if (WSACleanup())

printf(“Winsock cleanup FAILED!\n”);

else

printf(“Winsock cleanup is successful.\n”);

system(«pause»);

return;

}

Программа скомпилирована как консольный проект Win32. Для успешной линковки необходимо добавить в список зависимостей приложения файлwsock32.lib, входящий в состав любого современного компилятораC++ дляWindows.

С помощью #include <winsock.h>подключаются библиотечные функции. Далее объявляется константа с номером версии, с которой будет работать приложение – WINSOCK_VERSION.

Функция WSAStartup()инициализирует Winsock. Эта функция всегда вызывается самой первой при начале работы с Winsock. Ее прототип следующий:

int WSAStartup (WORD wVersionRequested, LPWSADATA lpWSAData);

Первый параметр – это версия, которая будет использоваться. Младший байт – основная версия, старший байт – расширение версии. То есть в примере, используется версия 1.1. Если инициализация состоялась, то вернется нулевое значение. Инициализация заключается в сопоставлении номера версии и реально существующей библиотеки динамической компоновки (файла с расширением DLL) в системной папке Windows.

Второй параметр – это указатель на структуру WSADATA, в которую возвратятся параметры инициализации. Структура имеет следующее определение:

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 FAR * lpVendorInfo;

} WSADATA, FAR * LPWSADATA;

WSACleanup() завершает использование данного DLL файла и прерывает обращение к функциям Winsock. При удачном выполнении вернется ноль. Результат успешной работы программы приведен на рисунке 2.4.1.

Рисунок 2.4.1 – Инициализация и деинициализация WinsockAPI

В состав Winsockвходит ряд информационных функций, например, для получения сведений об имени компьютера в сети или IP – адреса. Рассмотрим простой пример, выводящий на экран имя локальной машины.

#include <stdio.h>

#include <winsock.h>

const int WINSOCK_VERSION = 0x0101;

void main()

{

char szInfo[BUFSIZ];

WSADATA wsaData;

if (WSAStartup(WINSOCK_VERSION, &wsaData))

printf(“Winsock startup FAILED!\n”);

else

printf(“Winsock startup is successful.\n”);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]