【问题标题】:how to resolve failed to connect to /192.168.15.186 (port 80): connect failed: ETIMEDOUT (Connection timed out) in Windows Firewall如何解决无法连接到 /192.168.15.186(端口 80):连接失败:Windows 防火墙中的 ETIMEDOUT(连接超时)
【发布时间】:2017-07-25 22:00:02
【问题描述】:

我正在尝试使用我的 android 设备而不是 android 模拟器基于此 tutorial 测试 android studio 与 mysql 的连接。但问题是,它会导致:

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 的结果,因为显然,这是数据库不在设备中而是在计算机本身中的计算机地址,所以如果我测试这两个将完全浪费时间out 或任何替代 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);
    }
}

【问题讨论】:

  • 您是否尝试过在移动网络浏览器中打开http://192.168.15.186:80/login.php?您确定您可以通过手机访问此网址吗?
  • @VladMatvienko 我的手机没有内置浏览器。我什至在下载的浏览器上尝试过,但它不起作用。我也怀疑电脑和设备的网络连接。它们需要连接在同一个网络中吗?
  • 在您确保可以从移动设备访问此 URL 之前,没有任何关于 Android 编程的内容。是的,它们必须连接到同一个网络(显然),或者这些网络之间应该有一些路由。同样的网络连接也不能保证它会连接,因为您的服务器(PC)应该接受80端口上的连接。
  • @VladMatvienko 话虽如此,我需要在同一网络上测试 PC 和设备。我在公司的电脑是通过 LAN 连接的,与我的 android 设备完全相反,它连接到 Wifi。如果是这样的话,也许我应该联系网络管理员,否则我会在不同的 PC 或连接上测试它。
  • 如果您的PC有WIFI模块(如笔记本电脑),您可以将您的PC切换到WIFI热点,并连接您的手机。这只是解决问题的另一种方法,我实际使用过。

标签: java php android mysql xampp


【解决方案1】:

我今天遇到了同样的问题,我通过让我的 PC 在专用网络中被发现来解决它。 使您的 PC 可被发现的步骤:

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

对我有帮助,希望对你有帮助。

【讨论】:

  • 我忘了回答这个帖子。我很高兴通过这种方法为您解决了问题,但我这样做的方式是我请求我们的网络管理员的帮助,他创建了一个具有不同本地 IP 但具有相同 DNS 和一些网络协议的虚拟网络,因为防火墙该公司的安全性非常好。
  • 连接成功,并且我的android应用程序中的注册功能与php.ini配合得很好。然后据我所知,网络管理员跟踪了从我的应用程序到本地服务器的连接,因此防火墙似乎确实是问题所在,并且它从一开始就一直阻止不需要的 IP。
  • 因此代码与我上面提到的教程链接仍然相同。
【解决方案2】:

我今天也遇到了同样的问题,关闭防火墙和网络保护设置后解决了。

【讨论】:

    【解决方案3】:

    当我将网络配置文件从私有更改为公共时,我解决了我的问题。

    【讨论】:

      【解决方案4】:

      我遇到过这样的问题,但是通过允许端口 1433(我的端口)到防火墙来克服。

      我已按照以下步骤操作: 配置防火墙和安全设置->高级设置->入站规则->新建规则->端口->下一步->特定本地端口(1433)->下一步->允许连接->下一步->下一步->添加名称- > 完成

      【讨论】:

      • 在我更新了我的 windows 版本之后就可以了。
      猜你喜欢
      • 2016-01-02
      • 2012-05-31
      • 2015-07-12
      • 2016-11-13
      • 2014-11-11
      • 2016-08-13
      • 2021-10-22
      • 1970-01-01
      • 2016-10-01
      相关资源
      最近更新 更多