2017-06-08 1 views
0

EDIT:問題は、Androidデバイスがサーバーからの応答を受け取るときのClient.classの入力です。これらは、クラッシュの原因となる次の行以下のとおりです。ここでAndroidクライアントソケット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); 
     } 

アンドロイドで私のClient.classです:

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(); 
    } 
} 

}

とJavaで私Server.classを必要に応じて:

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(); 
    } 

} 

Server.classに必要なHandler.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

IOExceptionは、クライアントがサーバーへの接続を確立できないことを意味します。電話のようなアンドロイドデバイスを使用している場合は、一部のアクセス許可を有効にする必要があります。あなたはそれについてまだ見てきましたか? https://stackoverflow.com/questions/4074808/java-socket-ioexception-permission-denied – user2570465

+0

@ user2570465ええ、私はこの記事を読んで、私はすべてのインターネット権限を持っています。私はAndroidの携帯電話にアプリケーションを読み込むと、サーバーがテストメッセージを取得するが、アプリケーションがクラッシュします。接続の問題は、Androidエミュレータ – Urbs

+0

Okから発生する可能性があります。ですから、 'Socket client = new Socket(" localhost "、5555);'のIOExceptionで説明したエラーは修正されました。詳細とトレースバックを編集しますか? – user2570465

答えて

1

デバッグが上記のコメントで解決しました。

ステップ1:ここで説明したようアンドロイドマニフェストファイルへのアクセス権を追加します。Java socket IOException - permission denied

ステップ2:while ((text = reader.readLine()) != null)チェックを変更します。私はtext = reader.readLine() != nullチェックに問題があったと思います。

関連する問題