Сетевые технологии. Баканов В.М. - 29 стр.

UptoLike

Составители: 

- 29 -
if (liBytesReceived = SOCKET_ERROR) then
if (WSAGetLastError <> WSAEWOULDBLOCK) then
ShowMessage(SocketError);
ii_SocketState := NewState;
end; { конец SocketReceive }
Таким образом процедуры-‘обертки инкапсулируют необходимые для
функционирования WinSock-вызовов локальные переменные и обрабатывают
ошибки вызовов библиотеки WinSock API (большинство из них возвращают
константу
SOCKET_ERROR при ошибке, выдача сообщений осуществляется
посредством пары функций
WSAGetLastError из WinSock API и ShowMessage
из Windows API).
Для создания полноценного сетевого приложения необходимы функции
InitializeSocket (инициализация интерфейса WinSock), ShutdownSocket
(завершение работы WinSock),
GetHostAddress (поиск IP-адреса целевого
компьютера по заданному имени),
ProcessHostAddress (проверки
корректности полученного с помощью
GetHostAddress адреса),
GetHostAddressString (преобразование адреса в строку с необходимым
изменением порядка следования байт в адресе),
CreateSocket (создание сокета
как объекта _SOCKET),
CloseSocketConnection (отсоединение приложения от
соединения со сторонним компьютером). Функция более высокого уровня
OpenSocketConnection использует вышеописанные для создания и настройки
сокета, перевода его в асинхронный режим и соединения с удаленным
компьютером. Эти функции описаны в файлах
TSocketc.pas (описание
абстрактного класса
TSocket) и NWinSock.pas (определение Pascal-интерфейса
к WinSock API), доступны и C-варианты функций.
Заметим, что определение IP-адреса удаленного компьютера с помощью
(использующей системный вызов библиотеки WinSock API функции
WSAAsyncGetHostByName) процедуры-'обертки' GetHostAddress совместно с
функцией
ProcessHostAddress в зависимости от настройки локальной сети и
клиентского компьютера может может оказаться безрезультатным; в этом
случае следует использовать IP-адреса.
Для проверки функционирования сокета (состояния сети, своего компью-
тера и др.) удобно использовать стандартные порты (16-разрядный номер
порта однозначно идентифицирует службу сети), позволяющих провести
простую беседу:
Порт Echo (порт 7). Возвращает приложению клиента то, что он принял от
клиента. Для проверки использования этого порта удаленной машине-
серверу (host-компьютеру) посылается строка символов (содержимое стро-
ки не имеет значения, возможна случайная комбинация символов) и затем
принимается строку ответа от host-компьютера. После приема законченной
строки от host-компьютера она сравнивается с посланной строкой. Если
 if (liBytesReceived = SOCKET_ERROR) then
   if (WSAGetLastError <> WSAEWOULDBLOCK) then
     ShowMessage(SocketError);
 ii_SocketState := NewState;
end; { конец SocketReceive }

   Таким образом процедуры-‘обертки’ инкапсулируют необходимые для
функционирования WinSock-вызовов локальные переменные и обрабатывают
ошибки вызовов библиотеки WinSock API (большинство из них возвращают
константу SOCKET_ERROR при ошибке, выдача сообщений осуществляется
посредством пары функций WSAGetLastError из WinSock API и ShowMessage
из Windows API).
   Для создания полноценного сетевого приложения необходимы функции
InitializeSocket (инициализация   интерфейса WinSock), ShutdownSocket
(завершение работы WinSock), GetHostAddress (поиск IP-адреса целевого
компьютера по заданному имени), ProcessHostAddress (проверки
корректности полученного с помощью GetHostAddress                  адреса),
GetHostAddressString (преобразование адреса в строку с необходимым
изменением порядка следования байт в адресе), CreateSocket (создание сокета
как объекта _SOCKET), CloseSocketConnection (отсоединение приложения от
соединения со сторонним компьютером). Функция более высокого уровня
OpenSocketConnection использует вышеописанные для создания и настройки
сокета, перевода его в асинхронный режим и соединения с удаленным
компьютером. Эти функции описаны в файлах TSocketc.pas (описание
абстрактного класса TSocket) и NWinSock.pas (определение Pascal-интерфейса
к WinSock API), доступны и C-варианты функций.
     Заметим, что определение IP-адреса удаленного компьютера с помощью
(использующей системный вызов библиотеки WinSock API функции
WSAAsyncGetHostByName) процедуры-'обертки' GetHostAddress совместно с
функцией ProcessHostAddress в зависимости от настройки локальной сети и
клиентского компьютера может может оказаться безрезультатным; в этом
случае следует использовать IP-адреса.
     Для проверки функционирования сокета (состояния сети, своего компью-
тера и др.) удобно использовать стандартные порты (16-разрядный номер
порта однозначно идентифицирует службу сети), позволяющих провести
простую беседу:

• Порт Echo (порт 7). Возвращает приложению клиента то, что он принял от
  клиента. Для проверки использования этого порта удаленной машине-
  серверу (host-компьютеру) посылается строка символов (содержимое стро-
  ки не имеет значения, возможна случайная комбинация символов) и затем
  принимается строку ответа от host-компьютера. После приема законченной
  строки от host-компьютера она сравнивается с посланной строкой. Если

                                   - 29 -