ВУЗ:
Составители:
Рубрика:
- 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
- …
- следующая ›
- последняя »