【发布时间】:2016-09-09 13:01:15
【问题描述】:
我在网上查看过,我发现的所有内容都显示了如何创建一个单独的服务器来连接到主服务器(如果它位于 nat 或防火墙后面)。
但在我的情况下,客户端位于 NAT 之后,而服务器位于本地网络上。
所以它的设置有点像下面:
Client Actual:10.0.0.1 -> Client NAT:100.0.0.2:1111 <--> Server 10.0.0.0:1099
我用来连接服务器的Java代码如下:
String serviceUrl = "service:jmx:rmi:///jndi/rmi://10.0.0.0:1099/jmxrmi";
String[] credentials = new String[] {"username", "password"};
String objectName = "org.apache.activemq:type=Broker,brokerName=test";
JMXServiceURL url = new JMXServiceURL(serviceUrl);
Map<String, String[]> env = new HashMap<String, String[]>();
env.put(JMXConnector.CREDENTIALS, credentials);
JMXConnector jmxc = JMXConnectorFactory.connect(url, env);
conn = jmxc.getMBeanServerConnection();
broker = MBeanServerInvocationHandler.newProxyInstance(conn, new ObjectName(objectName), BrokerViewMBean.class, true);
它抛出的错误是:
java.rmi.ConnectException: Connection refused to host: 10.0.0.0; nested exception is:
java.net.ConnectException: Connection timed out: connect
所以我的问题是,如何让这个 NAT 连接后面的客户端工作?
【问题讨论】:
-
您是否尝试过将客户端连接到本地网络,而不通过 NAT,并查看您的代码是否有效?然后你就会知道它是不是 NAT 而不是你的代码。
-
哦,是的,它工作得很好。我让它在另一台机器上运行,它不在 NAT 后面。我正在显示我的经纪人的队列。
-
顺便说一句,地址@AlexandreCartapanis。我已经阅读了该页面,但据我所知,该实现也适用于服务器位于 NAT 后面而不是客户端的情况。还是我误会了?另外以防万一有人想知道我也尝试过专门设置远程 rmi 端口等。使用:com.sun.management.jmxremote.port= com.sun.management.jmxremote.rmi.port= 以及通过 java.rmi.server.hostname=
在主机文件中设置主机名 -
我对您提供的 IP 地址方案表示严重怀疑。这些是实际的IP吗?如果没有,是否可以编写实际IP?