Estoy tratando de enviar una imagen desde una aplicación de escritorio Java a una aplicación J2ME. El problema es que me estoy haciendo esta excepción:java.net.SocketException: El software provocó la interrupción de la conexión: error de escritura de socket
java.net.SocketException: Software caused connection abort: socket write error
He mirado alrededor en la red, y aunque este problema no es tan raro, yo era incapaz de encontrar una solución concreta. Estoy transformando la imagen en una matriz de bytes antes de transferirla. Estos son los métodos que se encuentran en la aplicación de escritorio y en el J2ME, respectivamente
public void send(String ID, byte[] serverMessage) throws Exception
{
//Get the IP and Port of the person to which the message is to be sent.
String[] connectionDetails = this.userDetails.get(ID).split(",");
Socket sock = new Socket(InetAddress.getByName(connectionDetails[0]), Integer.parseInt(connectionDetails[1]));
OutputStream os = sock.getOutputStream();
for (int i = 0; i < serverMessage.length; i++)
{
os.write((int) serverMessage[i]);
}
os.flush();
os.close();
sock.close();
}
private void read(final StreamConnection slaveSock)
{
Runnable runnable = new Runnable()
{
public void run()
{
try
{
DataInputStream dataInputStream = slaveSock.openDataInputStream();
int inputChar;
StringBuffer results = new StringBuffer();
while ((inputChar = dataInputStream.read()) != -1)
{
results.append((char) inputChar);
}
dataInputStream.close();
slaveSock.close();
parseMessage(results.toString());
results = null;
}
catch(Exception e)
{
e.printStackTrace();
Alert alertMsg = new Alert("Error", "An error has occured while reading a message from the server:\n" + e.getMessage(), null, AlertType.ERROR);
alertMsg.setTimeout(Alert.FOREVER);
myDisplay.setCurrent(alertMsg, resultScreen);
}
}
};
new Thread(runnable).start();
}
Estoy enviando el mensaje a través de una LAN, y no tengo problemas al enviar mensajes cortos de texto en lugar de imágenes. Además, usé wireshark y parece que la aplicación de escritorio solo está enviando parte del mensaje. Cualquier ayuda sería muy apreciada. Además, todo funciona en el simulador J2ME.
Ya había reparado esas respuestas. Miré el registro de eventos de Windows, no vi nada relevante, aunque no tengo experiencia en revisar estos registros. En segundo lugar, también intenté agregar el shutdownOutput(); pero aún no sirvió. Por último, recibí un error de la aplicación J2ME que decía que el socket estaba cerrado. – npinti
Bueno ... No sé cómo pero parece que puedo hacerlo funcionar ahora. Traté de reemplazar la parte de conversión a entero, pero eso rompió por completo mi aplicación, deshabilitándola por completo. Intenté enviarlo hoy y funcionó. Supongo que fue una causa externa, probablemente el enrutador se reinició o algo más. – npinti