[RESOLVIDO] Problema com quebra de linha e transferência de arquivo, FJ-11 Chat Ex. 5

2 respostas
E

Boa noite, lamento que meu primeiro post no fórum já seja uma dúvida, (e se pá uma meio boba até =/ )

Então, estou seguindo a apostila da Caelum, e nos últimos capítulos tem o exercício do Chat.

Eu fiz conforme a apostila( :oops: ) e funcionou mas não entendi porque o server quebra cada palavra em uma nova linha, mesmo que eu envie uma frase inteira.

Outra dúvida é referente à transferencia de um arquivo de texto. Ele até transfere, mas ocorre o mesmo problema da quebra de linha, e no fim ainda ocorre a seguinte excessão:

Exception in thread "main" java.util.NoSuchElementException
	at java.util.Scanner.throwFor(Unknown Source)
	at java.util.Scanner.next(Unknown Source)
	at br.com.caelum.chat.servidor.FileServer.main(FileServer.java:32)

Abaixo segue o código.

Desde já agradeço!

Lado Server
package br.com.caelum.chat.servidor;

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class FileServer {
	public static void main(String[] args) {
		
		try {
			ServerSocket servidor = new ServerSocket(12345);
			Socket cliente = servidor.accept();
			System.out.println("Nova conexão com o cliente : " + cliente.getInetAddress().getHostAddress());
		
			Scanner sc = new Scanner(cliente.getInputStream());
			
			BufferedWriter bw = new BufferedWriter( new OutputStreamWriter(new FileOutputStream("C:/Users/Fausto/Desktop/merda.txt")));
			
			/*
			while (scan.hasNextLine()) {
				bw.write(scan.nextLine());
				bw.newLine();
			} */
			
			while (sc.hasNextLine()) {
				//bw.write(sc.nextLine());
				//bw.newLine();
				System.out.println(sc.next());
			}
			
			sc.close();
			servidor.close();
			cliente.close();
		} catch (IOException e) {
			System.out.println(e.getMessage());
			e.printStackTrace();
		}
		System.out.println("Porta Aberta!");
	}
}
Lado Cliente
package br.com.caelum.chat.cliente;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class FileClient {
	public static void main(String[] args) {
		try {
			Socket cliente = new Socket("127.0.0.1", 12345);
			System.out.println("Conectado!");
			
			Scanner teclado = new Scanner(new FileInputStream("src/br/com/caelum/chat/cliente/arquivo.txt"));
			PrintStream saida = new PrintStream(cliente.getOutputStream());
			
			while (teclado.hasNextLine()){
				saida.println(teclado.next());
			}
			
			saida.close();
			teclado.close();
			cliente.close();
			
		} catch (UnknownHostException e) {
			System.out.println(e.getMessage());
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println(e.getMessage());
			e.printStackTrace();
		}
		
	}
}

2 Respostas

mauricioadl

o server quebra cada palavra em linha porque no seu cliente vc faz isso.

while (teclado.hasNextLine()){ saida.println(teclado.next()); }

o comando teclado.next() traz palavra por palavra e vc usa o comando saida.println() para envia-la o println sempre pula uma linha no final.

//--------------------------------
ja a sua exception acontece nesse codigo

while (sc.hasNextLine()) { //bw.write(sc.nextLine()); //bw.newLine(); System.out.println(sc.next()); }

vc usou bw.write(sc.nextLine()) que imprime e passa para nova linha, quando for a ultima linha ira gerar erro, prq ela acabou e vc tenta imprimir com System.out.println(sc.next());

[]'s

E

Obrigado Mauricio pela atenção,

porém, o erro foi falta de atenção minha, eu coloquei “next” quando na verdade deveria ser “nextline” hehehehee :oops:

Mesmo assim, agradeço sua ajuda.

Criado 27 de março de 2012
Ultima resposta 28 de mar. de 2012
Respostas 2
Participantes 2