Java を使用して、ネットワーク上で実行されている test という名前の SLP サービスを検索し、接続を作成しようとしています。サービスが実行されていることはわかっており、コマンド「slptool findsrvs service:test」を使用して見つけることができます。このコマンドは、「service:test://192.168.1.4:12345,65535」を返します。ただし、次のコード:
import java.util.Locale;
import ch.ethz.iks.slp.*;
public class OpenConnection {
public static void main(String[] args) throws ServiceLocationException {
Locator locator = ServiceLocationManager.getLocator(new Locale("en"));
ServiceLocationEnumeration sle = locator.findServices(new ServiceType("service:test"), null, null);
System.out.println("Looking up ...");
System.out.println(sle.nextElement());
while (sle.hasMoreElements()) {
ServiceURL foundService = (ServiceURL) sle.nextElement();
System.out.println(foundService);
}
System.out.println("Finished.");
}
}
次の出力が生成されます。
java.net.SocketException: bad argument for IP_MULTICAST_IF: address not bound to any interface
at java.net.PlainDatagramSocketImpl.socketSetOption(Native Method)
at java.net.AbstractPlainDatagramSocketImpl.setOption(AbstractPlainDatagramSocketImpl.java:299)
at java.net.MulticastSocket.setInterface(MulticastSocket.java:448)
at ch.ethz.iks.slp.impl.SLPCore.<clinit>(SLPCore.java:279)
at OpenConnection.main(OpenConnection.java:7)
Looking up ...
null
Finished.
行 7 でのロケーター検索の失敗により、print sle.nextElement() ステートメントに対して null が出力されると想定しています。
Locator locator = ServiceLocationManager.getLocator(new Locale("en"));
だから私の質問は、 IP_MULTICAST_IF の悪い引数がこれを引き起こす理由と、それを修正する方法を知っている人はいますか? また、IP_MULTICAST_IF 以外の問題を引き起こしている可能性のあるものを見つけた場合は、遠慮なく指摘してください。
補足として、Ubuntu 11.04 で JavaSE-1.6、jslp-0.7.1、および commons-loggin-1.1.1 ライブラリを使用していることを知っておくと役立ちます。