2016-11-01 15 views
0

ノートパソコンで共有しているWi-FiにAndroid搭載端末を接続しました。 AndroidアプリでIPアドレスを入力して「OK」をクリックすると、Wireshark(パケットスニッファー)のアドレスからのパケットが見つかりませんなぜこのAndroid Socketプログラムが動作しないのですか?

これをAndroidプロジェクトのマニフェストに追加しました:

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

のAndroidコード:

private boolean attemptOpenDoor(){ 

    // Store values at the time of the login attempt. 
    String studentId = mStudentIdView.getText().toString(); 
    String password = mPasswordView.getText().toString(); 

    final EditText et = new EditText(this); 
    new AlertDialog.Builder(this).setTitle("please input IP address") 
      .setIcon(android.R.drawable.ic_dialog_info).setView(et) 
      .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface arg0, int arg1) { 
        IPAddr = et.getText().toString(); 
       } 
      }).setNegativeButton("cancel", null).show(); 

    try { 
     Socket socket = new Socket(); 
     socket.connect(new InetSocketAddress(IPAddr, 8866), 5000); 
     OutputStream ou = socket.getOutputStream(); 
     ou.write((studentId+password).getBytes("UTF-8")); 
     ou.close(); 
     socket.close(); 
    }catch (SocketTimeoutException aa) { 
     //连接超时 在UI界面显示消息 
     AlertDialog alertDialog = new AlertDialog.Builder(LoginActivity.this).create(); 
     alertDialog.setMessage("服务器连接失败!请检查网络是否打开"); 
     alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 

      } 
     }); 
     alertDialog.show(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return true; 
} 
+0

ありがとうございました – bowwwww

答えて

0

プログラムは、使用してソケットをオープンしようとしている時点であるため動作しません:

socket.connect(new InetSocketAddress(IPAddr, 8866), 5000); 

ダイアログがまだあるとIPAddrの値が設定されていません。ユーザーがフィールドに有効な入力を入力した後にのみ接続を開始するようにしてください。

また、上記の方法では、接続が確立されるか、または5秒が経過するまで実行されているスレッドがブロックされ、OnClickListenerの内部で直接呼び出すのは賢明ではないことに注意してください。接続が行われている間にUIスレッドをブロックしないようにするには、おそらくAsyncTaskなどを使用する必要があります。

+0

すごいよ!どうもありがとうございました! – bowwwww

0

あなたは "onClickの" 後に接続コードを移動する必要があります。

new AlertDialog.Builder(this).setTitle("please input IP address") 
     .setIcon(android.R.drawable.ic_dialog_info).setView(et) 
     .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface arg0, int arg1) { 
       IPAddr = et.getText().toString(); 
       try { 
    Socket socket = new Socket(); 
    socket.connect(new InetSocketAddress(IPAddr, 8866), 5000); 
    OutputStream ou = socket.getOutputStream(); 
    ou.write((studentId+password).getBytes("UTF-8")); 
    ou.close(); 
    socket.close(); 
}catch (SocketTimeoutException aa) { 
    //连接超时 在UI界面显示消息 
    AlertDialog alertDialog = new AlertDialog.Builder(LoginActivity.this).create(); 
    alertDialog.setMessage("服务器连接失败!请检查网络是否打开"); 
    alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 

     } 
    }); 
    alertDialog.show(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
      } 
     }).setNegativeButton("cancel", null).show(); 
関連する問題