我尝试检查主机名的IP。
我有两个网络设备
我的主机名是 ///////////////////////////////////////////
// Web Client side socket creation code
///////////////////////////////////////////
var stompClient = null;
function connect() {
if (stompClient != null) {
stompClient.disconnect();
}
var socket = new SockJS(contextPath + '/tracking');
stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
stompClient.subscribe('/message/send/individual/' + loginUserUk,
function(response) {
var messageBody1 = JSON.parse(response.body);
//process with the response
});
});
}
。
我有一个仅监听168.172.1.55的Web服务器。 (指标2)
如何使用主机名而不是IP地址指定使用度量2?
答案 0 :(得分:2)
您正在混淆两个级别:
您似乎想做的是让DNS解析受到路由指标的影响。这对我来说真的没有意义。这不是应该使用DNS和路由指标的方式。
IMO,做到这一点的“合理”方法是:
使用IP地址而不是主机名(本地)连接到您的Web服务器。 Java网络API允许您使用零代码更改(通常为 1 )来做到这一点。
为两个IP地址使用不同的DNS名称。例如,您可以在“主机”文件中为一个或其他设备添加本地DNS条目。或者,您可以在本地DNS服务器或DNS提供程序中添加条目。
请注意,这并不是Java问题,因为这些机制和解决方案不会在您的Java应用程序中实现,并且同样适用于其他编程语言。
实际上,根据您对另一个答案的评论,我怀疑您问题的一部分可能正在路由。
您的问题似乎是说您的系统在两个不同的网络(A和B)上具有两个设备(NIC)和两个不同的IP地址。
然后,您在注释中说,您无法ping通网络B上的IP,因为其IP在网络A上“不可用”。
这就是问题。如果您在网络A上,并且需要与正在网络B上IP的端口上侦听的服务进行通信,并且数据包没有从A路由到B,则无法正常工作。如果数据包未路由,则通过正确的IP地址或主机名引用服务器都没有关系。
另一方面,如果您尝试从自身ping网络A和B上的主机...应该就可以了。除非您的网络(或虚拟网络)配置确实被弄乱了,否则主机应该能够与其自己的所有IP地址进行通信。
我想您的防火墙可能阻止了ping ...,而不是路由问题。但这也是一个错误的配置,IMO。
1 ...除非您的代码库已实现为使用IP地址语法显式排除主机名。
答案 1 :(得分:-1)
如果要使用主机名代替ip,则必须具有将主机名解析为ip地址的机制。我首先想到的方法是修改hosts
文件。
我实现如下:
首先,修改hosts
文件,将以下行添加到hosts
文件尾。
168.172.1.55 develop
第二,启动服务器并使用名称168.172.1.55
绑定到develop
。我使用vertx对此进行模拟:
NetServer server = Vertx.vertx().createNetServer();
server.connectHandler(new Handler<NetSocket>() {
@Override
public void handle(NetSocket netSocket) {
System.out.println(netSocket.isSsl());
}
});
server.listen(9091,"develop");
Ps:如果要在系统中使用name
,则名称服务器可能是更好的选择,例如DNS,Zookeeper,etcd等。