Socket Verbindung löst BufferOverflow aus

C

ChrisMobile

Stammgast
83
Hallo zusammen,

ich bastel gerade für die Uni an einer App, die mit einem Server kommuniziert.
Der Server läuft und die App ebenfalls.

Leider führt die Socket-Verbindung auf einen Win7-Rechner, der durch eine Firewall geschützt ist zu einem BufferOverflow, da der Windows-7-Rechner wohl auf die Eingabe von Username und Passwort wartet..

Ich fange schon eine UnknownHost- und I/O-Exception ab aber das hilft in diesem Fall leider nicht.

Mein Code Abschnitt:
Code:
try {
            echoSocket = new Socket(ipAdress, port);

            out = new PrintWriter(echoSocket.getOutputStream(), true);
            in2 = new BufferedReader(new InputStreamReader(echoSocket
                    .getInputStream()));

            connected = true;
            System.out.println("OUTPUT: " + in2.readLine());
            
        } catch (UnknownHostException e) {
            System.out.println("UnknownHost");
            connected = false;
        } catch (IOException e) {
            System.out.println("I/O-Exception");
            connected = false;
        }

Kann ich dies irgendwie abfangen?
Eine Exception wird mit im DBMS-LogCat leider nicht ausgeben..
Da Handy arbeitet halt und läuft irgendwann in den Overflow..


Viele Grüße
Chris
 
ChrisMobile schrieb:
Leider führt die Socket-Verbindung auf einen Win7-Rechner, der durch eine Firewall geschützt ist zu einem BufferOverflow, da der Windows-7-Rechner wohl auf die Eingabe von Username und Passwort wartet..

Kommt der BufferOverflow auf dem WIN7-Rechner oder auf deinem Handy?
 
  • Danke
Reaktionen: ChrisMobile
Auf dem Handy.

Ich konnte es nun aber schon etwas weiter eingrenzen.
Es ist doch kein BufferOverflow, obwohl es sich ganz ähnlich verhält!
Die Last steigt jedoch nicht, dazu habe ich unten ein Ausschnitt aus dem LogCat ausgelöst.
Im LogCat bekomme ich nach dem starten der App nur die Meldung: keyDispatchingTimedOut (Log ist unten).

Das Problem ist, dass sich das Handy dank der Win7-Firewall nicht mit dem Rechner verbinden kann aber eben auch keine UnknownHostException auftritt.
Die GUI ist natürlich eingefrohrern und nix geht mehr, bis Android fragt o die App beendet werden soll.

Natürlich kann ich alles in einen Thread auslagern aber es kommt dank Firewall eben gar keine Verbindung zu Stande, gibt es eine Möglichkeit nur für den Verbindungsversuch ein Timeout anzugeben?

Wenn die Firewall abgestellt wird, klappt es ohne Probleme.

Code:
12-05 16:24:31.664: E/ActivityManager(194): ANR in de.uni.sCg.acc (de.uni.sCg.acc/.Login),  time=64098484
12-05 16:24:31.664: E/ActivityManager(194): Reason: keyDispatchingTimedOut
12-05 16:24:31.664: E/ActivityManager(194): Load: 2.81 / 7.87 / 7.41
12-05 16:24:31.664: E/ActivityManager(194): CPU usage from 25634ms to 0ms ago:
12-05 16:24:31.664: E/ActivityManager(194):   0.6% 155/akmd: 0% user + 0.6% kernel
12-05 16:24:31.664: E/ActivityManager(194):   0.4% 194/system_server: 0.1% user + 0.2% kernel / faults: 10 minor 2 major
12-05 16:24:31.664: E/ActivityManager(194):   0.1% 26362/android.process.media: 0.1% user + 0% kernel / faults: 60 minor
12-05 16:24:31.664: E/ActivityManager(194):   0% 4/events/0: 0% user + 0% kernel
12-05 16:24:31.664: E/ActivityManager(194):   0% 60/w1_bus_master1: 0% user + 0% kernel
12-05 16:24:31.664: E/ActivityManager(194):   0% 73/adbd: 0% user + 0% kernel / faults: 67 minor
12-05 16:24:31.664: E/ActivityManager(194):   0% 356/com.android.phone: 0% user + 0% kernel / faults: 23 minor
12-05 16:24:31.664: E/ActivityManager(194):   0% 26339/de.uni.sCg.acc: 0% user + 0% kernel
12-05 16:24:31.664: E/ActivityManager(194):   0% 57/synaptics_wq: 0% user + 0% kernel
12-05 16:24:31.664: E/ActivityManager(194):   0% 259/com.android.systemui: 0% user + 0% kernel / faults: 2 minor
12-05 16:24:31.664: E/ActivityManager(194):   0% 393/dhd_dpc: 0% user + 0% kernel
12-05 16:24:31.664: E/ActivityManager(194):   0% 418/wpa_supplicant: 0% user + 0% kernel
12-05 16:24:31.664: E/ActivityManager(194):   0% 23443/com.google.android.apps.maps:NetworkLocationService: 0% user + 0% kernel / faults: 14 minor
12-05 16:24:31.664: E/ActivityManager(194):   0% 25665/com.google.android.apps.unveil: 0% user + 0% kernel
12-05 16:24:31.664: E/ActivityManager(194):   0% 26396/logcat: 0% user + 0% kernel / faults: 1 minor
12-05 16:24:31.664: E/ActivityManager(194): 1.2% TOTAL: 0.4% user + 0.6% kernel + 0% iowait + 0% softirq
12-05 16:24:31.664: E/ActivityManager(194): CPU usage from 491ms to 1008ms later:
12-05 16:24:31.664: E/ActivityManager(194):   1.2% 155/akmd: 0% user + 1.2% kernel
12-05 16:24:31.664: E/ActivityManager(194):   1.9% 194/system_server: 1.9% user + 0% kernel / faults: 1 minor
12-05 16:24:31.664: E/ActivityManager(194):     3.8% 229/InputDispatcher: 3.8% user + 0% kernel
12-05 16:24:31.664: E/ActivityManager(194): 3.8% TOTAL: 1.9% user + 1.9% kernel
 
Ich konnte das Problem nun lösen.

Socket socket = new Socket(ip,port);
Versucht pausenlos sich zu verbinden, wenn der andere Rechner nicht antwortet (z.B. wegen einer Firewall oder weil einfach nichts passiert) versucht die Methode es immer weiter.

Die Lösung ist Folgendes:
Code:
...
            //echoSocket = new Socket(ipAdress, port);
            echoSocket = new Socket();
            echoSocket.connect(new InetSocketAddress(ipAdress, port), 2000);
...
 

Ähnliche Themen

R
  • Robby1950
2
Antworten
23
Aufrufe
954
Robby1950
R
B
Antworten
6
Aufrufe
1.016
jogimuc
J
M
Antworten
2
Aufrufe
888
maksimilian
M
Zurück
Oben Unten