⑴ java怎么获取当前机器ip和容器port
在使用Docker启动容器时,容器本身并不包含主机的IP信息,因此必须通过参数传递的方式让容器获得这些信息。
容器技术是一种隔离技术,本身不具备网络体系,需要自行构建网络环境。因此,动态获取宿主机的IP地址需要了解当前的基础环境是什么。例如,如果你正在使用Kubernetes(K8S)环境,那么可以很方便地确定容器运行在哪台主机上。
在Kubernetes环境中,可以通过执行命令:
kubectl get po xxx -o yaml
来获取容器运行的具体信息,从而确定其所在的主机IP。
另外,获取容器的端口也很重要。通常,容器内的应用程序会绑定到一个特定的端口,而这个端口需要映射到宿主机的某个端口上,以便外部可以访问。这种映射关系可以通过Docker的运行参数或者Kubernetes的配置文件来设置。
在Java应用中,可以通过以下方式获取容器的端口信息:
int port = Integer.parseInt(System.getenv("PORT"));
这种方式适用于通过环境变量传递端口信息的场景。在实际应用中,你需要确保容器启动时已经正确设置了这些环境变量。
对于获取宿主机IP,可以使用如下Java代码:
String hostIp = InetAddress.getLocalHost().getHostAddress();
这段代码会返回容器所在的宿主机的IP地址。
综上所述,通过参数传递和环境变量的方式,Java应用可以轻松获取到当前容器的IP地址和端口信息。
⑵ java中获取本地IP地址
方法如下:
方法一,使用CMD命令:
public static String getLocalIPForCMD(){
StringBuilder sb = new StringBuilder();
String command = "cmd.exe /c ipconfig | findstr IPv4";
try {
Process p = Runtime.getRuntime().exec(command);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while((line = br.readLine()) != null){
line = line.substring(line.lastIndexOf(":")+2,line.length());
sb.append(line);
}
br.close();
p.destroy();
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
方法二,使用Java方法:
public static String getLocalIPForJava(){
StringBuilder sb = new StringBuilder();
try {
Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
while (en.hasMoreElements()) {
NetworkInterface intf = (NetworkInterface) en.nextElement();
Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses();
while (enumIpAddr.hasMoreElements()) {
InetAddress inetAddress = (InetAddress) enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress() && !inetAddress.isLinkLocalAddress()
&& inetAddress.isSiteLocalAddress()) {
sb.append(inetAddress.getHostAddress().toString()+"\n");
}
}
}
} catch (SocketException e) { }
return sb.toString();
}
⑶ java服务端如何获得客户端的ip
网络通信可分为两种模式:TCP有连接的通信
UDP无连接的通信
依照上述的问题我可以理解为你是内要进行有连接的通信。容是要经过三次握手才能实现可靠的连接
第一次:建立连接时三次握手,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN(Synchronize Sequence Numbers)同步序列号。
服务器端即可使用:
Socket s=serverSocket.accept();
String clientIP=s.getInetAddress().toString();
这就实现了java服务器端获取到连接此服务器的客户端的IP了,你若想实现获取所有连接此服务器的客户端的IP,你可以把每次accept()返回的socket放进全局的Vector里面,然后在遍历这个vector方法就同上代码咯……
⑷ java截取ip为什么IP是127.0.0.1
你在本地访问本地服务器??
那是对的。
你预期的结果是什么?是你上万维网的那个IP吗?还是你局域网IP(如果局域网的话)?
是这样的,IP是针对你的上一级资源分配设备的,比如路由器或交换机。你的IP主要做的事情是让上一级在网络层能寻址到你。
如果你是局域网上网,可能你在你们局域网内是192.168.1.33(举个例子),你访问网络,网络看到的是帮助你最终连入万维网的那个设备的IP,你的这个IP是看不到的。
所以,自己访问自己,当然看到127.0.0.1了,也不可能是“localhost”。