2016-05-24 30 views
0

現在、私が作成したJavaサーバーにAndroidアプリケーションを接続する必要があるプロジェクトに取り組んでいます。問題は、ソケットが初期化されないということです。Androidスタジオでソケットの初期化に失敗しました

ボタントリガー:

View.OnClickListener btnDownloadListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     //Implement download code 
     try{ 
      new ConnectionManager().execute("10.90.181.91" , "21002"); 
     }catch(Throwable t){ 

     } 

    } 
}; 

のConnectionManager背景機能:

protected String doInBackground(String... args) { 
    try{ 
     Log.i("Test", "background thread started"); 
     int port = Integer.parseInt(args[1]); 
     InetAddress serverAddr = InetAddress.getByName(args[0]); 
     Socket connSock = new Socket(serverAddr, port); 
     Log.i("Test", "Created Socket"); 

    }catch(Throwable t){ 

    } 

    return ""; 
} 

を私は次のように私のアプリのコードが見えます

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 

ファイルのAndroidManifest.xmlに権限を追加しましたログは "Background Thread Started"を出力していますが、 "Created Socke T」次のように

Serverのコードは次のとおりです。 Mainメソッドの助けを

public class ServerThread extends Thread { 

private Socket socket = null; 
private String s; 
private InputStream in; 
private OutputStream out; 
BufferedReader is; 
BufferedWriter os; 
public ServerThread(Socket s) { 
    socket = s; 
    System.out.println("Thread started: " + socket.getInetAddress()); 
    try{ 
     in = socket.getInputStream(); 
     out = socket.getOutputStream(); 
     out.flush(); 
     is = new BufferedReader(new InputStreamReader(in)); 
     os = new BufferedWriter(new OutputStreamWriter(out)); 

    }catch(Throwable t){ 
     t.printStackTrace(); 
    }  
} 
public void run() { 
    System.out.println("Thread is running"); 
    String dataType = ""; 
    Boolean awaitingTransfer = false; 
    try { 

     while(true){ 

      if(in.available() > 0 && !awaitingTransfer){ 
       dataType = is.readLine(); 
       System.out.println(dataType); 
      } 
      if(in.available() > 0 && awaitingTransfer){ 
       try{ 
        ArrayList<SpotCheck> tempList = new ArrayList<SpotCheck>();  
        while(in.available() > 0){ 
         //tempList = (ArrayList<SpotCheck>) in.readObject(); 
        } 

        ServerMain.manager.applyChanges(tempList); 
        awaitingTransfer = false; 
       }catch(Throwable t){ 
        t.printStackTrace(); 
       } 

      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     try { 

     in.close(); 
     out.close(); 
      socket.close(); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    } 

} 

} 

おかげ

try{ 
     ServerSocket serverSocket = null; 
     boolean listeningSocket = true; 
     try { 
      serverSocket = new ServerSocket(21002); 
     } catch (IOException e) { 
      System.err.println("Could not listen on port: 21002"); 
     } 
     int count = 0; 
     while(listeningSocket){    
      try{ 
       Socket clientSocket = serverSocket.accept(); 
       new ServerThread(clientSocket).start();     
      }catch(Throwable t){ 

      } 
     } 
     System.out.println("You should not be here"); 
     serverSocket.close(); 
    }catch(Throwable t){ 

    } 

ServerThread!アマチュアコーダーとして

+0

クライアントとサーバーのcatchブロックにログを追加する必要があります。そしてそこに通常のスタックトレースを表示します。 IOExceptionのキャッチを追加します。あなたはキャッチを持っているので、すでにlogcatに表示されています。 – greenapps

答えて

0

、私はちょうど、あなただけのこと

catch(Exception e) 
{ 
    runOnUiThread(new Runnable(){ 

     @Override 
     public void run(){ 
        Toast.makeText(getApplicationContext(), e.toString(), 
        Toast.LENGTH_LONG).show(); 
     } 
    }); 
} 

のようなあなたのdoInBackgroundの「キャッチ()」ブログに乾杯を追加できることをお聞きしたかったので、それはより多くの問題を表示することができます具体的には扱いやすくなるでしょう。しかし、再び私はそれが動作するかどうかわからない、私はasynctaskクラスでトーストを使用することは少し難しいです。

関連する問題