Linux 下JAVA程序获取主机IP问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 下JAVA程序获取主机IP问题相关的知识,希望对你有一定的参考价值。
Enumeration < NetworkInterface > allNetInterfaces = null;
try
allNetInterfaces = NetworkInterface.getNetworkInterfaces();
InetAddress ip = null;
int num = 0;
while (allNetInterfaces.hasMoreElements())
num++;
NetworkInterface netInterface = allNetInterfaces.nextElement();
Enumeration < InetAddress > addresses = netInterface.getInetAddresses();
ip = addresses.nextElement();
if (ip != null && num == 2)
String pcIp = ip.getHostAddress();
String pcName = ip.getHostName();
System.out.print("IP:" + pcIp + " 主机名:" + pcName);
catch (SocketException e)
打印结果是:IP:0:0:0:0:0:0:0:1%1 主机名:localhost6.localdomain6
怎么解决啊?
我是想获取自己的IP和主机名;
用的方法和大家用的在Linux环境下获取本机的IP和主机名是一样的
但是出现了IP:0:0:0:0:0:0:0:1%1 主机名:localhost6.localdomain6
的情况
很明显这个显示的IPV6的ip地址和主机名称。
看看这个你大概就会明白了。
//获取访问者IP
ip= request.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = request.getHeader("Proxy-Client-IP");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = request.getHeader("WL-Proxy-Client-IP");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
ip = request.getRemoteAddr();
参考技术B public static String getLocalIP()
String address = "";
try
Enumeration<?> allNetInterfaces = NetworkInterface
.getNetworkInterfaces();
InetAddress ine = null;
while (allNetInterfaces.hasMoreElements() && address.equals(""))
NetworkInterface netInterface = (NetworkInterface) allNetInterfaces
.nextElement();
if (!netInterface.isVirtual())
Enumeration<?> addresses = netInterface.getInetAddresses();
while (addresses.hasMoreElements() && address.equals(""))
ine = (InetAddress) addresses.nextElement();
if (ine != null && ine instanceof Inet4Address)
if (!ine.getHostAddress().equals("127.0.0.1")
&& !netInterface.isVirtual())
address = ine.getHostAddress();
break;
catch (Exception e)
e.printStackTrace();
return address.trim();
试试这个追问
你这方法我的差的不多,但我还是试了一下,不可以
Java网络程序设计 精简启蒙版
一、基础知识
1.TCP
2.UDP
二、IP地址封装
1.InetAddress类的常用方法
getLocalHost() 返回本地主机的InetAddress对象 InetAddress类型 getByName(String host) 获取指定主机名称的IP地址 InetAddress类型 getHostName() 获取此主机名 String getHostAddress() 获取主机IP地址 String isReachable(int timeout) 在timeout指定的毫秒时间内,测试IP地址是否可达 Boolean
2.示例1:测试IP地址从“192.168.131.1”到“192.168.131.150”范围内所有可以访问的主机的名称,如果对方没有安装防火墙,并且网络连接正常的话,都可以访问的。从输出可以看出,192.168.131.1是本地主机的IP,其他地址都不能联通,可能是因为1000毫秒太短或者对方主机装有防火墙的原因。
package bigjunoba.bjtu.iptoname; import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; public class IPToName { public static void main(String[] args) { String IP = null; for (int i = 1; i <= 150; i++) { IP = "192.168.131." + i; //生成IP字符串 try { InetAddress host; host = InetAddress.getByName(IP); //获取IP封装对象 if (host.isReachable(1000)) { //用1秒的时间测试IP地址是否可达 String hostName = host.getHostName(); System.out.println("IP地址" + IP + "的主机名称是:" + hostName); } } catch (UnknownHostException e) { //捕获未知主机异常 e.printStackTrace(); } catch (IOException e) { //捕获输入输出异常 e.printStackTrace(); } } System.out.println("搜索完毕!"); } }
IP地址192.168.131.1的主机名称是:BigjunOba
搜索完毕!
三、套接字
套接字(Socket)是代表计算机之间网络连接的对象,用于建立计算机之间的TCP连接,使计算机之间可以建立连接并实现网络通信。
1.服务器端套接字
服务器端套接字是SercerSocket类的实例对象,用于实现服务器缓存。ServerSocket类将监视指定的端口,并建立客户端到服务器端套接字的连接,也就是客户负责呼叫任务。
(1)创建服务器端套接字
创建服务器端套接字可以使用4中构造方法。
①ServerScoket()
默认构造方法,可以创建未绑定端口号的服务器套接字。服务器套接字的所有构造方法都需要处理IOException异常。
一般格式为:
try { ServerSocket server = new ServerSocket(); } catch (IOException e) { e.printStackTrace(); }
②ServerScoket(int port)
try { ServerSocket server = new ServerSocket(9527); } catch (IOException e) { e.printStackTrace(); } }
③
try { ServerSocket server = new ServerSocket(9527, 300); } catch (IOException e) { e.printStackTrace(); } }
④
try { ServerSocket server = new ServerSocket(9527, 300); } catch (IOException e) { e.printStackTrace(); } }
(2)创建接收套接字连接
2.客户端套接字
(1)创建客户端套接字
(2)发送和接收数据
四、数据报
1.DatagramPacket
2.DatagramSocket
五、网络聊天程序开发
以上是关于Linux 下JAVA程序获取主机IP问题的主要内容,如果未能解决你的问题,请参考以下文章