- Forum-Beiträge: 6
09.01.2014, 09:32:00 via Website
09.01.2014 09:32:00 via Website
ich habe eine kleine Android App, die sich mit einem Server (Java Desktop Programm, welches als Socket Server fungiert) erstellt. Ich kann die Verbindung herstellen, das klappt alles wunderbar. Ich kann einen Befehl (JSONString) via Socket zum Server senden, kein Problem. Dieser Server schickt darauf hin auch einen JSON-String. Dieser kommt auch prinzipiell an, da dieser Datensatz aber größer als mein char[] Buffer ist, möchte ich mittels while() Schleife die Daten iterieren, aber beim zweiten Aufruf der .read() Methode des InputStreams wird aus Routine/Thread gesprungen. Dieses habe ich mittels Debugger gesehen, das Problem, es wird auch keine Exception geworfen. Diese ganze Prozedur habe ich natürlich in einen Thread() ausgelagert, also nicht direkt in der MainLoop.
2 public static String SERVERIP = "192.168.1.100";
3
4 // DESIGNATE A PORT
5 public static final int SERVERPORT = 57311;
6
7
8 private Thread thread;
9 private boolean threadRunning = true;
10 private int sendCmdValue = 0;
11
12 public MainActivity() {
13
14 thread = new Thread(new Runnable() {
15 @Override
16 public void run() {
17 Socket client = null;
18 PrintWriter out = null;
19 //BufferedReader in = null;
20 DataInputStream in = null;
21
22 try {
23 client = new Socket(SERVERIP, SERVERPORT);
24
25 }
26 catch (UnknownHostException e) {
27 Log.d("Fehler", "UnknownHostException");
28 }
29 catch (IOException e) {
30 Log.d("Fehler", "IOException");
31 }
32
33 if (client == null)
34 Log.d("Fehler", "Keine Verbindung.");
35 else {
36 Log.d("Ok", "Verbindung erfolgreich");
37
38 try {
39 JSONObject cmdObject = null;
40
41 out = new PrintWriter(new OutputStreamWriter(client.getOutputStream()));
42 //in = new BufferedReader(new InputStreamReader(client.getInputStream()));
43 in = new DataInputStream(client.getInputStream());
44
45 String cmd = new JSONObject()
46 .put("cmd", "init")
47 .toString();
48
49 out.println(cmd);
50 out.flush();
51
52 // scheduling the cmd's
53 while(threadRunning) {
54 System.out.println("running: "+client.getReceiveBufferSize());
55
56 String line = ""; //in.readLine();
57 byte[] buffer = new byte[4096];
58 int read = in.read(buffer);
59
60 while(read != -1) {
61
62 line += String.valueOf(buffer);
63
64 read = in.read(buffer); // <-- hier bricht die Routine ab, springt komplett raus und der Thread wird nicht mehr ausgeführt !!!!
65 }
66
67 if (!line.isEmpty()) {
68 Log.d("data",line);
69 }
70 }
71 }
72 catch (JSONException e) {
73 e.printStackTrace();
74 }
75 catch (IOException e) {
76 e.printStackTrace();
77 }
78 catch (Exception e) {
79 e.printStackTrace();
80 }
81
82 }
83 }
84 });
85 thread.start();
86 }
Da ein ähnlicher Code auf eine PC funktioniert, gehe davon aus, das ich was besonderes bei Android beachten muss. Hatte jemand vielleicht schon das gleiche oder ein ähnliches Problem?
Vielen Dank für Euro Antwort !
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.