Sto tentando di inviare un'immagine da un'applicazione desktop Java a un'applicazione J2ME. Il problema è che sto ottenendo questa eccezione:java.net.SocketException: interruzione della connessione causata dal software: errore di scrittura socket
java.net.SocketException: Software caused connection abort: socket write error
Ho guardato in giro sulla rete, e anche se questo problema non è che raro, sono stato in grado di trovare una soluzione concreta. Sto trasformando l'immagine in un array di byte prima di trasferirla. Questi sono i metodi presenti sul applicazione desktop e sul J2ME, rispettivamente
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();
}
io mando il messaggio attraverso una rete LAN, e non ho problemi quando invio brevi messaggi di testo invece di immagini. Inoltre, ho usato wireshark e sembra che l'applicazione desktop invii solo parte del messaggio. Qualsiasi aiuto sarebbe molto apprezzato. Inoltre, tutto funziona con il simulatore J2ME.
Avevo già passato quelle risposte. Ho guardato il registro degli eventi di Windows, non ho visto nulla di rilevante, anche se non sono così esperto nell'esaminare questi log. In secondo luogo, ho anche provato ad aggiungere in shutdownOutput(); ma ancora nessun risultato. Infine, viene visualizzato un errore dall'applicazione J2ME che indica che il socket è stato chiuso. – npinti
Beh ... non so come ma a quanto pare riesco a farlo funzionare ora. Ho provato a sostituire il casting con la parte intera, ma questo ha completamente distrutto la mia applicazione, disabilitandola completamente. Ho provato a inviarlo oggi e ha funzionato. La mia ipotesi è che fosse una causa esterna, probabilmente il router riavviato o qualcos'altro. – npinti