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";
}