参考代码
/**
* @notes Getting the IP address of the current machine using Java
*
* @author bo
*
* @version 2019年6月26日 上午10:34:02
*/
public class NetworkUtils {
/**
* 获取当前机器端口号
*
* @throws MalformedObjectNameException
* @throws MBeanException
* @throws ReflectionException
* @throws AttributeNotFoundException
* @throws InstanceNotFoundException
*/
public static String getLocalPort() throws Exception {
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
Set<ObjectName> objectNames = mBeanServer.queryNames(new ObjectName("*:type=Connector,*"), null);
if (objectNames == null || objectNames.size() <= 0) {
throw new IllegalStateException("Cannot get the names of MBeans controlled by the MBean server.");
}
for (ObjectName objectName : objectNames) {
String protocol = String.valueOf(mBeanServer.getAttribute(objectName, "protocol"));
String port = String.valueOf(mBeanServer.getAttribute(objectName, "port"));
// windows下属性名称为HTTP/1.1, linux下为org.apache.coyote.http11.Http11NioProtocol
if (protocol.equals("HTTP/1.1") || protocol.equals("org.apache.coyote.http11.Http11NioProtocol")) {
return port;
}
}
throw new IllegalStateException("Failed to get the HTTP port of the current server");
}
/**
* 获取当前机器的IP
*
* @throws UnknownHostException
*/
public static String getLocalIP() throws Exception {
InetAddress addr = InetAddress.getLocalHost();
byte[] ipAddr = addr.getAddress();
String ipAddrStr = "";
for (int i = 0; i < ipAddr.length; i++) {
if (i > 0) {
ipAddrStr += ".";
}
ipAddrStr += ipAddr[i] & 0xFF;
}
return ipAddrStr;
}
}
注:获取端口的方法,之前参考了一篇博客,但是在linux服务器上报错,原代码如下:
public static String getTomcatPort() throws MalformedObjectNameException, NullPointerException {
MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer();
Set<ObjectName> objectNames = beanServer.queryNames(new ObjectName("*:type=Connector,*"),
Query.match(Query.attr("protocol"), Query.value("HTTP/1.1")));
return objectNames.iterator().next().getKeyProperty("port");
}
后来把获取的objectNames打印在linux控制台发现,protocol键对应的属性值在windows下是"HTTP/1.1",但是在linux下是"org.apache.coyote.http11.Http11NioProtocol",linux打印日志如下:
objectNames --------> [Catalina:type=Connector,port=8093, Catalina:type=Connector,port=8100]
protocol -------------> org.apache.coyote.http11.Http11NioProtocol
port ---------------> 8093
protocol -------------> AJP/1.3
port ---------------> 8100