Cliente x servidor, problema para imprimir

1 resposta
J

Boa tarde pessoal,

fiz um programa, cliente servidor, que lista, edita, busca, elementos num arquivo, tá tudo funcionando, exceto quando mando listar ou buscar um elemento (não está imprimindo para o usuário).

vamos por partes :)

código do cliente:
import java.io.*;
import java.net.*;
import java.util.*;

public class Cliente {
	
	
	//porta onde será feita a conexão	
    public final static int DEFAULT_PORT = 4444;		
	
    public static void main(String[] args) throws IOException,InterruptedException {
	    
	    
	    
	 	
	//aviso ao usuario, faz parte da interface com o usuario
	System.out.println();
	System.out.println();
	System.out.println();
	System.out.println();
	System.out.println("         *************   Atencao   ************* ");
	System.out.println("   Caso o titulo, compositor ou artista do registro que voce ira inserir ");
	System.out.println("   seja composto por duas palavras");
	System.out.println("   inserir palavra1-palavra2 ao inves de palavra1 palavra2 ");
	System.out.println("   Pedimos tambem que utilize letras Maisculas para editar e inserir registros");
	System.out.println("   Aguarde que o programa continuara automaticamente ");
	System.out.println("   Agradecemos sua compreensao");
	System.out.println("   (estamos executando um Thread.sleep)");
	System.out.println("   Esse programa esta sendo executado cliente/servidor"); 
	System.out.println();
	System.out.println();		
	//demos um Thread Sleep para que o usuario possa ler a mensagem envianda pelo cliente
	Thread.sleep(17800);
	System.out.println();
	System.out.println();
	System.out.println();

	    //inicia as variáveis
        Socket kkSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;
	
	//cria a variável que vai armazenar o nome do host 
	String hostname;
        int port = DEFAULT_PORT;
	
	//recebe do usuario o nome do host, provavelmente hocalhost
	if (args.length > 0) {
               hostname = args[0];
        }  else  hostname = "aeronauticasc.eng.br"; 
         
	
	
	//recebe a possível porta, 4444 como default
        if (args.length > 1) {
        try {port = Integer.parseInt(args[1]);}
        //trata o erro do formato do numero
	catch (NumberFormatException e) {}
        }
	

        try {
            kkSocket = new Socket(hostname, port); // cria socket para conexão
            out = new PrintWriter(kkSocket.getOutputStream(), true);//vai gerar dados de saida para o cliente
            in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream()));//vai receber dados do cliente
        
	} catch (UnknownHostException e) {//vai tratar o erro de HostException desconhecido
            System.err.println("hostname desconhecido: "+ hostname);//imprime mensagem para o usuario dizendo que o hostname não é conhecido
            System.exit(1);//termina o programa cliente
        } catch (IOException e) {//trata o erro de conexao (porta), default do programa 4444
            System.err.println("Erro de conexao na porta: "+port+" no host: "+hostname);
            System.exit(1);//termina o programa cliente
        }

        //criou o BufferedReader stdIn que vai ler dados do teclado (do usuario)
	BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
        Scanner leitura = new Scanner( System.in );
	String fromServer;
        String fromUser="teste";
	int controlador;
	//menu para o usuario escolher sua opcao, por facilidade (dica do professor =)
	//optamos por colocar o menu no cliente
	do{
	System.out.println("");
	System.out.println("");
	System.out.println("Escolha sua opcao: "); 
	System.out.println("1 - para Listar os Elementos"); 
	System.out.println("2 - para Inserir um Elemento"); 
	System.out.println("3 - para Editar um Elemento");
	System.out.println("4 - para Recuperar informacoes sobre um Elemento");
	System.out.println("5 - para Reestruturar o arquivo Dados.txt");
	System.out.println("0 - para terminar");
	System.out.println("");
	System.out.println("");
	controlador = leitura.nextInt();
	//fromUser = stdIn.readLine();
	//System.out.println(fromUser);
	//out.println(fromUser);	
	
	
	switch(controlador){
		
	case 1: 
		String enviar = "1"+'$'+"soum";
		out.println(enviar);
		break;
	case 2:
		System.out.print("Digite a Label: ");
		String leitura0 = stdIn.readLine();
		System.out.print("Digite a ID: ");
		String leitura1 = stdIn.readLine();
		System.out.print("Digite o Titulo: ");
		String leitura2 =stdIn.readLine();
		System.out.print("Digite o Compositor: ");
		String leitura3 =stdIn.readLine();
		System.out.print("Digite o Artista: ");
		String leitura4 = stdIn.readLine();
	
		//concatena essas strings para adicionar no arquivo
		String leit = "2"+'$'+leitura0+'$'+leitura1+'$'+leitura2+'$'+leitura3+'$'+leitura4;
		out.println(leit);		
		break;
	case 3:
		System.out.println("teste3");
		System.out.print("Digite a chave a ser editada: ");
		String chaveedita = stdIn.readLine();
		System.out.print("Digite a nova Label: ");
		String leitura5 = stdIn.readLine();
		System.out.print("Digite a nova ID: ");
		String leitura6 = stdIn.readLine();
		System.out.print("Digite o novo Titulo: ");
		String leitura7 =stdIn.readLine();
		System.out.print("Digite o novo Compositor: ");
		String leitura8 =stdIn.readLine();
		System.out.print("Digite o novo Artista: ");
		String leitura9 = stdIn.readLine();
		
		//concatena essas strings para adicionar no arquivo
		String nova = "3"+'$'+ chaveedita+ '$' + leitura5+'$'+leitura6+'$'+leitura7+'$'+leitura8+'$'+leitura9;
		out.println(nova);
		break;
	case 4: 
		System.out.print("Digite a chave a ser procurada: ");
		String chave = stdIn.readLine();
		
		//string para ser enviada
		String envia = "4"+'$'+ chave;
		System.out.println(envia);
		out.println(envia);
		break;
	case 5: 
		String envia2 = "5"+'$'+"socinco";
		out.println(envia2);
		break;	
	default:
		System.out.println("Voce nao digitou um valor valido do menu");
		System.out.println("por favor digite um valor valido");
		
	case 0:
		System.out.println("Encerrando programa, tchau =)");
		String manda = "0";
		out.println(manda);
	}
		
	}while(controlador != 0);
	
        
        out.close();
        in.close();
        stdIn.close();
        kkSocket.close();
    }

 }
código do servidor
import java.net.*;
import java.io.*;

public class Servidor {
	
    public final static int DEFAULT_PORT = 4444;	
	
    public static void main(String[] args) throws IOException {

        ServerSocket serverSocket = null;
	
        int port = DEFAULT_PORT;
	

        if (args.length > 0) {
        try {port = Integer.parseInt(args[0]);}
        catch (NumberFormatException e) {}
        }
	
	
	
        try {
            // cria o socket. o SO tenta neste momento fazer um BIND deste socket
            // na porta solicitada. Se tiver problema, lanca excecao...
            serverSocket = new ServerSocket(port);
        } catch (IOException e) {
            System.err.println("Erro: nao aloquei socket na porta: "+ port);
            System.exit(1);
        }

        Socket clientSocket = null;
        try {
	    // fica esperando que o cliente entre em contato (solicite o servico na
            // na porta designada) Dizemos que o servico está escutando...
	    // PRIMITIVA BLOQUEANTE !!!!!!!!!!!!!!!!!!!!!!
            clientSocket = serverSocket.accept();
	    // passando por aqui, um novo socket cliente é criado. Ele contem 
            // o IP e a porta do CLIENTE e tb eh associado (BOUND) a porta local do
            // servico
            // AQUI TEMOS UM PRINCIPIO INTERESSANTISSIMO: o socket cliente
            // eh usado para comunicar com um cliente e o socker servidor fica
            // escutando outras solicitacoes.. este programa so aceita uma requisicao
        } catch (IOException e) {
            System.err.println("Accept failed.");
            System.exit(1);
        }

	//cria um objeto checa da Classe Checa
	Checa checa = new Checa();
	
	//chama o metodo analisa da classe Checa
	checa.analisa();
			
	//cria um objeto tt da classe indice
	Indice tt = new Indice();
			
	//chama o metodo comeca da classe Indice
	tt.comeca();
	
	// cria um write para escrever (mandar informacoes) para o cliente
        PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
	// cria um reader para ler (receber informacoes) o que chega do cliente
        BufferedReader in = new BufferedReader(
				new InputStreamReader(
				clientSocket.getInputStream()));
        String inputLine, outputLine;

        outputLine = "teste";
	inputLine = "teste";

	
	while((inputLine = in.readLine()) != null)
	{
            
	     String string[] = inputLine.split("\$");
             int teste = Integer.parseInt(string[0]);
	     
	     //switch(teste)
	     //{
		     
	     //case 1:
	    if(teste==1)
	    {
		     tt.novolista(out);
		     out.println("-----");
		     
	    }    
	     //case 2:
	   if(teste==2)
	   {
		     tt.inserir(string[1], string[2], string[3], string[4], string[5], out);
		     out.println("-----");
     	   } 
	  //case 3:
	  if(teste==3)
	  {
		  tt.edita(string[1], string[2], string[3], string[4], string[5], string[6], out);
		  out.println("-----");
	  }
	  
	  //case 4:
	 if(teste==4)
	 {
		     tt.novabusca(string[1], out);
		     out.println("-----");
	}	     
	 //case 5:
	if(teste==5)
	{
		   tt.reestrutura(out);  
		   out.println("-----");
	}
	    	   
	     
     }
		
	//metodo encerra da classe Indice
	tt.encerra();
	tt.removevector();
	tt.removearquivo();
	
	out.close();
        in.close();
        clientSocket.close();
        serverSocket.close();
    }
}

se você perceber, no método por exemplo novolista da classe Indice, tt.novolista(out), estou passando o stream de saída, e lá no método onde imprimi, os elementos eu coloco out.println(elemento);

porém não está imprimindo para o usuário, todo o resto está funcionando perfeito, alguém poderia dar uma força?

em anexo está todo o trabalho,
e coisa boba, só estou cansado de tanto olhar e não achar o problema, se alguém tiver paciência e se habilitar, fico muito grato
meu email: [email removido]

abraços,
Jhonata

1 Resposta

J

resolvido,
valeus a todos,

abraços

Criado 7 de julho de 2007
Ultima resposta 7 de jul. de 2007
Respostas 1
Participantes 1