Responder ao socket cliente com stream de dados

2 respostas
faeldix

Pessoal o meu software basicamente faz o seguinte…
O cliente envia um arquivo doc para o servidor…

No servidor ele faz uma conversão de doc para pdf… e esse pdf… é pra enviar para o cliente novamente.
Esta tudo funcionando perfeitamente até a parte que preciso “responder” com o arquivo em .pdf

meio que nao existe um metodo do socket cliente do tipo:

cliente.waitingForResponse();

onde ele estaria esperando alguma resposta do servidor…
Alguem poderia me ajudar? grato

2 Respostas

romarcio

Mas no seu servidor você vai ter um stream para enviar a resposta ao cliente.

O cliente não precisa ter esse método que você citou, basta após o seu servidor fazer a conversão do arquivo para PDF, pegar o stream de saída do cliente da thread do cliente que enviou o arquivo e usar o stream de saída para enviar de volta ao cliente.

Você já não fez, por exemplo, um chat com socket? No chat o servidor recebe a mensagem e já distribui ela para todos os clientes, você vai fazer algo parecido, só que ao invés de enviar a mensagem para todos clientes registrados no socket, envia apenas para o “dono” do arquivo.

faeldix

olha como eu to fazendo:

package br.com.ceuma.client;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {
	
	public static void main(String[] args) throws InterruptedException {
		
		Socket cliente = null;
		
		try {
			
			cliente = new Socket("127.0.0.1", 5000);
			FileInputStream input = new FileInputStream("docs/atual.doc");
			
			OutputStream out = cliente.getOutputStream();
			BufferedInputStream stream = new BufferedInputStream(input);
			
			byte[] buffer = new byte[1024];
			int length = 0;
			
			while((length = stream.read(buffer, 0, 1024)) != -1) {
				out.write(buffer, 0, length);
			}
			
			out.flush();
			
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		/** try {
			InputStream in = cliente.getInputStream();
			BufferedInputStream stream = new BufferedInputStream(in);
			
			FileOutputStream out = new FileOutputStream("pdfs/final.pdf");
			
			byte[] buffer = new byte[1024];
			int length = 0;
			
			while((length = stream.read(buffer, 0, 1024)) != -1) {
				out.write(buffer, 0, length);
			}
			
			out.flush();
			
		} catch (IOException e) {
			e.printStackTrace();
		}**/
		
	}

}
package br.com.ceuma.servidor;

import java.net.ServerSocket;
import java.net.Socket;

public class Servidor {

	public static void main(String[] args) {

		ServerSocket server = null;

		try {

			server = new ServerSocket(5000);

			while (true) {
				Socket cliente = server.accept();
				Thread thread = new Thread(new Requisitor(cliente));
				thread.start();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

// soffice -headless -nofirstwizard -accept="socket,host=localhost,port=8100;urp;StarOffice.Service"
package br.com.ceuma.servidor;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

import br.com.ceuma.conversor.Conversor;

public class Requisitor implements Runnable {

	private Socket cliente;
	private FileInputStream doc;
	
	public Requisitor(Socket socket) {
		this.cliente = socket;
	}
	
	@Override
	public void run() {
		receive();
		Conversor converson = new Conversor(new File("docs/"+cliente.getInetAddress().getHostAddress()+".doc"),new File("pdfs/"+cliente.getInetAddress().getHostAddress()+".pdf"));
		converson.converter();
		//response();
	}
	
	public void receive(){
		try {
			
			InputStream in = cliente.getInputStream();
			BufferedInputStream stream = new BufferedInputStream(in);
			FileOutputStream out = new FileOutputStream("docs/"+cliente.getInetAddress().getHostAddress()+".doc");
			
			byte[] buffer = new byte[1024];
			int length = 0;
			
			while((length = stream.read(buffer, 0, 1024)) != -1) {
				out.write(buffer, 0, length);
			}
			
			out.flush();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public void response(){
		
		try {
			OutputStream out = cliente.getOutputStream();
			FileInputStream file = new FileInputStream("pdfs/" +cliente.getInetAddress().getHostAddress()+ ".pdf");
			BufferedInputStream stream = new BufferedInputStream(file);
			
			byte[] buffer = new byte[1024];
			int length = 0;
			
			while((length = stream.read(buffer, 0, 1024)) != -1) {
				out.write(buffer, 0, length);
			}
			
			out.flush();
		
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

so que o metodo de resposta nao funciona :~

Criado 31 de outubro de 2012
Ultima resposta 31 de out. de 2012
Respostas 2
Participantes 2