Estou a desenvolver uma aplicação cliente servidor que estou a lutar já algumas semanas que esta a gerar um erro quando executo o cliente em outra máquina: Estabelecar conexão…
Erro no cliente: java.net.ConnectException: Connection refused: connect
BUILD SUCCESSFUL (total time: 1 second).
package client;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
import util.Mensagem;
import util.Status;
public class Client {
public static void main(String[] args) {
try {
/*
1. Estabelecer uma conexao com o servidor
2. trocar mensagem com o servidor
*/
//criar a conexao entre o cliente e o servidor
System.out.println("Estabelecar conexão.......");
Socket socket=new Socket("localhost",5555);
System.out.println("Conexão estabelecida.......");
//criação dos strem de entrada e saida
ObjectOutputStream output=new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream input=new ObjectInputStream(socket.getInputStream());
System.out.println("Enviar mensagem......");
Mensagem m=new Mensagem("Div");
m.setParam("op1",2);
m.setParam("op2",30);
output.writeObject(m);
output.flush();//libera o bufffer para envio
System.out.println("Mensagem "+m+" enviada.");
m=(Mensagem)input.readObject();
System.out.println("Resposta do servidor"+m);
if(m.getStatus()==Status.OK){
float resposta=(float) m.getParam("res");
System.out.println("Mensagem :\n"+resposta);
}else{
System.out.println("Erro :"+m.getStatus());
}
input.close();
output.close();
socket.close();
} catch (IOException ex) {
System.out.println("Erro no cliente: "+ex);
} catch (ClassNotFoundException ex) {
System.out.println("Erro no cast: "+ex.getMessage());
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Servidor
package server;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
import util.Mensagem;
import util.Status;
public class Server {
private ServerSocket serverSocket;
private void criarServerSocket(int porta) throws IOException {
serverSocket = new ServerSocket(porta);
}
private Socket esperaConexao() throws IOException {
Socket socket = serverSocket.accept();
return socket;
}
private void fecharSocket(Socket s) throws IOException {
s.close();
}
private void trataConexao(Socket socket) throws IOException {
//ponto entre o cliente -------sokect-----servidor
// protocolo de de comunicação
//Criar strems de entrada e saída
//tratar a conversa entre cliente e serfvidor(tratar protocolo)
try {
ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream input = new ObjectInputStream(socket.getInputStream());
/*protocolo
Cliente -------> Hello
server<--------Hello word
*/
System.out.println("Tratando.......");
Mensagem m = (Mensagem) input.readObject();
System.out.println("Menssagem do Cliente:\n"+m);
String operacao = m.getOperacao();
Mensagem reply = null;
if (operacao.equals("HELLO")) {
String nome = (String) m.getParam("nome");
String sobrenome = (String) m.getParam("sobrenome");
reply = new Mensagem("HELLOREPLY");
if (nome == null || sobrenome == null) {
reply.setStatus(Status.PARAMERROR);
} else {
reply.setStatus(Status.OK);
reply.setParam("mensagem", "Hello World" + nome + " " + sobrenome);
}
}
if (operacao.equalsIgnoreCase("DIV")) {
try {
Integer op1 = (Integer) m.getParam("op1");
Integer op2 = (Integer) m.getParam("op2");
reply = new Mensagem("DIVREPLY");
if (op2 == 0) {
reply.setStatus(Status.DIVZERO);
} else {
reply.setStatus(Status.OK);
float div=op2/op1;
reply.setParam("res", div);
}
} catch (Exception e) {
reply = new Mensagem("DIVREPLY");
reply.setStatus(Status.PARAMERROR);
}
}
output.writeObject(reply);
output.flush();
//4.2- fechar strem de entrada e saída
input.close();
output.close();
} catch (IOException e) {
System.out.println("Problema de tratamento da conexão com o cliente" + socket.getInetAddress());
System.out.println("Erro: " + e.getMessage());
} catch (ClassNotFoundException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
} finally {
//final do tratamento do protocolo
//4.1-Fechar socket de comunicação ente servidor/Cliente
fecharSocket(socket);
}
}
public static void main(String[] args) {
try {
//até que o processo não seja interropido ele vai ficar a repetir ou a espera
Server server = new Server();
System.out.println("Aguardando conexão");
server.criarServerSocket(5555);
while (true) {
Socket socket = server.esperaConexao();//protocolo
System.out.println("Cliente Conecatado");
//Outro prosesoo
server.trataConexao(socket);
System.out.println("Cliente finalizado");
}
} catch (IOException ex) {
//trata exceção
System.out.println("Erro no servidor" + ex.getMessage());
}
}
}