J'essaie d'envoyer une image d'une application de bureau Java à une application J2ME. Le problème est que je reçois cette exception:java.net.SocketException: interruption causée par le logiciel: erreur d'écriture du socket
java.net.SocketException: Software caused connection abort: socket write error
J'ai regardé sur le net, et bien que ce problème n'est pas rare, je ne pouvais pas trouver une solution concrète. Je transforme l'image en un tableau d'octets avant de le transférer. Ce sont les méthodes trouvées sur l'application de bureau et sur le J2ME respectivement
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();
}
J'envoie le message à travers un réseau local, et je n'ai pas de problème quand j'envoyer des messages texte courts plutôt que des images. En outre, j'ai utilisé wireshark et il semble que l'application de bureau envoie seulement une partie du message. Toute aide serait très appréciée. De plus, tout fonctionne sur le simulateur J2ME.
J'avais déjà parcouru ces réponses. J'ai regardé le journal des événements de Windows, je n'ai rien vu de pertinent, même si je n'ai pas l'habitude de parcourir ces journaux. Deuxièmement, j'ai également essayé d'ajouter dans le shutdownOutput(); mais toujours pas de résultat. Enfin, j'obtiens une erreur de l'application J2ME indiquant que le socket était fermé. – npinti
Eh bien ... Je ne sais pas comment mais il me semble pouvoir le faire fonctionner maintenant. J'ai essayé de remplacer le casting par une partie entière, mais cela a complètement cassé mon application, le désactivant complètement. J'ai essayé de l'envoyer aujourd'hui et ça a marché. Ma conjecture est que c'était une cause externe, probablement le routeur a redémarré ou quelque chose d'autre. – npinti