2017-03-06 158 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

相关问题