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();
}
}
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