2017-06-08 4 views
0

EDIT: Das Problem ist die Eingabe in der Client.class also, wenn die Android-Geräte eine Antwort vom Server erhält. Das sind die folgenden Zeilen, die den Absturz verursacht:Android Client Socket IOException

 InputStream input = client.getInputStream(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(input)); 

     String text; 

     while ((text = reader.readLine()) != null) { 
      Log.d("ClientLog", "Received from Server"+ text); 
     } 

Hier ist meine Client.class in Android:

public class Client implements Runnable{ 

public Client() { 

} 

@Override 
public void run() { 
    try { 
     Log.d("ClientLog", "Socket creation incoming"); 
     Socket client = new Socket("localhost", 5555); 
     Log.d("ClientLog", "Client has been started"); 

     // Streams: 
     OutputStream out = client.getOutputStream(); 
     BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream())); 

     InputStream input = client.getInputStream(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(input)); 
     // ----------------------------------------------------------------------- 

     writer.write("Test"); 
     writer.newLine(); 
     writer.flush(); 

     String text; 

     while ((text = reader.readLine()) != null) { 
      Log.d("ClientLog", "Received from Server"+ text); 
     } 

     writer.close(); 
     reader.close(); 

    } catch (UnknownHostException e) { 
     Log.d("ClientLog", "Error: Host not found"); 
     e.printStackTrace(); 
    } catch (IOException e) { 
     Log.d("ClientLog", "Error: IOException"); 
     e.printStackTrace(); 
    } 
} 

}

Und wenn nötig meine Server.class in Java:

public class Server { 

public static void main(String[] args) { 

    ExecutorService executor = Executors.newFixedThreadPool(30); 

    ServerSocket server; 
    try { 
     server = new ServerSocket(5555); 
     System.out.println("Server has been started on Port 5555"); 

     while(true) { 
      try { 
       Socket client = server.accept(); 

       //Thread t = new Thread(new Handler(client)); 
       //t.start(); 
       executor.execute(new Handler(client)); 

      } catch (IOException e) { 
       System.out.println("Error IOExceotion"); 
       e.printStackTrace(); 
      } 
     } 

    } catch (IOException e1) { 
     e1.printStackTrace(); 
    } 

} 

Die Handler.class benötigt für Server.class:

public class Handler implements Runnable{ 
private Socket client; 

public Handler(Socket pClient) { 
    client = pClient; 
} 

@Override 
public void run() { 
    try { 
       // Streams: 
       OutputStream out = client.getOutputStream(); 
       PrintWriter writer = new PrintWriter(out); 

       InputStream input = client.getInputStream(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(input)); 
       // ----------------------------------------------------------------------- 

       String text = null; 

       while ((text = reader.readLine()) != null) { 
        writer.write(text+ "\n"); 
        writer.flush(); 
        System.out.println("Recieved from Client: "+ text); 
       } 

       //Close Streams 
       writer.close(); 
       reader.close(); 

       client.close(); 
    } catch (IOException e) { 
     System.out.println("Error IOException"); 
     e.printStackTrace(); 
    } 
} 

}

+0

Die IOException sollte bedeuten, dass der Client keine Verbindung zum Server herstellen kann. Wenn Sie ein Android-Gerät wie ein Telefon verwenden, müssen Sie möglicherweise einige Berechtigungen aktivieren. Hast du das schon untersucht? https://Stackoverflow.com/questions/4074808/java-socket-ioexception-permission-denied – user2570465

+0

@ user2570465 Ja, ich habe diesen Beitrag gelesen und ich habe alle Internet-Berechtigungen. Und wenn ich die App auf mein Android-Handy lade, erhält der Server die Testnachricht, aber die App stürzt ab. So kann das Verbindungsproblem vom Android Emulator – Urbs

+0

kommen Ok. Also der oben beschriebene Fehler mit der IOException auf 'Socket client = new Socket (" localhost ", 5555)' ist behoben und jetzt gibt es einen neuen Fehler? Möchten Sie die Details und die Rückverfolgung bearbeiten? – user2570465

Antwort

1

Das Debuggen wurde oben in den Kommentaren aufgelöst.

Schritt 1: Hinzufügen von Berechtigungen auf den Android-Manifest-Datei, wie hier beschrieben wurde: Java socket IOException - permission denied

Schritt 2: Ändern Sie die while ((text = reader.readLine()) != null) Prüfung. Ich denke, der text = reader.readLine() != null Check war problematisch.