Git Product home page Git Product logo

psta's Introduction

Protocolo Simples para Transferência de Arquivos

Desenvolvimento do Projeto

Projeto desenvolvido por:

Para a disciplina de Redes de Computadores A - Prof. Edmar Rezende

Descrição do Projeto

O objetivo deste projeto é implementar um cliente e um servidor para um Protocolo Simples para Transferência de Arquivos (PSTA). O Cliente fornece uma interface na forma de linha de comandos que permite ao usuário:

  • Conectar-se a um servidor;

  • Listar os arquivos localizados no diretório corrente do servidor;

  • Receber um arquivo do servidor;

  • Enviar um arquivo para o servidor;

  • Encerrar a conexão com o servidor.

O servidor espera por conexões de clientes em uma porta conhecida. Após um cliente conectar-se ao servidor, o servidor espera por comandos. Quando o cliente enviar uma mensagem de encerramento de conexão, o servidor terminará a conexão. O servidor descrito trata-se de um servidor concorrente, ou seja, ele é capaz de atender a diversos clientes simultaneamente. O projeto consiste na implementação de dois programas independentes em C que executem em sistemas operacionais Linux, um cliente chamado cliente_psta e um servidor chamado servidor_psta. Ao ser executado o programa cliente exibe um prompt, que permite ao usuário digitar os seguintes comandos:

  • conectar <nome do servidor> [<porta do servidor>]

  • listar

  • receber <arquivo remoto> [<arquivo local>]

  • enviar <arquivo local> [<arquivo remoto>]

  • encerrar

Todos os comandos digitados pelo usuário serão sequências de caracteres ASCII. Os comandos enviados pelo cliente ao servidor também devem estar na forma de sequências de caracteres ASCII. Ao receber um comando, o servidor deve analisá-lo e executar a ação apropriada, conforme descrito a seguir:

conectar <nome do servidor> [<porta do servidor>]

  • Este comando permite ao cliente conectar-se a um servidor. O nome do servidor poderá ser dado na forma literal (p.ex. maquina1.puc-campinas.edu.br) ou na forma de um endereço IP em notação decimal pontuada (p. ex. 200.136.254.139). Ao receber este comando, o cliente deve iniciar uma conexão com o servidor.

listar

  • Quando este comando for enviado ao servidor, este retornará a lista de arquivos no diretório onde ele está sendo executado. A lista será enviada como uma sequência de caracteres ASCII terminada por um delimitador de linha (\n). O cliente deverá receber a lista e exibi-la na tela. Dica: veja as páginas do manual para getcwd, opendir, readdir, closedir

receber <arquivo remoto> [<arquivo local>]

  • Permite ao cliente solicitar ao servidor o arquivo de nome <arquivo remoto>. Este arquivo deverá ser sempre tratado como um arquivo binário. Ao receber o arquivo especificado o cliente deverá salvá-lo no diretório onde está executando com o nome <arquivo local> ou, caso este nome não tenha sido especificado, com o nome <arquivo remoto>.

enviar <arquivo local> [<arquivo remoto>]

  • Este comando é simétrico ao comando receber. Ele permite o envio de um arquivo local ao cliente para o diretório de trabalho do servidor.

encerrar

  • Ao receber este comando, o cliente deverá enviá-lo para o servidor e terminar a conexão. Quando o servidor receber este comando ele deverá fechar o seu lado da conexão.

Para implementar a comunicação entre o cliente e o servidor use dois soquetes TCP: um de controle e outro de dados. O soquete de controle será usado para o envio de mensagens de controle (comandos enviados pelo cliente). O soquete de dados será usado para o envio e recepção de mensagens de dados. Neste esquema, o programa servidor_psta age como servidor na porta de controle e o programa cliente_psta age como servidor na porta de dados. A conexão de dados é estabelecida e desfeita para cada comando

psta's People

Contributors

iaglourenco avatar adrianomunin avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.