ВУЗ:
Составители:
Рубрика:
- 31 -
SKT_SENDPACKET = 3;
SKT_RECVPACKET = 4;
UWM_SOCKETEVENT = WM_USER + 500;
Добиться упрощения программы можно путем отказа от вызова функции
WSAAsyncGetHostByName, однако этот вариант неприемлем при работе в
многопотоковом режиме (когда каждое приложение выполняется в своем
потоке, полностью не зависящем от интерфейса пользователя). Задающая
подсоединение к порту 13 сервера службы времени константа
IPPORT_DAYTIME=13 определена в файле NwinSock.pas.
Процедура UWMSocketevent проверяет текущее состояние гнезда и вызы-
вает соответствующую функцию обработки состояния (процедура UWMSock-
etevent объявлена как
procedure UWMSocketEvent(var Msg:TMessage); message WM_SOCKETEVENT;
т.е. является автоматически вызываемой при наступлении события
UWM_SOCKETEVENT):
procedure TForm1.UWMSocketEvent (var Msg: TMessage);
begin
case NetSocket.GetSocketState of
SKT_NOOP : ; { ничего делать не надо }
SKT_GETHOSTADDR : ProcessHostLookup;
SKT_CONNECTTOHOST : ProcessHostConnect ;
SKT_SENDPACKET : ProcessHostSend;
SKT_RECVPACKET : ProcessHostReceive;
end;
end; { конец UWMSocketEvent }
Подобный прием (создание программ, управляемых пользовательскими
событиями) является типичным при программировании сетевых приложе-
ний; процедура UWMSocketEvent фактически управляет программой.
Процесс начинается щелчком на кнопке Connect (справа на главном окне,
рис.10), при этом вызывается ConnectClick(). Процедура ConnectClick() про-
веряет, введено ли пользователем имя host-компьютера в текстовом окне
Host Name и инициализирует процесс поиска адреса host-компьютера. Далее
вызывается (ранее описанная) функция GetHostAddress (после окончания по-
иска IP-адреса возникает событие UWM_SOCKETEVENT, которое инициирует
процедуру UWMSocketEvent, управляющую программой):
procedure TForm1.ConnectClick(Sender: TObject);
begin
if Length(HostName.text) > 0 then { адрес host-машины введен… }
begin
SKT_SENDPACKET = 3; SKT_RECVPACKET = 4; UWM_SOCKETEVENT = WM_USER + 500; Добиться упрощения программы можно путем отказа от вызова функции WSAAsyncGetHostByName, однако этот вариант неприемлем при работе в многопотоковом режиме (когда каждое приложение выполняется в своем потоке, полностью не зависящем от интерфейса пользователя). Задающая подсоединение к порту 13 сервера службы времени константа IPPORT_DAYTIME=13 определена в файле NwinSock.pas. Процедура UWMSocketevent проверяет текущее состояние гнезда и вызы- вает соответствующую функцию обработки состояния (процедура UWMSock- etevent объявлена как procedure UWMSocketEvent(var Msg:TMessage); message WM_SOCKETEVENT; т.е. является автоматически вызываемой при наступлении события UWM_SOCKETEVENT): procedure TForm1.UWMSocketEvent (var Msg: TMessage); begin case NetSocket.GetSocketState of SKT_NOOP : ; { ничего делать не надо } SKT_GETHOSTADDR : ProcessHostLookup; SKT_CONNECTTOHOST : ProcessHostConnect ; SKT_SENDPACKET : ProcessHostSend; SKT_RECVPACKET : ProcessHostReceive; end; end; { конец UWMSocketEvent } Подобный прием (создание программ, управляемых пользовательскими событиями) является типичным при программировании сетевых приложе- ний; процедура UWMSocketEvent фактически управляет программой. Процесс начинается щелчком на кнопке Connect (справа на главном окне, рис.10), при этом вызывается ConnectClick(). Процедура ConnectClick() про- веряет, введено ли пользователем имя host-компьютера в текстовом окне Host Name и инициализирует процесс поиска адреса host-компьютера. Далее вызывается (ранее описанная) функция GetHostAddress (после окончания по- иска IP-адреса возникает событие UWM_SOCKETEVENT, которое инициирует процедуру UWMSocketEvent, управляющую программой): procedure TForm1.ConnectClick(Sender: TObject); begin if Length(HostName.text) > 0 then { адрес host-машины введен… } begin - 31 -
Страницы
- « первая
- ‹ предыдущая
- …
- 29
- 30
- 31
- 32
- 33
- …
- следующая ›
- последняя »