I have a client server program that is working when I request the communication, but when the sending of data starts the program generates the following error:
Estabelecar conexão....... Conexão estabelecida....... Enviar mensagem...... Mensagem enviada. Resposta do servidorclient.RegistosOperacao@5ec0a365 Mensagem : OK Erro: Software caused connection abort: socket write error
Client Class:
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.sql.Date;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
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......");
List<RegistosOperacao> listaDeRegisto = new ArrayList<>();
BuscaDeRegistos b = new BuscaDeRegistos();
listaDeRegisto = b.Pesquisa();
RegistosOperacao r = new RegistosOperacao();
r.setOperacao("Conectar");
r.setTimeStampNew(Date.valueOf(LocalDate.MAX));
r.setTimeStampOld(Date.valueOf(LocalDate.MAX));
output.writeObject(r);
output.flush();
System.out.println("Mensagem enviada.");
r = (RegistosOperacao) input.readObject();
System.out.println("Resposta do servidor" + r);
if (r.getOperacao().equalsIgnoreCase("OK")) {
System.out.println("Mensagem :\n" + r.getOperacao());
output.writeObject(r);
output.flush();
} else {
System.out.println("Erro :" + r.getOperacao());
}
input.close();
output.close();
socket.close();
} catch (Exception ex) {
System.out.println("Erro: " + ex.getMessage());
}
}
}
Server Class:
import client.RegistosOperacao;
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;
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.......");
RegistosOperacao r = (RegistosOperacao) input.readObject();
String operacao = r.getOperacao();
if (operacao.equalsIgnoreCase("Conectar")) {
r.setOperacao("OK");
}
else {
try {
} catch (Exception e) {
}
}
output.writeObject(r);
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());
}
}
}