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
Servidor web
E
4 Respostas
Ja tentou no modulo ftp, Onde periodicamente enviam cópias de arquivos.
E
mas eu preciso enviar no modo TCP, esse eh o problema.
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
Alura O que é Python? — um guia completo para iniciar nessa linguagem de programação Acesse agora o guia sobre Python e inicie sua jornada nessa linguagem de programação: o que é e para que serve, sua sintaxe e como iniciar nela!
Casa do Codigo Engenharia de Prompt para Devs: Um guia para aprender a... Por Ricardo Pupo Larguesa — Casa do Codigo