Ich versuche, ein Bild von einer Java-Desktop-Anwendung an eine J2ME-Anwendung zu senden. Das Problem ist, dass ich diese Ausnahme bin immer:java.net.SocketException: Software verursachte Verbindungsabbruch: Socket-Schreibfehler
java.net.SocketException: Software caused connection abort: socket write error
ich um auf dem Netz ausgesehen habe, und obwohl dieses Problem nicht so selten ist, ich war nicht in der Lage eine konkrete Lösung zu finden. Ich transformiere das Bild in ein Byte-Array, bevor ich es übertrage. Dies sind die Methoden, die auf der Desktop-Anwendung gefunden und auf der J2ME jeweils
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();
}
Ich sende die Nachricht über einen LAN, und ich habe keine Probleme, wenn ich kurze Textnachricht anstelle von Bildern senden. Außerdem habe ich wireshark verwendet und es scheint, dass die Desktop-Anwendung nur einen Teil der Nachricht sendet. Jede Hilfe würde sehr geschätzt werden. Außerdem funktioniert alles am J2ME-Simulator.
Ich hatte diese Antworten bereits durchgegangen. Ich schaute auf das Ereignisprotokoll von Windows, ich sah nichts Relevantes, Ereignis, obwohl ich nicht so erfahren bin, diese Protokolle durchzugehen. Zweitens habe ich auch versucht, in die shutdownOutput(); aber immer noch keinen Nutzen. Schließlich bekomme ich einen Fehler von der J2ME-Anwendung, der besagt, dass der Socket geschlossen wurde. – npinti
Nun ... ich weiß nicht wie, aber ich scheine es jetzt funktionieren zu lassen. Ich habe versucht, das Casting auf einen ganzzahligen Teil zu setzen, aber das hat meine Anwendung komplett kaputt gemacht und sie komplett deaktiviert. Ich habe versucht, es heute zu senden und es hat funktioniert. Meine Vermutung ist, dass es eine externe Ursache war, wahrscheinlich der Router neu gestartet oder etwas anderes. – npinti