こんにちは、私はしばらくこれに苦労しており、解決策を見つけることができません。
Java では、次のコードが機能します。
InetAddress serverAddr = InetAddress.getByName("myservice.local");
Socket socket = new Socket(serverAddr, PoolServerAddress.DEFAULT_PORT);
Androidでも同じことが機能しません。「.local」を削除して、必要な権限をすべてマニフェストに追加しようとしました。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
また、そのコードを実行する前にマルチキャスト ロックを追加しようとしましたが、これを解決する方法はありません。
次の例外が発生します。
06-03 13:18:14.438: W/System.err(31636): java.net.UnknownHostException: Unable to
resolve host <server_name>: No address associated with hostname
06-03 13:18:14.438: W/System.err(31636): at
java.net.InetAddress.lookupHostByName(InetAddress.java:434)
06-03 13:18:14.438: W/System.err(31636): at
java.net.InetAddress.getAllByNameImpl(InetAddress.java:239)
06-03 13:18:14.438: W/System.err(31636): at
java.net.InetAddress.getByName(InetAddress.java:292)
06-03 13:18:14.438: W/System.err(31636): at
com.example.jelly_test.MainActivity.connect(MainActivity.java:113)
06-03 13:18:14.438: W/System.err(31636): at
com.example.jelly_test.MainActivity$ResolvingThread.run(MainActivity.java:71)
06-03 13:18:14.438: W/System.err(31636): Caused by: libcore.io.GaiException:
getaddrinfo
failed: EAI_NODATA (No address associated with hostname)
06-03 13:18:14.438: W/System.err(31636): at libcore.io.Posix.getaddrinfo(Native
Method)
06-03 13:18:14.438: W/System.err(31636): at
libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:55)
06-03 13:18:14.438: W/System.err(31636): at
java.net.InetAddress.lookupHostByName(InetAddress.java:415)
06-03 13:18:14.438: W/System.err(31636): ... 4 mor
サービスの代わりに ip を提供すると機能しますが、名前を提供できるようにする必要があります。また、名前をIPに解決するJmDNSを追加しようとしましたが、遅く、オフィスの内部サービスでのみ機能しますが、一部のサービスはネットワークの外部にありますが、AndroidではなくJavaバージョンで引き続きアクセスできます. 他に試すことができるものはありますか?アイデアが不足しているので、どうもありがとう....!
編集:私の問題は、Android にバグがあり、 myservice.company.com などのFQDNのみを受け入れるという事実によるものだと思います。