0

我想开发一个应用程序,使两部 Android 手机能够通过 Wifi 网络交换数据。由于我目前没有两部手机,我想我可以通过使用一个充当服务器的应用程序和另一个连接到 172.0.0.1 作为客户端的应用程序来尝试这个。在服务器应用程序中,我启动了一个运行 NanoHTTPD 服务器的服务。作为一项测试,我想在我要求时收到“你好客户” http://172.0.0.1:8080/hallo/。这适用于普通的 Android 浏览器。

这是服务器的样子:

@Override
public Response serve(String uri, String method, Properties header, Properties parms, Properties files)
    {
        Log.d("HServer", "httpd request >>" + method + " '" + uri + "' " + "   " + parms);

        if (uri.startsWith("/hallo/"))
        {
            return new Response(HTTP_OK, MIME_PLAINTEXT, "Hallo Client");
        }
        else
        {
            return new Response(HTTP_OK, MIME_PLAINTEXT, "");
        }
    }

然后,我在 Google 示例之后使用 HttpURLConnection 进行了简单测试,制作了第二个应用程序:

private String NetworkResponse;
    private Runnable Erg = new Runnable()
    {

        @Override
        public void run()
        {
            // TODO Auto-generated method stub
            TV1.setText(NetworkResponse);
            Log.d("bla", NetworkResponse);
        }
    };

    public void Request(View view)
    {

        mHandler = new Handler();
        Thread T = new Thread(new Runnable()
        {

            @Override
            public void run()
            {


                HttpURLConnection urlConnection = null;
                try
                {
                    URL url = new URL("http://172.0.0.1:8080/hallo/");
                    urlConnection = (HttpURLConnection) url.openConnection();
                    urlConnection.setReadTimeout(10000);
                    urlConnection.setConnectTimeout(10000);
                    BufferedInputStream in = new BufferedInputStream(urlConnection.getInputStream());
                    NetworkResponse = readIt(in,1000);
                    mHandler.post(Erg);
                }
                catch (MalformedURLException e)
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                catch (IOException e)
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                finally
                {
                    urlConnection.disconnect();
                }

            }
        });
        T.start();
    }

    private String readIt(BufferedInputStream stream, int len) throws IOException, UnsupportedEncodingException
    {
        Reader reader = null;
        reader = new InputStreamReader(stream, "UTF-8");
        char[] buffer = new char[len];
        reader.read(buffer);
        return new String(buffer);
    }
}

当 URL 类似于http://en.wikipedia.org但不是http://172.0.0.1:8080/hallo/. 我明白了

07-12 01:20:00.398: W/System.err(17234): java.net.SocketTimeoutException: failed to connect to /172.0.0.1 (port 8080) after 10000ms.

所以我的问题是:为什么 Android 浏览器从我的简单服务器收到答案而我自己的应用程序没有?我使用 HttpURLConnection 的方式有问题吗?(PS:我没有使用模拟器,一切都在真手机上,两个应用程序都有所有权限)

4

1 回答 1

0

您可能想尝试使用 127.0.0.1 而不是 172.0.0.1。

于 2013-07-11T23:36:25.490 回答