ВУЗ:
Составители:
Рубрика:
- 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 -
Страницы
- « первая
- ‹ предыдущая
- …
- 27
- 28
- 29
- 30
- 31
- …
- следующая ›
- последняя »
