Resposta de uma conexão Socket

Bom dia a todos.

Gostaria de saber como faço para aguardar uma resposta após um envio de uma mensagem via socket.

Faço a conexão: ex:

// enviando:
Socket server = new Socket( “192.168.1.155”, 2333 );
DataOutputStream dos = new DataOutputStream( server.getOutputStream() );
dos.writeBytes( mensagem a ser enviada );

// Resposta
Aqui… como faço para aguardar o retorno???

Se alguem puder me ajudar… agradeço desde já.

Abraços e obrigado.

Armando

        Socket socket = new Socket("192.168.1.155", 2333);
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        out.write("mensagem a ser enviada");
        out.flush();
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String resposta = in.readLine();

Tenho Servidor e o Client - consigo enviar a mensagem para o servidor mas não consigo retornar para o Client… alguem sabe me dizer oq pode estar acontecendo???

Agradeço desde já....
Abraços a todos
//--------------- SERVIDOR
import java.io.*;
import java.net.*;
import java.util.Date;

public class Servidor extends Thread {

	Socket socket;
	DataInputStream dis;
	PrintStream ps;
	
	
	public Servidor(Socket s) {
		socket = s;
	
		try {
		
			dis = new DataInputStream(s.getInputStream());
			ps = new PrintStream(s.getOutputStream());

		} catch(IOException e) {
			System.out.println("Error: "+ e);
		}
	}
	
	public void run() {
			
		while(true) {
				
			String line = "";
			String buffer = "";
				
			try {
				
				while ( (line = dis.readLine()) != null ) {
					System.out.println(line);
					buffer += line + " \n";
				}
				
			} catch(IOException e) {
				System.out.println("Error: "+ e);
			}
				
			if (line == null) // o cliente se foi
				return;

			//	Respondendo ao cliente
			send(line.toString()); 
		}
	}
		

	public void send(String msg) {
		ps.println(msg);
		ps.flush();
	}
	

	public static void main(String[] args) 	{
		ServerSocket server = null;
		try {
			server = new ServerSocket(2525);
		} catch(IOException e) {
			System.out.println("Error: "+ e);
		}
		while(true) {
			Socket s = null;
			try {
				System.out.println("  ");
				System.out.println(" - Esperando cliente: Aguardando...");
				s = server.accept(); // Espera por um cliente
				Servidor servidor = new Servidor(s);
				servidor.start();
			} catch(IOException e) {
				System.out.println("Error: "+ e);
			}
		}
	}

}
//--------------- CLIENTE
import java.net.*;
import java.util.Date;
import java.io.*;

public class Client {

	public static void main(String[] args) 	{
		
		Socket s = null;
		String message = "AAA \n" + "BBB \n" + "CCC \n";
		
		try {
			
			System.out.println("*** Criando Conexão com o server - "+ new Date() );
			s = new Socket("<IP>", 2525);
				
			System.out.println(" Enviando dados Server...");
			PrintStream ps = new PrintStream(s.getOutputStream());
			ps.println(message);
			ps.flush();
			
			System.out.println(" Recebendo os dados... ");
			BufferedReader br = new BufferedReader(new InputStreamReader( s.getInputStream() ));
			
			String buffer = "";
			try {
				while ( (buffer = br.readLine()) != null ) {
					System.out.println(buffer);
				}
			} catch(IOException e) {
				System.out.println("Error: "+ e);
			}
			
			br.close();
			ps.close();
			s.close();

		} catch(IOException e) {
			System.out.println("Error: "+ e);
		}
	}
		
}

[size=“11”]
[color=“red”]

  • Editado: Lembre-se de usar BBCode em seus códigos para mantê-los identados e mais legíveis para outros usuários - Matheus[/color][/size] :joia:

Pelo que vi o cliente envia uma unica mensagem ao servidor, o servidor recebe essa mensagem mas fica esperando outra que nao é enviada…

//essa é a mensagem que é enviada ao servidor, somente uma vez
System.out.println(" Enviando dados Server...");
PrintStream ps = new PrintStream(s.getOutputStream());
ps.println(message);
ps.flush(); 
/*o servidor vai receber a mensagem, e vai entrar no while, porem ele vai voltar no while e ficar esperando outra mensagem "dis.readLine()", que nao vai ser enviada pelo cliente, assim ele nunca sai dessa linha
*/
while ( (line = dis.readLine()) != null ) {
System.out.println(line);
buffer += line + " \n";
} 

no lugar de while, coloque um if, assim ele vai esperar por uma unica mensagem

/*espera a mensagem do cliente, depois que receber, continua executando, ate chegar na linha da resposta
*/
if((line = dis.readLine())!=null){
  System.out.println(line);
  buffer+=line+"\n";
}