Tranferir um FileInputStream em um socket

1 resposta
P

Prezados colegas,

tenho um classe servidora que tenta receber os bytes da classe cliente abaixo, mas o código não funciona, pediria sugestões a quem já conseguiu chegar a uma solução.

public class Cliente {

public static void main(String[] args) throws IOException {
	InetAddress addr = InetAddress.getByName(null);
	System.out.println("addr = " + addr);
	Socket socket = new Socket("127.0.0.1", 8080);
	try{
		System.out.println("socket = " + socket);
		ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
		ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
					
		File arquivo = new File("origem/remedios.mdb");			
		FileInputStream streamArquivo = new FileInputStream(arquivo.getCanonicalFile());
					
		while(streamArquivo.read()!=-1){				
			out.write((byte)streamArquivo.read());											
		}
		
		System.out.println("Concluído!");
		in.close();
		out.close();			
	}
	finally{
		System.out.println("closing...");
		socket.close();
	}
}

}

1 Resposta

F

a classe ObjectOutputStream server para envir classes, para mandar caracteres use a classe DataOutputStream, BufferedWriter ou PrintWriter, ex:

public class Cliente {

public static void main(String[] args) throws IOException {
InetAddress addr = InetAddress.getByName(null);
System.out.println("addr = " + addr);
Socket socket = new Socket("127.0.0.1", 8080);
try{
System.out.println("socket = " + socket);
PrintWriter out = new PrintWriter(new OutputWriter(socket.getOutputStream()));
out.flush();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

File arquivo = new File("origem/remedios.mdb");
FileInputStream streamArquivo = new FileInputStream(arquivo.getCanonicalFile());

while(streamArquivo.read()!=-1){
out.print((byte)streamArquivo.read());
}
out.flush();

System.out.println("Concluído!");
in.close();
out.close();
}
finally{
System.out.println("closing...");
socket.close();
}
}
}

OBS1: eu aconselho sempre por primeiro a saida (no caso o PrintWriter), pq se tanto o cliente como o servidor porem primeiro a entrada, um vai ficar esperando o outro mandar a saida para entaum proceguir, o q vai fazer com q a conexao espire…
OBS2: n esqueca de usar o out.flush(), principalmente qndo for criar a saida, caso contrario corre o risco de ocorrer o mesmo erro citado na OBS1
OBS3: n esqueca de alterar o servidor para receber os dados com a classe BufferedReader

Criado 8 de julho de 2004
Ultima resposta 11 de ago. de 2004
Respostas 1
Participantes 2