Android上的InetAddress.getByName

Ste*_*ger 7 java sockets android

我做了一个:

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;
}
Run Code Online (Sandbox Code Playgroud)

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


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

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Run Code Online (Sandbox Code Playgroud)

到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;
}
Run Code Online (Sandbox Code Playgroud)

小智 6

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

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitNetwork().build();
StrictMode.setThreadPolicy(policy);
Run Code Online (Sandbox Code Playgroud)


Ste*_*ger 4

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

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