3 Stimmen

J2ME - Ausgabestream auf Client-Seite kann nicht heruntergefahren werden, Server bleibt beim Warten auf Daten hängen [nokia J2ME Implementierung]

Meine Frage ist: gibt es eine Möglichkeit, einen Socket OutputStream Shutdown durchführen oder es ist nicht richtig/voll implementiert, wie es von Nokia sein sollte? (J2ME nokia-Implementierung, getestet auf nokia c6-00 und nicht schließen Stream, getestet auf Emulator und funktioniert gut)

Das Hauptproblem besteht darin, dass die J2SE-Serveranwendung die Information über das Ende des Streams nicht erhält, die Bedingung read(buffer) == -1 ist nie wahr, sie versucht, von einem leeren Stream zu lesen und bleibt hängen, bis der Client zwangsbeendet wird. Dies funktioniert mit einem sehr, sehr, sehr hässlichen Workaround auf der Serveranwendung

        Thread.sleep(10);//wait some time for data else you would get stuck........
        while ((count = dataInputStream.read(buffer)) != -1) {
            byteArrayOutputStream.write(buffer, 0, count);
            if (count != BUFFER_SIZE_1024 || dataInputStream.available() == 0) { //the worlds worst condition ever written... but works
                break;
            }
            Thread.sleep(10);//wait for data input to get some data for dataInputStream.available() to return != 0 if client still sends data else you would not read all data......
        }

aber diese Lösung ist absolut nicht akzeptabel (ich weiß nicht, etwas über Nokia-Java-Codierung, ich vermisse etwas, oder ist es vielleicht ähnlich wie eine Art von Nokia-J2ME-Codierungsstandard und ich sollte sich daran gewöhnen oder Plattform ändern)

Ich kann den Client-Socket nach dem Senden von Daten nicht schließen, da der Server nach dem Empfang und der Verarbeitung der Daten eine Antwort an den Client sendet.

Das sieht folgendermaßen aus: J2ME-Client -> J2SE-Server (hängt sich beim Lesen auf, weil der Client keinen Outputstream-Shutdown durchführt) -> J2ME

Ich habe es versucht: den dataOutputStream auf dem J2ME-Client zu schließen - keine Wirkung setSocketOptions (KEEPALIVE, SNDBUF und andere) - keine Wirkung oder Fehler

Auf dem Zielgerät scheint nichts zu funktionieren.

Tut mir leid, aber ich bin gerade ein bisschen wütend nach diesem unsinnigen Streit mit Little Java.

Ich habe nach einer Lösung gesucht, aber sie scheint nicht zu funktionieren.

Client-Code:

        SocketConnection socketConnection = (SocketConnection) Connector.open("socket://" + ip + ":" + port);
        int count;
        byte[] buffer = new byte[BUFFER_SIZE_1024];
        // client -> server
        DataOutputStream dataOutputStream = new DataOutputStream(socketConnection.openDataOutputStream());
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
        while ((count = byteArrayInputStream.read(buffer)) != -1) {
            dataOutputStream.write(buffer, 0, count);
            dataOutputStream.flush();
        }
        dataOutputStream.close();
        byteArrayInputStream.close();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X