⑴ 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」。