2017-03-06 161 views
0

我試圖測試android基於這個工作室連接到mysql tutorial使用我的Android設備用於調試目的而不是android模擬器。但問題是,它導致到:如何解決無法連接到/192.168.15.186(端口80):連接失敗:在Windows防火牆ETIMEDOUT(連接超時)

java.net.ConnectException: failed to connect to /192.168.15.186 (port 80): connect failed: ETIMEDOUT (Connection timed out)

注意到,這是真實設備上運行。 localhost127.0.0.1:80將返回ECONNREFUSED的結果,因爲很明顯,這是計算機地址,數據庫不在設備中,但在計算機本身,因此如果我測試這2個或任何其他IP,這將完全浪費時間。

我在模擬器上測試了10.0.2.2:80/login.php,它返回了一個真實的結果,暗示登錄和連接成功。

所以我猜測,也許連接是通過Windows防火牆阻止,但我不知道如何修改它。

logcat的

03-06 13:59:29.935 20951-20951/com.example.smdojt.mysqldemo W/InputEventReceiver: Attempted to finish an input event but the input event receiver has already been disposed. 
03-06 14:01:30.744 20951-25612/com.example.smdojt.mysqldemo W/System.err: java.net.ConnectException: failed to connect to /192.168.15.186 (port 80): connect failed: ETIMEDOUT (Connection timed out) 
03-06 14:01:30.744 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at libcore.io.IoBridge.connect(IoBridge.java:124) 
03-06 14:01:30.744 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) 
03-06 14:01:30.744 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:513) 
03-06 14:01:30.744 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at java.net.Socket.connect(Socket.java:894) 
03-06 14:01:30.744 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at com.android.okhttp.internal.Platform.connectSocket(Platform.java:174) 
03-06 14:01:30.744 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at com.android.okhttp.Connection.connect(Connection.java:152) 
03-06 14:01:30.744 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:276) 
03-06 14:01:30.744 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211) 
03-06 14:01:30.744 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:382) 
03-06 14:01:30.744 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106) 
03-06 14:01:30.744 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:217) 
03-06 14:01:30.745 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at com.example.smdojt.mysqldemo.BackgroundWorker.doInBackground(BackgroundWorker.java:48) 
03-06 14:01:30.745 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at com.example.smdojt.mysqldemo.BackgroundWorker.doInBackground(BackgroundWorker.java:23) 
03-06 14:01:30.745 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at android.os.AsyncTask$2.call(AsyncTask.java:292) 
03-06 14:01:30.745 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
03-06 14:01:30.745 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
03-06 14:01:30.745 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
03-06 14:01:30.745 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
03-06 14:01:30.745 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at java.lang.Thread.run(Thread.java:818) 
03-06 14:01:30.745 20951-25612/com.example.smdojt.mysqldemo W/System.err: Caused by: android.system.ErrnoException: connect failed: ETIMEDOUT (Connection timed out) 
03-06 14:01:30.745 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at libcore.io.Posix.connect(Native Method) 
03-06 14:01:30.745 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:111) 
03-06 14:01:30.745 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at libcore.io.IoBridge.connectErrno(IoBridge.java:137) 
03-06 14:01:30.745 20951-25612/com.example.smdojt.mysqldemo W/System.err:  at libcore.io.IoBridge.connect(IoBridge.java:122) 
03-06 14:01:30.745 20951-25612/com.example.smdojt.mysqldemo W/System.err: ... 18 more 
03-06 14:01:30.748 20951-20951/com.example.smdojt.mysqldemo D/wangcy9: setStatusIcon occur wrong theme! 
03-06 14:01:30.782 20951-20951/com.example.smdojt.mysqldemo D/ViewRootImpl: loadSystemProperties PersistDebugEvent: false RoDebugEvent: false 
03-06 14:02:30.313 20951-20951/com.example.smdojt.mysqldemo W/InputEventReceiver: Attempted to finish an input event but the input event receiver has already been disposed. 

MAINACTIVITY.java

public class MainActivity extends AppCompatActivity { 
    EditText UsernameEt, PasswordEt; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     UsernameEt = (EditText) findViewById(R.id.etUserName); 
     PasswordEt = (EditText) findViewById(R.id.etPassword); 

    } 

    public void OnLogin(View view) 
    { 
     String username = UsernameEt.getText().toString(); 
     String password = PasswordEt.getText().toString(); 
     String type = "login"; 
     BackgroundWorker backgroundWorker = new BackgroundWorker(this); 
     backgroundWorker.execute(type, username, password); 
    } 

} 

BACKGROUNDWORKER.java

public class BackgroundWorker extends AsyncTask<String, Void, String> { 

    Context context; 
    AlertDialog alertDialog; 
    BackgroundWorker (Context ctx) 
    { 
     context = ctx; 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     String type = params[0]; 
     String login_url = "http://192.168.15.186:80/login.php"; //declare want you want to connect with 

     if (type.equals("login")) 
     { 
      try { 
       String user_name = params[1]; 
       String password = params[2]; 

       URL url = new URL(login_url); 
       HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection(); //declare http connection class 
       httpURLConnection.setRequestMethod("POST"); 
       httpURLConnection.setDoOutput(true); 
       httpURLConnection.setDoInput(true); 
       OutputStream outputStream = httpURLConnection.getOutputStream(); 
       BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); 
       String post_data = URLEncoder.encode("user_name","UTF-8") + "=" +URLEncoder.encode(user_name, "UTF-8")+"&" 
         +URLEncoder.encode("password","UTF-8") + "=" +URLEncoder.encode(password, "UTF-8"); 
       bufferedWriter.write(post_data); 
       bufferedWriter.flush(); 
       bufferedWriter.close(); 
       outputStream.close(); 
       //below: read and get post respone 
       InputStream inputStream = httpURLConnection.getInputStream(); 
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1")); 
       String result=""; 
       String line=""; 

       while ((line = bufferedReader.readLine())!=null) 
       { 
        result += line; 
       } 
       bufferedReader.close(); 
       inputStream.close(); 
       httpURLConnection.disconnect(); 
       return result; 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } 
      //Clause for httpurlconnection 
      catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

     return null; 
    } 

    @Override 
    protected void onPreExecute() { 
     alertDialog = new AlertDialog.Builder(context).create(); 
     alertDialog.setTitle("Login Status"); 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     alertDialog.setMessage(result); 
     alertDialog.show(); 
    } 

    @Override 
    protected void onProgressUpdate(Void... values) { 
     super.onProgressUpdate(values); 
    } 
} 
+0

您是否嘗試過在移動網絡瀏覽器中打開'http://192.168.15.186:80/login.php'?您確定自己可以通過手機訪問此網址嗎? –

+0

@VladMatvienko我的手機沒有內置瀏覽器。我甚至試過它到一個下載的瀏覽器,但它不會工作。我也懷疑個人電腦和設備的網絡連接。他們需要在同一個網絡中連接嗎? – SovietSenpai

+0

除非您確定可以從移動設備訪問此URL,否則沒有任何關於Android編程的內容。是的,他們必須連接到相同的網絡(顯然),或者這些網絡之間應該有一些路由。同樣的網絡連接不能保證它會連接,因爲你的服務器(PC)應該接受'80'端口上的連接。 –

回答

0

我有同樣的問題ŧ今天,我通過在私人網絡中發現我的電腦來解決這個問題。 步驟來使您的PC可見:

Go to network settings. 
>Go to Manage known networks. 
>Choose your network. 
>Now turn on the PC discoverable feature. 

它幫助我,我希望它會幫助你。

+0

我忘了回答這個問題。我很高興它通過這種方法爲你解決了問題,但我這樣做的方式是要求我們的網絡管理員的幫助,他創建了一個虛擬網絡,它具有不同的本地IP,但具有相同的DNS和一些網絡協議,該公司非常安全。 – SovietSenpai

+0

連接成功,我的Android應用程序中的註冊功能與php運行良好。然後從我記憶中,網絡管理員追蹤到從我的應用程序到本地服務器的連接,所以看起來防火牆確實是問題,並且它從一開始就阻止不需要的IP。 – SovietSenpai

+0

因此,代碼與上面所述的教程鏈接一樣。 – SovietSenpai

相關問題