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

UptoLike

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

- 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 -