今天编写好ICE的一个实例,一个很简单的Hello World例子,在myeclipse中运行的时候,出现了一个异常,异常信息如下:
Ice.SocketException error = 0 at IceInternal.Network.doBind(Network.java:249) at IceInternal.TcpAcceptor.<init>(TcpAcceptor.java:119) at IceInternal.TcpEndpointI.acceptor(TcpEndpointI.java:415) at IceInternal.IncomingConnectionFactory.<init>(IncomingConnectionFactory.java:378) at Ice.ObjectAdapterI.<init>(ObjectAdapterI.java:1028) at IceInternal.ObjectAdapterFactory.createObjectAdapter(ObjectAdapterFactory.java:160) at Ice.CommunicatorI.createObjectAdapterWithEndpoints(CommunicatorI.java:89) at demo.server.Server.main(Server.java:13) Caused by: java.net.SocketException: Address family not supported by protocol family: bind at sun.nio.ch.Net.bind(Native Method) at sun.nio.ch.ServerSocketChannelImpl.bind(Unknown Source) at sun.nio.ch.ServerSocketAdaptor.bind(Unknown Source) at IceInternal.Network.doBind(Network.java:243) ... 7 more |
以前环境是没有问题的,只是最近重新安装了系统,重新运行实例就出现这样的情况,在网上也没有找到合适的答案,
异常中提示在这行除了问题,
Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints( "SimplePrinterAdapter", "default -p 10000" ); |
使用一个指定的端点创建适配器的时候,报出异常,既然是绑定的问题,是不是绑定的信息不全导致的。
然后直接在端口前面加上了IP信息,改写如下:
Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints( "SimplePrinterAdapter", "default -h 127.0.0.1 -p 10000"); |
再运行就没有什么问题了,没弄明白是怎么回事。
上面是引用的其他地方的解决办法。客户端在本机,服务器在虚拟机,发现如上修改后无法正常通信,于是把服务器的default -h 127.0.0.1 -p 10000 修改为 default -h 192.168.133.133 -p 10000 就可以正常通信了。 其中 192.168.133.133是本机的IP地址。