Clique aqui para ler esse artigo em PDF.
Clique aqui para ler todos os artigos desta edição
Conectividade
Desenvolvendo um Cliente FTP
Este artigo discute |
Este artigo usa as seguintes tecnologias |
·Protocolo de Transferência de Arquivos (FTP); ·Arquitetura em camadas; ·Aplicação FTP client. |
Visual Studio 2005, Visual Basic .NET, Windows Forms e .NET Framework 2.0 |
O proprietário de uma pequena loja de discos especializada
De imediato pensei o quão eloquente seria concorrer com os grandes sites de comércio eletrônico. Depois percebi que estaríamos lidando com um público especializado composto de colecionadores e aficionados, ou seja, uma tribo fiel. O meu “cliente”, o proprietário da lojinha, colocou ainda duas premissas que deveriam ser consideradas no projeto do site:
·A administração do site deverá ser de operação muito simples e a mais automática possível, sabendo-se que o usuário do sistema será um especialista em “raridades” e não em tecnologia;
·“Não tenho como te pagar em dinheiro e nem ao menos posso gastar muito para manter o site funcionando”. Essa premissa deverá nortear muitas das decisões a serem adotadas durante o desenvolvimento.
A lojinha de discos já utilizava um antigo sistema desktop para controlar o caixa e o estoque dos produtos comercializados. O projeto do site deveria prever a integração com o sistema legado (reescrever o sistema, oneraria o custo do projeto de forma proibitiva). Um dos problemas a enfrentar seria a atualização periódica do catálogo de produtos a venda.
Optou-se então por desenvolver uma aplicação Windows para extrair os dados do sistema legado, gerar e transferir arquivos via FTP para o servidor onde o site estivesse hospedado. Um Web Service poderia ser uma alternativa mais elegante e moderna para essa transferência de dados, mas, muitos estudos apontam para uma significativa perda de performance dos Web Services quando lidamos com grandes volumes de dados.
Projetar sistemas de computador é, na maior parte do tempo, decidir qual a solução mais adequada para resolver determinado problema ou necessidade que o sistema em construção deverá satisfazer. A solução deverá estar absolutamente alinhada aos requisitos do sistema. O problema é que muitas vezes subestimamos os requisitos não funcionais, que envolvem elementos como performance, custo e facilidade de operação.
Neste artigo discutiremos a criação de um software cliente de um servidor FTP (File Transfer Protocolo), onde utilizaremos algumas das muitas facilidades disponíveis no .NET 2.0. Nosso pequeno projeto de software estará organizado em duas camadas: uma biblioteca de classe com as funcionalidades do cliente FTP, representando a camada de dados e um sistema aplicativo para teste da biblioteca, responsável pela interface com o usuário, representando a camada de apresentação.
O Protocolo de Transferência de Arquivos (FTP)
FTP é o acrônimo de File Transfer Protocol (Protocolo de Transferência de Arquivos), um protocolo de comunicação especificado para atuar em ambientes distribuídos (arquitetura cliente/servidor), objetivando o compartilhamento de arquivos de dados entre usuários de ambientes híbridos.
O mecanismo do FTP teve sua primeira proposta impetrada em 1971, passou por várias melhorias e correções ao longo dos anos, até a publicação da versão atual em outubro/1985 na RFC959 (veja link nas referências bibliográficas).
O protocolo tem como principais objetivos:
1.A promoção do compartilhamento de arquivos;
2.O encorajamento indireta e implicitamente à utilização de computadores remotos;
3.A proteção dos usuários das variações entre os sistemas de armazenamento de arquivos;
4.A transferência confiável e eficiente de dados.
A Figura 1 apresenta o modelo de transações do FTP.
Figura 1. Modelo de transações do FTP
O cliente inicializa uma sessão com o servidor FTP solicitando uma conexão TCP na porta
O interpretador do protocolo do cliente envia comandos FTP padrões ao servidor e aguarda o retorno de respostas, compostas de um código e um texto explicativo. O código é direcionado para uso por sistema de computador, enquanto que o texto está direcionado ao usuário final que pode estar utilizando o protocolo diretamente através de um software emulador de terminal (Telnet, por exemplo).
Dessa forma, podemos observar que o controle de transações do FTP está baseado na troca de comandos e respostas entre o lado cliente e o servidor remoto. Os comandos FTP são geralmente compostos de quatro caracteres, um espaço em branco, um argumento opcional e um código de fim de linha (CRLF).
A transferência de dados entre a estação cliente e o servidor FTP, necessário em vários procedimentos, como, por exemplo, o upload e download de arquivos, requerem a alocação de uma segunda porta de comunicação que será utilizada na troca de dados. Essa comunicação é conhecida como “Canal de Dados”.
A Tabela 1 apresenta a relação dos principais comandos FTP especificados na RFC959. Alguns fabricantes de servidores FTP implementam um conjunto adicional de comandos, agregando novas funcionalidades que, apesar de vantajosas, não são padrões e, portanto, podem não ser tratadas por todos os utilitários.
Comando FTP |
Descrição |
USER |
Identificação do código de usuário para logon no servidor. |
PASS |
Senha de acesso do usuário para logon no servidor. Deve ser usado logo após o comando USER quando o código de usuário requerer. |
QUIT |
Encerra a sessão FTP em uso, desconectando o usuário. |
SYST |
Retorna o tipo do sistema operacional do servidor remoto. |
HELP |
Ajuda a respeito dos comandos FTP do servidor remoto. |
NOOP |
Faz com que o servidor responda com a mensagem 200 (Command okay). Esse comando não afeta nenhum parâmetro ou comando anterior. É utilizado apenas para evitar que a sessão seja encerrada pelo servidor remoto por expiração de tempo sem comunicação (time out). |
PWD |
Retorna o nome do diretório corrente do servidor remoto. |
CWD |
Troca o diretório corrente do servidor remoto. |
RMD |
Remove um diretório ou subdiretório do servidor remoto. |
MKD |
Cria um diretório ou subdiretório no servidor remoto. |
DELE |
Exclui um arquivo do servidor remoto. |
TYPE |
Especifica o tipo de dado que deverá ser utilizado em uma sessão de transferência e armazenamento de dados. |
PASV |
Configura o FTP passivo, requerendo que o processo de transferência de dados do servidor (server DTP) aguarde uma conexão de dados a partir de uma porta TCP específica. O servidor responderá ao comando informando o IP e a porta da conexão de dados. |
RETR |
Faz com que o servidor envie para a estação cliente a cópia de um arquivo, especificado no argumento do comando, através de uma conexão de dados associada (download). |
STOR |
Faz com que o servidor aceite a recepção de dados a partir de uma conexão de dados associada e armazenando-os em um arquivo especificado no argumento do comando (upload" |