2014-01-29 188 views
0

我已经创建了节俭服务器和客户端。然后我开始在我的电脑上使用节俭服务器。我使用我的机器IP地址在LAN中的另一台计算机上运行客户端。如何通过节俭客户端连接到远程节俭服务器

public class ArithmeticClient { 

private void invoke() { 
    TTransport transport; 
    try { 
     transport = new TSocket("192.168.0.232"/*this is my machine,which the sever runs' IP address*/, 7911); 

     TProtocol protocol = new TBinaryProtocol(transport); 

     ArithmeticService.Client client = new ArithmeticService.Client(protocol); 
     transport.open(); 

     long addResult = client.add(100, 200); 
     System.out.println("Add result: " + addResult); 
     long multiplyResult = client.multiply(20, 40); 
     System.out.println("Multiply result: " + multiplyResult); 

     transport.close(); 
    } catch (TTransportException e) { 
     e.printStackTrace(); 
    } catch (TException e) { 
     e.printStackTrace(); 
    } 
} 

public static void main(String[] args) { 
    ArithmeticClient c = new ArithmeticClient(); 
    c.invoke(); 
} 

}

而且我得到了一个错误

org.apache.thrift.transport.TTransportException: java.net.NoRouteToHostException: No route to host 
    at org.apache.thrift.transport.TSocket.open(TSocket.java:185) 
    at ArithmeticClient.invoke(ArithmeticClient.java:18) 
    at ArithmeticClient.main(ArithmeticClient.java:35) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 
Caused by: java.net.NoRouteToHostException: No route to host 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391) 
    at java.net.Socket.connect(Socket.java:579) 
    at org.apache.thrift.transport.TSocket.open(TSocket.java:180) 
    ... 7 more 

我该如何解决这件事情。

两台电脑都运行Fedora。版本不同(17和19)

回答

1

公共类的NoRouteToHostException延伸SocketException试图将插座连接到一个 远程地址和端口时发生错误

信号。通常,由于介入防火墙或中间路由器关闭,远程主机不能达到 。

这就是the docs的说法,以及我的猜测。这可能是原因吗?如果你尝试ping或telnet那台机器会发生什么?

+0

防火墙是问题所在。禁用后,我现在可以连接到远程服务器。 – ddarz4u