Android上的InetAddress.getByName

时间:2010-01-19 20:38:11

标签: java android sockets

我做了:

java.net.InetAddress serverAddr;
try {
    serverAddr = java.net.InetAddress.getByName(Server.SERVERNAME);
}
catch (java.net.UnknownHostException exception) {
    //System.err.println ("wrong server name !!!");
    HelloWorldActivity.tv.setText("wrong server name !!!");
    return;
}

在我的Android应用程序中,但它永远不会解析主机名,无论我使用什么名称,它总是抛出异常。


但是在同一个模拟器上使用互联网,我已经添加了

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

到AndoidManifest.xml

这里是那些假设我没有

的服务器类
public class Server
{
    public static String SERVERNAME = "monster.idsoftware.com";
    public static String SERVERIP = "209.85.129.99";
    public static int SERVERPORT = 27950;
    public static int PROTOCOL = 68;
}

4 个答案:

答案 0 :(得分:5)

我遇到了类似的问题,我发现在某些版本的android(来自honeycombs)中,默认情况下不允许从主线程执行网络操作。所以你可以通过两种方式解决它。在不同的线程中执行操作或允许在主线程中进行网络操作。要做到这一点,请使用以下内容:

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitNetwork().build();
StrictMode.setThreadPolicy(policy);

答案 1 :(得分:4)

我找到了答案。无论出于何种原因,您必须使用:

java.net.InetAddress[] x= java.net.InetAddress.getAllByName(Server.SERVERNAME) ; HelloWorldActivity.tv.setText("Address: "+x[0].getHostAddress());

答案 2 :(得分:1)

你必须这样做很奇怪。 java.net.InetAddress.getByName开箱即用,适用于我。

Android模拟器中存在与DNS解析相关的一些(正在进行的)问题,因此可能就是这样。

答案 3 :(得分:0)

不知道这是不是一个错字,但你说你有:

<use-permission id="android.permission.INTERNET" />

但必须是:

<uses-permission android:name="android.permission.INTERNET" />

我尝试了getByName,它运行正常。

可能是您修复了权限并同时从getByName切换到getAllByName?只是好奇,如果你能确认getByName仍然不适合你吗?