publicvoidsalvarEmArquivoLog(Stringstr)throwsIOException{//CRIA UMA INSTANCIA DE FILE, CONVERTENDO A STRING EM UM CAMINHOFilearquivo=newFile("c:\\log.txt");//AQUI E VERIFICADO SE O ARQUIVO EXISTEif(!arquivo.exists()){//SE O ARQUIVO NAO EXISTE ELE E CRIADOarquivo.createNewFile();}//CONSTROI UM OBJETO FILEWRITER, PASSANDO UM OBJETO FILEFileWriterfw=newFileWriter(arquivo,true);//CRTA UM BUFFER COM CARACTERES DE SAIDABufferedWriterbw=newBufferedWriter(fw);//AQUI OS CARACTERES SAO GRAVADOS NO ARQUIVObw.write(str);//AQUI E PRA SER INSERIDO UMA LINHA SEPARADORA (ESCREVE EM UMA NOVA LINHA)bw.newLine();bw.close();fw.close();}
Vc ta gravando no log o toString() do PrintWriter, que deve ser mais ou menos isso java.io.PrintWriter@xxxxxxx. Acho que fazendo assim resolve pra vc.
if(teclado.hasNextLine()){
String line = teclado.nextLine(); // Pega a linha atual
saida.println(line); // Manda a linha para o console
log.salvarEmArquivoLog(line); // Manda a linha para o arquivo
}
A
andersonrc
lsjunior:
Vc ta gravando no log o toString() do PrintWriter, que deve ser mais ou menos isso java.io.PrintWriter@xxxxxxx. Acho que fazendo assim resolve pra vc.
if(teclado.hasNextLine()){
String line = teclado.nextLine(); // Pega a linha atual
saida.println(line); // Manda a linha para o console
log.salvarEmArquivoLog(line); // Manda a linha para o arquivo
}
Opa lsjunior, obrigado pela ajuda.
Apesar de estar salvando em formato String no arquivo, o estranho é que agora, quando eu digito algo na console do servidor-cliente e cliente-servidor, algumas mensagens não são enviadas e nem todas são salvas no arquivo.
Sem a implementação de arquivo, o sincronismo ocorre, um envia e o outro recebe.
A implementação de arquivos tá interfirindo no sincronismo das mensagens para enviar e receber.
L
lsjunior
Olha, fiz essa classe aqui para testar socket.
packagebr.com.guj.socket;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.io.PrintStream;importjava.net.ServerSocket;importjava.net.Socket;publicclassServerimplementsRunnable{privatestaticfinalStringLOG_FILE="/tmp/socket.txt";privatestaticfinalintPORT=9999;privatebooleanrun=true;privateServerSocketserver;privateOutputStreamoutputStream;privatePrintStreamprintStream;@Overridepublicvoidrun(){try{System.out.println("Criando o socket na porta "+Server.PORT);this.outputStream=newFileOutputStream(Server.LOG_FILE);this.printStream=newPrintStream(this.outputStream);this.server=newServerSocket(Server.PORT);while(this.run){System.out.println("Aguardando uma conexao");Socketsocket=this.server.accept();this.handle(socket);}}catch(IOExceptione){e.printStackTrace();}finally{if(this.printStream!=null){this.printStream.close();}if(this.outputStream!=null){try{this.outputStream.close();}catch(IOExceptione){//}}}try{this.server.close();}catch(IOExceptione){//}}privatevoidhandle(finalSocketsocket)throwsIOException{System.out.println("Conectado de "+socket.getLocalSocketAddress()+":"+socket.getLocalPort());booleanloop=true;byte[]buffer=newbyte[8192];InputStreaminputStream=socket.getInputStream();OutputStreamoutputStream=socket.getOutputStream();do{if((!socket.isClosed())&&(!socket.isInputShutdown())&&(!socket.isOutputShutdown())){intlen=inputStream.read(buffer);if(len>0){StringmsgIn=newString(buffer,0,len).trim();// Pega a mensagemStringmsgOut="Bytes recebidos: "+len+"\n";// Mensagem de retornothis.printStream.println(msgIn);// Grava no logSystem.out.println(msgIn);// Exibe no consoleoutputStream.write(msgOut.getBytes());// Retorna para o cliente a quantidade de bytes// Para fechar o socketif((msgIn.equals("exit"))||(msgIn.equals("stop"))){socket.shutdownInput();socket.shutdownOutput();socket.close();loop=false;if(msgIn.equals("stop")){this.run=false;}}}}else{loop=false;}}while(loop);}publicstaticvoidmain(finalString[]args){Serverserver=newServer();Threadthread=newThread(server);thread.start();}}
packagebr.com.guj.socket;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.io.PrintStream;importjava.net.ServerSocket;importjava.net.Socket;publicclassServerimplementsRunnable{privatestaticfinalStringLOG_FILE="/tmp/socket.txt";privatestaticfinalintPORT=9999;privatebooleanrun=true;privateServerSocketserver;privateOutputStreamoutputStream;privatePrintStreamprintStream;@Overridepublicvoidrun(){try{System.out.println("Criando o socket na porta "+Server.PORT);this.outputStream=newFileOutputStream(Server.LOG_FILE);this.printStream=newPrintStream(this.outputStream);this.server=newServerSocket(Server.PORT);while(this.run){System.out.println("Aguardando uma conexao");Socketsocket=this.server.accept();this.handle(socket);}}catch(IOExceptione){e.printStackTrace();}finally{if(this.printStream!=null){this.printStream.close();}if(this.outputStream!=null){try{this.outputStream.close();}catch(IOExceptione){//}}}try{this.server.close();}catch(IOExceptione){//}}privatevoidhandle(finalSocketsocket)throwsIOException{System.out.println("Conectado de "+socket.getLocalSocketAddress()+":"+socket.getLocalPort());booleanloop=true;byte[]buffer=newbyte[8192];InputStreaminputStream=socket.getInputStream();OutputStreamoutputStream=socket.getOutputStream();do{if((!socket.isClosed())&&(!socket.isInputShutdown())&&(!socket.isOutputShutdown())){intlen=inputStream.read(buffer);if(len>0){StringmsgIn=newString(buffer,0,len).trim();// Pega a mensagemStringmsgOut="Bytes recebidos: "+len+"\n";// Mensagem de retornothis.printStream.println(msgIn);// Grava no logSystem.out.println(msgIn);// Exibe no consoleoutputStream.write(msgOut.getBytes());// Retorna para o cliente a quantidade de bytes// Para fechar o socketif((msgIn.equals("exit"))||(msgIn.equals("stop"))){socket.shutdownInput();socket.shutdownOutput();socket.close();loop=false;if(msgIn.equals("stop")){this.run=false;}}}}else{loop=false;}}while(loop);}publicstaticvoidmain(finalString[]args){Serverserver=newServer();Threadthread=newThread(server);thread.start();}}
lsjunior, a sua primeira resposta já foi o suficiente. Eu apenas tinha me confundido e além da modificação que vc colocou, eu esqueci de comentar uma linha. Aí por isso que tinham mensagens que não estavam sendo enviadas e outras não estavam sendo salvas no arquivo.