Platform SDK: Windows Sockets 2 |
gethostname
gethostbyname преобразование имени сетевого узла в IP-адрес
Харт 313
Сокеты (также как и именованные каналы и mailslot-ы) могут использоваться для взаимодействия процессов, выполняющихся как на одном компьютере (хотя для этого существуют более эффективные средства обмена данными), так и на разных в сети.
Но! именованные каналы и mailslot-ы обладают существенным недостатком: они не являются промышленным стандартом – Berkelay Sockets??? (то есть пока Вы общаетесь между компьютерами, на которых стоит ОС Windows, все будет хорошо) => если Вам нужно обмениваться данными в гетерогенной сети (в которой не только ОС Windows), то скорее всего не получится.
За счет возможности стандартизованного взаимодействия WinSock позволяет программистам использовать высокоуровневые протоколы, такие как http, RPC и COM (это все высокоуровневые модели стандартизованного системо-независимого взаимодействия между процессами через сеть.)
Историческая справка: изначально сокеты были разработаны для Berkeley UNIX платформы для организации связи между разными процессами. Winows Sockets были разработаны как расширение Berkelay Sockets API для среды Windows.
Специфика Windows sockets:
Основные шаги для создания соединения клиент-сервер
Сервер |
Клиент |
1. Создание сокета, ожидающего запросы на соединение от клиентов. |
|
2. Создание клиентского сокета и попытка соединения с сервером. |
|
3. Разрешение попытки соединения от клиента. |
|
4. Передача и прием данных. |
4. Передача и прием данных. |
5. Закрытие соединения. |
5. Закрытие соединения. |
Сначала сервер создает сокет, «слушающий» определенный порт, и ожидает попытку соединиться от клиентов. Клиент, со своей стороны, создает сокет и делает попытку соединиться с сервером. Как только сервер «узнает», что появился клиент, он разрешает соединение, после чего может начинаться обмен данными. Когда все данные будут переданы, любая сторона может закрыть соединение.
Последовательность действий:
WSA – Windows Sockets Asynchronous
Инициализация заключается в сопоставлении номера версии и возможностями реально существующей DLL в системе.
Прототип функции инициализации:
int WSAStartup( //возвращаемое значение ==0 в случае успеха (!=0 - dкоды ошибок -> MSDN)
WORD wVersionRequested, //это значение должен сформировать программист при вызове функции: , младший байт – основной номер версии, старший байт – дополнительный номер версии, например: 2.0
LPWSADATA lpWSAData//если вызов завершится удачно, то по указанному адресу функция сформирует информацию о поддержке dll-ью требуемой функциональности сокета (о версии)
);
Структура WSADATA:
struct WSADATA { WORD wVersion; //версия, которую предполагает использовать программист WORD wHighVersion; //самая поздняя доступная версия char szDescription[WSADESCRIPTION_LEN+1]; //строка с описанием, например «WinSock 2.0» char szSystemStatus[WSASYS_STATUS_LEN+1]; //например, “Running” unsigned short iMaxSockets; //в версии 2 игнорируется unsigned short iMaxUdpDg; //в версии 2 игнорируется char FAR* lpVendorInfo; //в версии 2 игнорируется
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.