A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Oficina

Gerenciador Remoto

Dom

28

Mai

2006


09:01

(18 votos, média 5.00 de 5) 


2.0 Entendendo o Código

2.1 Servidor

Bom, como o primeiro módulo que criamos foi o Servidor, nada mais justo do que começar por ele, não é? Então vamos lá. O primeiro ponto que codificamos no nosso módulo Servidor foi o botão Ativar.

O código para este botão é:

ServerSocket1.port:=31300;
ServerSocket1.Active:=true;

No código acima definimos o valor da porta a ser usada pelo ServerSocket para 31300 e, logo depois, mudamos o estado do ServerSocket para Ativo, como mostra a linha ServerSocket1.Active:=true;

O segundo ponto que codificamos no nosso Servidor foi a propriedade OnListen do ServerSocket. O código responsável é:

Label2.caption:= 'Ativado!';

O código acima inserido na propriedade OnListen do nosso ServerSocket faz com que, quando um usuário se conecte com a porta 31300 ativa do nosso módulo Servidor, a Label2 tenha sua propriedade Caption alterada para Ativado.

Agora veremos a parte mais interessante do nosso código, que é a parte referente ao evento OnClientRead do nosso módulo Servidor. O código é:

var
  texto: string;
begin
  label2.Caption:='Servidor em uso.';
  texto:=socket.ReceiveText;

  if texto='PROTECAO' then
  begin
    SendMessage(Application.Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 0);    
  end;

  if texto='NAVEGAR' then
  begin
    WinExec('c:\Arquivos de Programas\Internet Explorer\iexplore.exe', SW_SHOW);
  end;

  if texto='MSN' then
  begin
    WinExec('c:\Arquivos de Programas\MSN Messenger\msnmsgr.exe', SW_SHOW);
  end;

  if texto='QUIT' then
  begin
    ServerSocket1.Active:=false;
    form1.close;
  end;

end;

Na parte

var
  texto: string;

iniciamos a variável texto que irá conter o comando repassado pelo módulo Cliente a ser executado pelo módulo Servidor. Em seguida temos:

  label2.Caption:='Servidor em uso.';
  texto:=socket.ReceiveText;

onde em label2.caption:='Servidor em uso'; definimos para a label2 a sua propriedade caption como 'Servidor em uso'. Depois repassamos o texto recebido do modulo Cliente em Socket.ReceiveText para a nossa variável texto.

A seguir, temos o bloco de código responsável pela execução dos comandos:

  if texto='PROTECAO' then
  begin
    SendMessage(Application.Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 0);    
  end;

  if texto='NAVEGAR' then
  begin
    WinExec('c:\Arquivos de Programas\Internet Explorer\iexplore.exe', SW_SHOW);
  end;

  if texto='MSN' then
  begin
    WinExec('c:\Arquivos de Programas\MSN Messenger\msnmsgr.exe', SW_SHOW);
  end;

  if texto='QUIT' then
  begin
    ServerSocket1.Active:=false;
    form1.close;
  end;

No trecho

  if texto='PROTECAO' then
  begin
    SendMessage(Application.Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 0);    
  end;

fazemos na linha que contém a comparação com o que foi repassado pelo módulo Cliente para a variável texto com a palavra em maiúscula PROTECAO. Caso a comparação seja positiva, ou seja, o que foi repassado para a variável texto é igual à palavra PROTECAO, então podemos executar, caso seja utilizada pelo sistema em questão a proteção de tela na máquina onde está sendo executado o módulo Servidor. O código responsável pela execução da proteção de tela é:

    SendMessage(Application.Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 0);

Após este bloco de código acima, temos o que segue:

  if texto='NAVEGAR' then
  begin
    WinExec('c:\Arquivos de Programas\Internet Explorer\iexplore.exe', SW_SHOW);
  end;

Aqui fazemos novamente a comparação da variável texto com uma palavra, que desta vez é NAVEGAR. Caso o que se tenha na variável texto seja igual à palavra comparada, então é executado o Internet Explorer na máquina do módulo Servidor. O código responsável por essa execução é:

    WinExec('c:\Arquivos de Programas\Internet Explorer\iexplore.exe', SW_SHOW);

Por padrão, o caminho c:\Arquivos de Programas\Internet Explorer\ é o que contém o executável do Internet Explorer, mas isto poderá mudar e cabe a você na hora de programar o seu módulo Servidor checar se é realmente este o caminho na máquina em que o servidor será executado.

Prosseguindo com o código temos:

  if texto='MSN' then
  begin
    WinExec('c:\Arquivos de Programas\MSN Messenger\msnmsgr.exe', SW_SHOW);
  end;

Mais uma vez comparamos o conteúdo da variável texto com outra palavra e, caso seja positivo, executamos uma ação. No caso, esta palavra é MSN e se for esta a palavra repassada, executaremos o MSN, o programinha de bate-papo mais famoso do mundo da nossa amiga Microsoft. O código para execução do MSN é:

    WinExec('c:\Arquivos de Programas\MSN Messenger\msnmsgr.exe', SW_SHOW);

Mais uma vez vale lembrar que é possível que o caminho correto do MSN não seja este em todas as máquinas, cabendo novamente a você verificar o caminho correto na hora de construir o seu módulo Servidor.

Por fim, no código do nosso módulo Servidor temos o seguinte:

  if texto='QUIT' then
  begin
    ServerSocket1.Active:=false;
    form1.close;
  end;

Novamente comparamos a variável texto com outra palavra, que no caso é QUIT. Se a comparação for positiva, executaremos uma ação, que no caso é a finalização da execução do módulo servidor cujo código responsável por isto é:

    ServerSocket1.Active:=false;

Em outras palavras, desativamos o nosso ServerSocket. E para finalizar, fechamos o Módulo Servidor de uma vez com o comando:

    form1.close;

E pronto! Agora você já sabe por que o módulo Servidor é capaz de funcionar. Vamos agora para o módulo Cliente!

Informações adicionais