当前位置: 源码素材网 » Java教程 » 详情页

Java实现网络主机查找功能

  •   时间:2018-12-19
  • 概述:查找主机

Java查找网络主机,nslookup 在UNIX 系统里起着将主机名转换为IP 地址和将IP 地址转换为主机名的功能,并且它有两种工作模式:交互式和命令行式。本例通过编程模仿实现nslookup 这种功能,实现主机查找。

实现方法:本例实现了三个方法main()、lookup()、isHostName(),main()方法决定是否有命令行参数,如果有命令行参数,就调用lookup()去进行处理,如果没有命令行参数,将通过BufferedReader 对象的readLine( )方法读输入流,而BufferedReader 对象是将InputStreamReader(System.in)作为参数创建的。将输入流作为参数调用lookup()方法。

lookup()方法使用了InetAddress 的getByName()方法来发现被请求的主机。Lookup()方法调用isHostName()方法确定输入流是主机名还是IP 地址。

isHostName()方法查看输入流的每个字符,根据是否为数字和点号来判断该输入流是IP 地址还是主机名。

程序代码编写如下:

1.编写useHostLookup 类的基本框架,在该类中包括返回值为字符串类型的lookup ()方法、返回值为布尔类型的isHostName()方法和无返回值的main()方法,代码如下:

public class useHostLookup
{
public static void main (String[] args);
private static String lookup(String host);
private static boolean isHostName(String host);
}

2.Lookup()方法发现主机,判断参数获得的是主机名还是IP 地址:

private static String lookup(String host)
{
	InetAddress thisComputer;
	byte[] address;
	// 获得IP地址字节
	try
	{
		thisComputer = InetAddress.getByName(host);
		address = thisComputer.getAddress( );
	}
	catch (UnknownHostException e)
	{
		return "Cannot find host " + host;
	}
	if (isHostName(host))
	{
		// 输出IP地址
		String dottedQuad = "";
		for (int i = 0; i < address.length; i++)
		{
			int unsignedByte = address[i] < 0 ? address[i] + 256 : address[i];
			dottedQuad += unsignedByte;
			if (i != address.length-1) dottedQuad += ".";
		}
		return dottedQuad;
	}
	else
	{
		// 这是一个IP地址
		return thisComputer.getHostName( );
	}
}

3.IsHostName()方法判断从参数中获得的是否为主机名:

private static boolean isHostName(String host)
{
	char[] ca = host.toCharArray( );
	//如果使用的字符既没有数字也不是一个句点,那么host可能是一个主机名
	for (int i = 0; i < ca.length; i++)
	{
		if (!Character.isDigit(ca[i]))
		{
			if (ca[i] != '.') return true;
		}
	}
	return false;
}

4.Main()方法调用lookup()方法输出IP 地址:

public static void main (String[] args)
{
	if (args.length > 0)
	{
		// 使用命令行
		for (int i = 0; i < args.length; i++)
		{
			System.out.println(lookup(args[i]));
		}
	}
	else
	{
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		System.out.println("Enter names and IP addresses. Enter \"exit\" to quit.");
		try
		{
			while (true)
			{
				String host = in.readLine( );
				if (host.equals("exit")) break;//退出
				System.out.println(lookup(host));
			}
		}
		catch (IOException e)
		{
			System.err.println(e);
		}
	}
}

请在代码头部添加以下引用:import java.net.*;import java.io.*;

    相关声明:

      若“Java实现网络主机查找功能”有损您的权益,请告之我们删除内容。
      部分文章来源于网络,版权归原作者所有。