2017-12-20 19 views
0

Ich habe eine einfache Android-App, die einige Daten an einen Server senden soll ich habe über Socket mit einer bestimmten IP-und Port-Nummer.Meine einfache Android-App sendet keine Daten an einen Socket

Auf meinem onCreate() ich verbinde mich mit dem Server. Dieser Teil funktioniert:

// connect to the server 
clientThread = new ClientThread(); 
thread = new Thread(clientThread); 
thread.start(); 

Aber die sendMessage() keine Meldungen an die Buchse schicken und ich erhalte nichts auf meinem Server. Die Funktion zeigt nicht einmal die Protokollnachricht an, so dass ich nicht weiß, was passiert. Was ist das Problem? Wie man es repariert?

//TODO send data 
          clientThread.sendMessage(100); 

Hier ist die Buchse Thread-Klasse:

class myApp extends Activity{ 
//.... 
ClientThread clientThread; 
Thread thread; 
//.... 

class ClientThread implements Runnable { 

private Socket socket; 
private BufferedReader input; 

@Override 
public void run() { 
    InetAddress serverAddr = null; 
    try { 
     serverAddr = InetAddress.getByName(SERVER_IP); 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } 
    try { 
     socket = new Socket(serverAddr, SERVERPORT); 
     Log.i("Hello: Connected","Hello: Connected"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

void sendMessage(int data) { 
    try { 
     if (null != socket) { 
      PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), 
        true); 
      out.println(data); 
      Log.i("Hello Message sent","Hello sent: "+data+" to: "+ SERVER_IP+":"+SERVERPORT); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
} 
} 

Mein serverseitige erhalten (Java Server):

public void run() { 
    System.out.println("Got a new user!"); 
    InputStream inp; 

    try { 
     /* Get Data From Client */ 
     inp = socket.getInputStream(); 
     int data= inp.read(); 
     System.out.println(address+" "+ data); 

     if (data!=0) { 
      scoreboard.b1.y+=1; 
      if (scoreboard.b1.y==scoreboard.MaxValue) { 
       System.out.println("HELLLOOOOOOO"); 
       scoreboard.updateValue(); 
      } 
      scoreboard.repaint(); 
     } 

    } catch (IOException e) { 
     return; 
    } 
    String line; 
} 

Antwort

2

Nach out.println(data);, sollten Sie out.flush();

nennen und Sie lesen Daten falsch, wenn Sie mehrere Male lesen möchten, sollte es sein Puffer und während der Expression, wie this

+1

Denke nicht, schrei es! –

+0

Es ist seltsam. Es sendet die Nachricht nur einmal. Und die Daten sind keine '100'! Der Server erhält '49'. Ich habe den Servercode hinzugefügt. –

+0

BTW, der 'autoflush' wurde auf" True "gesetzt, also war es vorher OK. Das Problem könnte woanders sein. –

0

Die Absender-Option in meinem Android App verwendet (PrintWriter) wurde die falschen Werte zu senden. Ich änderte es zu DataOutputStream und es funktionierte.

DataOutputStream out = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream())); 
out.write(steps); 
out.flush(); 

auch auf dem Server, fast hätte ich vergessen eine while(true) Schleife haben, um kontinuierlich die Nachrichten zu empfangen. Jetzt funktioniert alles!