Boa tarde, pessoal
Não sei se é bem esse o nome do meu problema, mas vamos lá.
Preciso realizar uma integração entre o meu sistema e o sistema de um parceiro a partir de conexões socket.
O sistema parceiro, deixa uma applet java escutando a porta 1111 do computador local.
Então o meu sistema deve encaminhar uma mensagem para essa porta, por exemplo
Agora o meu problema:
O applet do parceiro fica aguardando a conexão com a mensagem "aguardando conexão..."
O Meu applet inicia, cria um ServerSocket.
Ao criar um ServerSocket, a mensagem do outro sistema muda para "Aguardando Informação..."
Solicito um accept e cria um novo Socket.
Envio a mensagem, e fecho todos os objetos que uso (segue código abaixo), e fecho o applet.
O problema é o seguinte:
Algumas vezes ao fechar as conexões e os objetos socket, vejo pelo console do java dele, que aparece a mensagem: "java.net.SocketException: Software caused connection abort: recv failed
"
E assim, eu posso abrir novamente o applet, recriar a conexão e envio uma nova mensagem.
Outras vezes (meu carma), após fechar o meu applet, a conexão aparenta estar aberta. Pois ao reabrir o applet, não passa da linha de accept. Apenas dá exception se eu setar o TimeOut.
O que pode estar acontecendo? Tem como eu reaproveitar uma conexão antiga, ou finalizar de vez essa, a partir do meu lado?
Código:public void EnviarMensagem() throws IOException
{
if(enviado==true)
return;
ServerSocket echoServer = null;
Socket echoSocket = null;
PrintWriter out = null;
BufferedReader in = null;
try
{
echoServer = new ServerSocket(Integer.parseInt(sPorta));
}
catch (IOException e)
{
System.err.println(e.getMessage());
}
if(echoServer != null)
{
System.err.println("Servidor listening porta " + sPorta );
}
try
{
//timeout
//echoServer.setSoTimeout(2000);
System.err.println("tenta conectar");
echoSocket = echoServer.accept();
System.err.println("echoServer.accept");
in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
System.err.println("in new");
out = new PrintWriter(echoSocket.getOutputStream());
System.err.println("out new");
}
catch (UnknownHostException e)
{
System.err.println("Don't know about host: " + sEndereco + ".");
}
catch (IOException e)
{
System.err.println("Couldn't get I/O for "
+ "the connection to: " + sEndereco + ".");
System.err.println(e.getMessage());
}
catch(Exception e)
{
System.err.println("Erro na conexão " + sEndereco + " " + sPorta + " " + e.getMessage());
}
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
System.err.println(sMensagem);
String userInput = sMensagem;
out.println(userInput);
out.flush();
System.err.println("enviou");
/*
while ((userInput = stdIn.readLine()) != null)
{
out.println(userInput);
//System.out.println("echo: " + in.readLine());
}
*/
try
{
out.close();
in.close();
stdIn.close();
}
catch(IOException e)
{
System.err.println("Erro no Encerramento IOException:" + e.getMessage());
}
catch(Exception e)
{
System.err.println("Erro no Encerramento Exception:" + e.getMessage());
}
finally
{
echoSocket.close();
echoServer.close();
System.err.println("FECHOU!");
echoSocket=null;
echoServer = null;
System.err.println("Sockets - NULL!");
System.exit(0);
}
}