2011-07-28 4 views
2

私は、ネットワーク上で実行されているSLPサービスtestを見つけるためにJavaを使用しようとしています。私はサービスが動作していることを知っており、それを見つけるために "slptool findsrvs service:test"コマンドを使うことができます。このコマンドは、 "service:test://192.168.1.4:12345,65535"を返します。ただし、次のコード:IP_MULTICAST_IFによるSocketExceptionを引き起こすSLP Java関数

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. 

私はロケータの故障による声明は、ルックアップ)(nullが印刷sle.nextElementのために印刷されたと仮定しています7行目で:

Locator locator = ServiceLocationManager.getLocator(new Locale("en")); 

だから私の質問は、IP_MULTICAST_IFに悪い引数はこれを引き起こす可能性があるし、それを修正する方法を、なぜ誰もが知っているんでしょうか?誰かがIP_MULTICAST_IF以外の問題を引き起こす可能性のあるものを見た場合は、気をつけてください。

私は、JavaSE-1.6、jslp-0.7.1、およびcommons-loggin-1.1.1ライブラリをUbuntu 11.04で使用していることを知っておけば、

答えて

3

私はちょうど同じ問題に遭遇しました。何私のためにそれを固定することも、代わりにJavaのCMDラインに次の引数を追加することによって行うことができ、起動時に

System.setPropery("java.net.preferIPv4Stack", "true") 

をやっていました。

-Djava.net.preferIPv4Stack=true