我想开发一款应用程序,使两部安卓手机能够通过Wifi网络交换数据。由于我现在没有两部手机,我想我可以通过使用一个用作服务器的应用程序和另一个连接到172.0.0.1的应用程序作为客户端来尝试。在服务器应用程序中,我启动了一个运行NanoHTTPD服务器的服务。作为一个测试,当我要求http://172.0.0.1:8080/hallo/
时,我想收到"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, "");
}
}
然后,我制作了第二个应用程序,在谷歌示例:之后,用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.
所以我的问题是:为什么安卓浏览器从我的简单服务器收到了答案,而我自己的应用程序却没有?我使用HttpURLConnection的方式有问题吗?(附言:我没有使用Emulator,一切都在一部真正的手机上,两个应用程序都有所有权限)
您可能想要尝试127.0.0.1而不是172.0.0.1。