new Socket->Absturz

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • new Socket->Absturz

    Hey Leute,

    folgendes hab ne kleine App die einfache Nachrichten per TCP verschickt.
    Wenn der passende Server am andern ende da ist, gibts keine Probleme.

    So nun muss man natürlich auch den Fehler abfangen wenn keine Soket verbindung aufgebaut werden kann.
    Bei Normalen Java-Clienten fang ich die einfach mit nen try ab. timeout setzte ich auch. trotzdem freezt die App und nach nen paar sekunden kommt "<App> is not responding -> force close"

    Wenn ichs richtig eingrenzen konnte stürzt das Programm direkt beim anlegen des Sockets ab
    Socket socket = new Socket(host, port);

    Hier mal die Betreffenden Zeilen:

    Quellcode

    1. try {
    2. Socket socket = new Socket(host, port);
    3. socket.setSoTimeout(_timeout);
    4. PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(
    5. socket.getOutputStream()));
    6. printWriter.print(message);
    7. printWriter.flush();
    8. BufferedReader bufferedReader = new BufferedReader(
    9. new InputStreamReader(socket.getInputStream()));
    10. char[] buffer = new char[5242880];
    11. int anzahlZeichen = bufferedReader.read(buffer, 0, 5242880);
    12. response = new String(buffer, 0, anzahlZeichen);
    13. socket.close();
    14. } catch (Exception e) {
    15. if(e.toString().contains("timed out")) response = "timeout";
    16. }
    Alles anzeigen


    In Desktop-Java-Anwendungen klappt der Code eig. - wo liegt der Fehler?

    Danke im vorraus~
  • Ich rate mal drauf los ;)
    Die Meldung kommt automatisch, wenn dein UI-Thread länger als 5 Sekunden (keine Garantie) blockiert ist. Das soll verhindern, dass die User Experience leidet. Wenn du den Code in nem eigenen Thread ausführst (Stichwort AsyncTask) müsste es eigentlich klappen.
    Sonstige Anmerkung: es ist wahrscheinlich besser nicht nach dem Inhalt der Exception (enthält "timed out") zu unterschieden, sondern nach dem tatsächlichen Typ der Exeption (denke mal IOException). Man kann ja mehrere catch-Blöcke machen.
    Gruß
    Thorsten
  • Hallo, also ich habe es bisher einfach so gemacht, dass ich prüfe ob der socket null ist. Denn dann ist beim erzeugen was schief gelaufen.


    Java-Quellcode

    1. Socket socket = new Socket(host, port);
    2. if (socket != null){
    3. ...
    4. }else{
    5. //Fehlerausgabe
    6. }


    gruß joensen