# Introdução às Redes de Computadores/Transferência de arquivos
## RFC
### Resumo

O projeto consiste de um cliente FTP que se conecta a um servidor FTP qualquer caracterizado pelo seu host e porta com seu usuário e senha cadastrados no servidor ou como usuário anônimo, caso o servidor permita esse tipo de acesso.
O usuário pode fazer upload de arquivos quaisquer para o servidor, bastando apenas indicar uma pasta disponível no servidor onde ele tenha acesso à escrita de arquivos. O projeto também prevê que ao conectar ao servidor o mesmo retorna uma pasta disponível para o usuário no campo correspondente, que pode ser alterado pelo usuário de acordo com a pasta desejada.
Ao usuário cabe apenas selecionar o tipo de arquivo à fazer upload de forma à melhorar o desempenho na transferência e evitar que arquivo se corrompa. Os tipos possíveis são ASCII para arquivos de texto neste formato e binário para arquivos em geral.
Também é exibido ao usuário um log de suas operações, numa interface basta amigável e intuitiva.
O projeto foi implementado utilizando a IDE NetBeans versão 6.0.1 e a versão 1.6.0_7 da JRE.
Abaixo podemos ver a tela que o usuário visualizará ao inicializar o programa ClienteFTP. E aqui podemos visualizar uma printscreen que demonstra o funcionamento do programa num servidor FTP local.
Ficheiro:Clienteftp.jpg

### Definições

Listamos aqui alguns termos e definições que seriam necessários para um usuário qualquer entender nosso programa e poder utilizá-lo, independente de seu nível de conhecimento do assunto:
Host/IP: identificação de uma rede ou de uma máquina conectada a uma rede. No nosso projeto é necessário indicá-lo para se conectar ao servidor FTP desejado.
Porta: geralmente 21 para conexões FTP.
Usuário: nome de usuário fornecido pelo servidor FTP para conexão com o mesmo.
Senha: senha correspondente a um determinado usuário para acesso a alguma aplicação. No projeto é a senha fornecida pelo servidor FTP para conexão com o mesmo.
Arquivo ASCII: arquivos geralmente com extensão .txt que usam codificação padrão ASCII.
Arquivo binário: arquivos em geral (músicas, imagens, vídeos, etc) que usam codificação binária.
Upload: transferência de dados de uma máquina local para um servidor.
Log: histórico de operações realizadas.
FTP: file transfer protocol (protocolo de transferência de arquivos).
Servidor: uma máquina, conjunto de máquinas ou mesmo um software que fornece qualquer tipo de serviço a um determinado cliente ou conjunto de clientes.
Cliente: uma máquina, conjunto de máquinas, ou mesmo um software que usufrui de qualquer tipo de serviço fornecido por um servidor.

### Falhas e problemas de segurança atuais

Como não há qualquer tipo de criptografia, a segurança da conexão estabelecida com o servidor FTP é mínima.
Entre alguns bugs que podemos notar está um que encontramos no método retornaDir da classe ClienteFTP, que não está retornando um diretório do servidor FTP para que o usuário possa fazer upload. Fizemos testes com alguns servidores externos e não funcionou. Funcionou apenas com um servidor FTP local que montamos para teste. Ainda não tivemos tempo de investigar a fundo essa situação.

### Melhorias futuras

Entre as melhorias futuras possíveis, destacamos a implementação de um cliente FTP completo, onde seria possível visualizar arquivos, pastas e subpastas contidos no servidor FTP, e fazer download dos mesmos.
Devido as circunstâncias e à complexidade do mesmo, não nos foi possível implementar esse tipo de cliente FTP que desejaríamos. Mas fica aqui registrado a nossa intenção de faze-lo e com isso aprender mais a respeito tanto do protocolo FTP de transferência de dados quanto das opções (classes) que a linguagem Java nos oferece para implementação do mesmo.