Implementar em Java um serviço de páginas texto, onde cada página é um menu com opções entre 1 e 255, exceto páginas "folha", compostas apenas de texto. Cada servidor mantém uma página raiz, único caminho de chegada até as suas demais páginas.
obs: Esse serviço é um pouco parecido ao gopher, existente no início dos anos 90...
Cada grupo deve implementar dois tipos de servidor, um com estado e outro sem, e um cliente para cada um. O servidor com estado mantém uma conexão com um cliente durante toda uma sessão de uso. A cada interação, o cliente só precisa passar ao servidor a opção selecionada dentro da última página enviada pelo servidor. O servidor sem estado fecha a conexão depois do envio de cada página. Nesse caso, o cliente deve sempre especificar a página desejada passando a hierarquia completa de páginas desde a raiz.
Para cada caso, deve ser seguido rigidamente o protocolo de interação especificado abaixo. Os clientes desenvolvidos por cada grupo serão testados com os servidores de outro grupo.
O cliente deve ter uma interface gráfica feita com o Swing, com pelo menos uma TextArea para exibição das paginas, um TextField para a digitação dos comandos e campos TextField para selecionar o IP e a porta do Servidor, quando os dados nao forem passados na linha de comandos. O cliente é disparado através do comando:
java cliente [end.IP] [porta]que deve disparar a apresentação da página raiz do servidor especificado ou de uma mensagem de erro. O programa cliente deve oferecer os seguintes comandos:
Cada pedido do cliente deve conter um único byte, indicando a opção escolhida pelo usuário dentro da última página. As opções podem estar no intervalo [1,254]. Depois de abrir a conexão, o cliente pode enviar ao servidor um byte com valor 0, e o servidor deve retornar a página raiz (apesar de redundante, esse valor serve para simular uma verificação que o cliente é do tipo correto). A partir daí, o cliente pode enviar valores no intervalo [1,254] para selecionar uma opção, o valor 0 para indicar que deseja voltar à página anterior ou o valor 255 para indicar que deseja terminar a conexão.
A resposta do servidor deve conter 2 bytes iniciais contendo o número de bytes que se seguem, e a seguir o stream de caracteres que formam a página solicitada. A requisição de terminação não deve ser respondida.
Caso a opção solicitada pelo cliente seja inválida, o servidor deve retornar o valor 65535 (limitando o número de bytes retornado em uma página válida a 65534) nos dois primeiros bytes. Um valor de 0 nos dois primeiros bytes indica que a página não foi encontrada ou está efetivamente vazia (ambiguidade no protocolo).
Cada pedido do cliente deve conter uma série de bytes, o primeiro deles indicando quantos vêm a seguir. Os bytes seguintes devem ser usados cada um para descrição de uma opção a partir da página raiz. Como exemplo, a mensagem '3 1 4 3' seleciona a terceira opção da página correspondente à quarta opção da página correspondente à primeira opção da página raiz. Uma mensagem contendo um único byte com valor 0 indica que o cliente deseja a página raiz.
A resposta do servidor é como no caso do servidor com estado.
Arquivo Página ( extensão txt )
Arquivo Índice ( extensão htl )
- raiz.txt
- 1 - Univercidades
- 2 - Clubes de Futebol
- raiz.htl
- univercidades raiz
- futebol raiz
- univercidades.txt
- 1 - UniverCidade
- 2 - Estacio de Sa
- 3 - PUC-Rio
- univercidades.htl
- univercidade raiz
- estacio raiz
- puc raiz
- univercidade.txt
- 1 - Ciencia da Computação
- 2 - Tecnologia Informatica
- 3 - Turismo
- univercidade.htl
- ciencia univercidades
- tinfo univercidades
- turismo univercidades
- futebol.txt
- 1 - Flamengo
- 2 - Fluminense
- futebol.htl
- flamengo raiz
- fluminense raiz