Você está na página 1de 5

1

IMPLEMENTAÇÃO DE SOCKETS E THREADS NO


DESENVOLVIMENTO DE SISTEMAS CLIENTE / SERVIDOR:
UM ESTUDO EM VB.NET

Daniel da Silva Carla E. de Castro Franco Diogo Florenzano Avelino


daniel.silva1@ext.mpsa.com carla.franco@mpsa.com diogo@inf.aedb.br
Associação Educacional Dom Bosco. FCEACDB. Resende, RJ, Brasil.

RESUMO
O objetivo deste artigo é demonstrar a utilidade do uso de sockets e threads em sistemas
cliente / servidor em VB.NET, apresentando uma abordagem na aplicação destas
tecnologias em sistemas de monitoramento de estações de trabalho, confirmando assim, sua
real importância e praticidade de aplicação.

Palavras-Chave: Cliente / Servidor, Sockets, Threads, VB.NET.

1. INTRODUÇÃO
Há poucos anos atrás, não se ouvia falar em comunicação entre dois ou mais
computadores. Assim, cada computador era isolado e as informações não eram
distribuídas em tempo real, dificultando a disseminação da informação.
Atualmente, milhares e até mesmo milhões de usuários possuem a capacidade de
comunicar-se de forma remota. Cada um destes realizando várias atividades
simultaneamente. Estes sistemas seguem o paradigma denominado por cliente / servidor,
onde há uma aplicação provendo serviços como o de aguardar conexões, receber e enviar
mensagens e retornar resultados; e também uma aplicação cliente que, ao contrário da
primeira, é a que solicita a conexão, envia mensagens para o servidor, aguarda mensagens
de resposta e utiliza os recursos oferecidos pelo servidor.
Para otimizar a funcionalidade deste tipo de sistema foram desenvolvidas duas técnicas:
Sockets e Threads. Serão demonstrados a importância de cada uma das técnicas dentro
do desenvolvimento de sistemas cliente / servidor, utilizando o ambiente de programação
Microsoft Visual Studio .NET e um estudo de caso que trata de um sistema que utiliza estas
tecnologias.

2. SOCKETS
Os sockets representam a base da comunicação em redes TCP / IP. Seu conceito é o
mesmo de um soquete (elétrico, telefônico, etc), que serve para interconectar elementos
diferentes. Eles são estruturas que permitem que dois ou mais aplicativos do tipo cliente /
servidor, se comuniquem entre si e funcionam como uma porta de um canal de
comunicação que permite a um processo, programa em execução, executado em um
computador, envie e / ou receba informações para / de outro processo que está sendo
executado em outro computador remoto.
Quando dois ou mais computadores querem manter uma “conversação”, cada um deles
utiliza um socket. Um computador é chamado de servidor (ele abre um socket e passa a
escutar novas conexões) e o outro computador é denominado cliente (ele utiliza o socket
servidor para iniciar a conexão).
IV SEAC – Semana de Atividades Científicas

Figura 1. Canal de Comunicação (Socket).

Para implementar uma aplicação utilizando sockets, é necessário identificar o IP ou HOST


do computador e o número de porta do processo. O endereço IP identifica uma máquina
específica na rede, seja em rede local ou na Internet e o número de porta é uma maneira de
diferenciar os processos que estão sendo executados no mesmo computador. Existem
números de portas que são utilizados por padrão por alguns aplicativos, como a porta 80
que é utilizada pelo protocolo http e a 21 e 22 que são utilizadas pelo protocolo FTP. É
exatamente a combinação do IP com o número de porta do aplicativo que se denomina
Sockets.

Figura 2. Representação do HOST e o número de PORTA.

O protocolo TCP / IP oferece dois modos de utilização de Sockets: o modo orientado a


conexão, que funciona sobre o protocolo TCP (responsável por garantir a entrega dos
dados trafegados na rede) e o modo orientado a datagrama (não garante a entrega dos
dados), que funciona sobre o protocolo UDP. Ambos os protocolos são localizados na
camada de transporte do protocolo TCP / IP.

3. THREADS
Quando um programa está em execução, o sistema operacional cria um processo
juntamente com alguns dados adicionais para controlá-lo. No momento da criação deste
processo existe uma única linha de execução (trecho de código) sendo executado por ele.
A thread é esta linha de execução dentro de um processo.
A estrutura das threads permite o controle do fluxo de execução dentro de um programa e
são oferecidas pelo próprio sistema operacional ou podem ser implementadas utilizando-se
bibliotecas de uma determinada linguagem.
Por permitirem que qualquer aplicação execute mais de um método simultaneamente e que
possa ser executada de forma independente pelo sistema operacional, uma aplicação
servidora pode aceitar uma nova conexão de algum cliente e não ficar somente atendendo
a solicitação de um cliente já conectado, por exemplo.
Os programas podem se classificar em Mono-Threading ou Multi-Threading. Um sistema
operacional moderno é por natureza um Multi-Threading, pois aloca frações do tempo do
processador para as inúmeras threads de um mesmo programa que estão sendo
executadas simultaneamente.

4. IMPLEMENTAÇÃO DE THREADS E SOCKETS EM VB.NET


Como foi visto, sockets servem para conectar aplicações, mesmo que estas estejam em um
computador remoto, e que o servidor deve permanecer na escuta de novas conexões dos
clientes para que exista a comunicação. Já as threads servem para executar trechos de
códigos isolados independente do programa principal.
IV SEAC – Semana de Atividades Científicas

Conhecendo estes dois conceitos torna-se claro entender a utilidade da união destas
tecnologias, pois quando uma aplicação servidora estiver escutando determinada porta, ela
tem de ficar sempre atenta a conexões de novos clientes, sendo impedida de realizar
qualquer outra tarefa a não ser que pare de escutar esta porta. Para que a aplicação
servidora possa aceitar novas conexões e tratar cada cliente isoladamente com cada
recurso solicitado por eles, ela precisa fazer uso de threads, iniciando uma nova thread
sempre que um novo cliente se conectar. Esta nova thread ficará encarregada daquele
cliente até que ele se desconecte da aplicação servidora.
Neste artigo fazemos o uso da linguagem de programação VB.NET da Microsoft. Para a
implementação destas duas técnicas utilizamos o conceito de orientação a objetos criando
uma classe SERVIDOR.VB que possui os métodos para criação de sockets e chamadas
para as threads que tratam do processamento com cada cliente de forma isolada.
Os métodos para a implementação de Sockets e Threads estão contidas em duas classes,
são elas, respectivamente, System.Net e System.Threading.
Pode-se visualizar em linhas de códigos os conceitos apresentados a seguir:

No trecho de código acima foi criado o método Escutar que é encarregado de criar o socket
e iniciar sua execução a partir da execução do método “start”. Logo em seguida, a thread
para esperar novos clientes é instanciada.

A thread EsperarCliente é responsável por aceitar novos clientes. Ela instancia uma outra
thread que é a LerSocket.
IV SEAC – Semana de Atividades Científicas

Após ser invocada pelo método EsperarCliente, a thread LerSocket faz a leitura dos dados
que estão sendo “escritos” no socket pelo cliente conectado e retorna estes dados para a
aplicação servidora.

Depois que toda a transação for concluída, a thread LerSocket inicia mais uma outra
thread , a EncerrarThread, que é reponsável por encerrar a comunicação do cliente com a
aplicação servidora.

5. ESTUDO DE CASO
O sistema Desk Sharing consiste em um sistema que segue o paradigma cliente / servidor.
Ele faz o monitoramento de processos e controle remoto de estações. O mesmo visa
auxiliar o professor a ministrar suas aulas em laboratórios de informática.
Esta ferramenta irá permitir que um professor possa visualizar a tela dos computadores
conectados em rede e obter o controle do teclado e mouse de qualquer cliente conectado
ao servidor a qualquer momento. Ele também permite a visualização de processos nas
máquinas dos clientes e a aniquilação dos processos não apropriados tanto manualmente
como automaticamente através de uma lista pré-definida.
IV SEAC – Semana de Atividades Científicas

O Desk Sharing está em fase de desenvolvimento e também fará uso das tecnologias
mencionadas neste artigo. Sua implementação consistirá em uma aplicação servidora que
terá uma thread em loop (laço repetitivo) sempre aguardando novas conexões. A cada
solicitação de um cliente, ele dispara uma nova thread que irá abrir um novo socket para
tratar do cliente que solicita conexão. O mesmo será implementado em VB.NET utilizando
os conceitos de linguagem orientada a objeto.

6. CONCLUSÃO
A utilização de sockets para a criação de sistemas cliente / servidor é uma forma prática de
desenvolvimento, porém sem o uso de threads para a distribuição dos serviços, o sistema
não conseguiria atender a seus clientes simultaneamente, sendo que esta é sua finalidade.
Com isso, podemos concluir que a união dessas threads é crucial em sistemas que seguem
este paradigma.
A utilização do VB.NET proporciona uma grande facilidade, pois a mesma possui em suas
bibliotecas System.Net e System.Threading, métodos que facilitam a implementação dessas
técnicas.

6. REFERÊNCIAS

Macoratti, José Carlos. Usando a comunicação Cliente - Servidor com sockets.


http://www.macoratti.net/vbn_thrd.htm.
Acessado em: 10 de maio de 2006.

Macoratti, José Carlos. Trabalhando com MultiThreads no VB.NET.


http://www.macoratti.net/vbn_thrd.htm.
Acessado em: 10 de maio de 2006.

Theóphilo, Antônio. Theads em JAVA.


http://www.j2eebrasil.com.br/jsp/artigos/artigo.jsp?idArtigo=0008
Acessado em: 11 de maio de 2006.

Franco, Carla; Silva, Daniel. Aplicação de Sockets em Java para Monitoramento de


Processos em Estações de Trabalho. In: Simpósio de Excelência de Gestão Tecnológica.
Rio de Janeiro, 2005. Anais. Resende: AEDB, 2005.

Você também pode gostar