Servidor web

4 respostas
E

bem pessoal, estou fazendo um codigo de um servidor web no qual um cliente atraves de qualquer browser acesse o servidor pelo ip e pela porta determinada pelo socket, de maneira que ele possa solicitar algum arquivo. ex: cliente digita no browser http://10.13.0.116:7000/teste.txt onde meu codigo do servidor teria que mandar o arquivo teste.txt. Já consegui separar esse teste.txt numa string, o que falta agora é saber como enviar o arquivo solicitado para o cliente, agradeceria bastante se alguem pudesse me ajudar com isso

4 Respostas

thokk

Ja tentou no modulo ftp, Onde periodicamente enviam cópias de arquivos.

E

mas eu preciso enviar no modo TCP, esse eh o problema.

thokk

Escolher rotas apenas com base no id da rede de destino traz graves consequencias. O primeiro estante temos que implementar.

Algoritmo (Uma ideia)

RouteDtagram(Datagram, RoutingTable)

Extrai o endereço IP de destino, D, do datagrama,

e calcule o prefixo da rede, N;
Se N corresponde com qualquer endereço de rede conectado diretamente entregue datagrama ao destino D através desta rede (Isto envolve converter D para um endereço físico encapsular o datagrama e enviar o quadro.)

se a tabela contiver uma rota especifica do host para D envie o datagrama para o proximo passo da rota especificada na tabela

se a tabela contiver uma rota para a rede N envie o datagrama para o proximo passo especificado na tabela

se a tabela contiver uma rota padrão envie o datagrama para o roteador padrão especificado na tabela

senão caso contrario declare um erro de roteamento;
E

bem, consegui resolver esse problema com DataOutputStream, o servidor está funcionando blzza, porem ele precisa ser multithread e como está rodando funciona monothread, alguem tem dicas de como adaptar isso? colarei o codigo abaixo

import <a href="http://java.io">java.io</a>.<em>;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.</em>;

public class Servidor {

public static void main(String[] args) {
     
	 String mensagem=null;
	 String filename=null;
	 
     //Declaro o ServerSocket
     ServerSocket serv=null; 
     
     //Declaro o Socket de comunicação
     Socket s= null;
     
     //Declaro o leitor para a entrada de dados
     BufferedReader entrada=null;
     while(true){
     
     try{
         
         //Cria o ServerSocket na porta 7000 se estiver disponível
         serv = new ServerSocket(7000);
     
         //Aguarda uma conexão na porta especificada e cria retorna o socket que irá comunicar com o cliente
         s = serv.accept();
         
         //Cria um BufferedReader para o canal da stream de entrada de dados do socket s
         entrada = new BufferedReader(new InputStreamReader(s.getInputStream()));
         
         //Lê a primeira linha da mensagem de requisição HTTP
         mensagem = entrada.readLine();
         
         StringTokenizer tokenizedline = new StringTokenizer(mensagem);
         if(tokenizedline.nextToken().equals("GET")){
        	 filename = tokenizedline.nextToken();
        	 if(filename.startsWith("/") == true)
        		 filename = filename.substring(1);
        	 File file = new File(filename);
        	 int numofbytes = (int) file.length();
        	 FileInputStream inFile = new FileInputStream(filename);
        	 byte[] fileinbytes = new byte[numofbytes];
        	 inFile.read(fileinbytes);
        	 DataOutputStream dataout = new DataOutputStream(s.getOutputStream());
        	 dataout.writeBytes("HTTP/1.0 200 Document Follows\r\n");
        	 if (filename.endsWith(".jpg"))
        		 dataout.writeBytes("Content-Type: image/jpeg\r\n");
        	 if (filename.endsWith(".gif"))
        		 dataout.writeBytes("Content-Type: image/gif\r\n");
        	 if (filename.endsWith(".txt"))
        		 dataout.writeBytes("Content-Type: text/plain\r\n");
        	 if (filename.endsWith(".exe"))
        		 dataout.writeBytes("Content-Type: application/octet-stream\r\n");
        	 if (filename.endsWith(".pdf"))
        		 dataout.writeBytes("Content-Type: application/pdf\r\n");
        	 dataout.writeBytes("Content-Length: " + numofbytes + "\r\n");
        	 dataout.writeBytes("\r\n");
        	 dataout.write(fileinbytes, 0, numofbytes);
         
         }
         else
        	 System.out.println("Bad Request Message");
         
                      
         
     //trata possíveis excessões de input/output. Note que as excessões são as mesmas utilizadas para as classes de java.io    
     }catch(IOException e){
     
         //Imprime uma notificação na saída padrão caso haja algo errado.
         System.out.println("Algum problema ocorreu para criar ou receber o socket.");
         
                  
     }finally{
         
         try{
             
             //Encerro o socket de comunicação
             s.close();
             
             //Encerro o ServerSocket
             serv.close();
             
         }catch(IOException e){
         }
     }
 
     }
     
     
     
 }

}

Criado 19 de outubro de 2006
Ultima resposta 19 de out. de 2006
Respostas 4
Participantes 2