【java网络编程】之一

Java网络类和接口

    Java中有关网络方面的功能都定义在java.net程序包中。Java所提供的网络功能可大致分为三大类:
    

  • URL和URLConnection 这是三大类功能中最高级的一种。通过URL的网络资源表达方式,很容易确定网络上数据的位置。利用URL的表示和建立,Java程序可以直接读入网络上所放的数据,或把自己的数据传送到网络的另一端。
        
  • Socket 所谓Socket,可以想像成两个不同的程序通过网络的通道,而这是传统网络程序中最常用的方法。一般在TCP/IP网络协议下的客户服务器软件采用Socket作为交互的方式。
        
  • Datagram 是这些功能中最低级的一种。其他网络数据传送方式,都假想在程序执行时,建立一条安全稳定的通道。但是以Datagram的方式传送数据时,只是把数据的目的地记录在数据包中,然后就直接放在网络上进行传输,系统不保证数据一定能够安全送到,也不能确定什么时候可以送到。也就是说,Datagram不能保证传送质量。 

        InetAddress类

        java.net.InetAddress类是Java的IP地址封装类,它不需要用户了解如何实现地址的细节。该类的定义如下:
        public final class InetAddress extends object implements Serializable 

        该类里有两个字段:hostName(String)和address(int),即主机名和IP地址。这两个字段是不公开的,我们不能直接访问它们。 

        下面我们介绍InetAddress类提供的Internet地址的操作。 

        1 创建InetAddress对象的方法

        InetAddress类没有构造方法,要创建该类的实例对象,可以通过该类的静态方法获得该对象。这些静态方法如下。
        
  • public static InetAddress getLocalHost() 

        方法getLocalHost()获得本地机的InetAddress对象,当查找不到本地机器的地址时,触发一个UnknownHostException异常。示范代码如下: 

    try {
        InetAddress address=InetAddress.getLocalHost( );
        …;    	// 其他处理代码
    }
    catch(UnknownException e) { 
        …;		// 异常处理代码
    }


        
  • public static InetAddress getByName (String host) 

        方法getByName(String host)获得由host指定的InetAddress对象,host是计算机的域名(也就是名字),其作用跟IP地址一样,只不过域名标识计算机比IP 标识计算机更易于记忆。如果找不到主机会触发UnknownHostException异常。示范代码如下: 

    try {
        InetAddress  address=InetAddress.getByName( host );
        …;     	// 其他处理代码
    }
    catch(UnknownException e) {
        … 		// 异常处理代码
    }


        
  • public static InetAddress[] getAllByName(String host) 

    我们知道,在Internet上不允许多台计算机共用一个名字(或者说是IP地址),但是在Web中,可以用相同的名字代表一组计算机。通过方法InetAddress[]getAllByName(String host)可以获得具有相同名字的一组InetAddress对象。出错了同样会抛出UnknownException异常。示范代码如下: 

    try {
        InetAddress  address=InetAddress.getAllByName( host );
        …;   	// 其他处理代码
    }
    catch(UnknownException e) {
        … 		// 异常处理代码
    }


        2 实例:查询IP地址的版本

        InteAddress类有一个getAddress()方法,该方法将IP地址以网络字节顺序作为字节数组返回。当前IP只有 4个字节,但是当实行IPV6时,就有16个字节了。如果需要知道数组的长度,可以用数组的length字段。使用getAddress( )方法的一般性用法如下所示: 

    InetAddress inetaddress=InetAddress.getLocalHost( );
    byte[ ] address=inetaddress.getAddress( );


        我们要注意的是返回的byte[ ]字节是无符号的。但是Java没有无符号字节的基本数据类型,因此如果要对返回的字节操作时,必须要将int做适当的调整。下面的方法就实现了这个目的:
        int unsignbyte = signbyte < 0 ? signbyte + 256 : signbyte; 

        如果signbyte是负数,就加256使其成为正数,否则就保持不变。
        下面的程序示例12-1可以查询IP地址是IPV4还是IPV6,还能查询IP的类别。
        【程序源代码】 

    1	// ==================== Program Description ==================
    2	// 程序名称:示例12-1: IPVersion.java
    3	// 程序目的:查询IP的版本,熟悉InetAddress用法
    4	// ======================================================
    5	import java.net.*;
    6	import java.io.*;
    7	
    8	public class IPVersion 
    9	{
    10		   public static void main(String args[])
    11		   {
    12			 try
    13			 {
    14				InetAddress inetadd=InetAddress.getLocalHost();
    15				byte[ ] address=inetadd.getAddress( );
    16				if (address.length==4)
    17				{
    18	            	  System.out.println("The ip version is ipv4");
    19	int firstbyte=address[0];
    20	if (firstbyte<0)
    21	  firstbyte += 256;
    22				  if((firstbyte&0x80)==0 )
    23				  System.out.println("the ip class is A");
    24				  else if ((firstbyte&0xC0)==0x80 )
    25				  System.out.println("The ip class is B");
    26				  else if((firstbyte&0xE0)==0xC0 )
     
    27				    System.out.println("The ip class is C");
    28	                else if((firstbyte&0xF0)==0xE0)
    29	                   System.out.println("The ip class is D");
    30	                   else if((firstbyte&0xF8)==0xF0 )
    31	                      System.out.println("The ip class is E");		   
    32				}
    33				else if(address.length==16)
    34				System.out.println("The ip version is ipv6");
    35		     }
    36		     catch (Exception e)
    37		     { };
    38		   }
    39	}


        【程序输出结果】 

    The ip version is ipv4
    The ip class is C


        【程序注解】
        在第14行用getLocalHost()方法得到本地的InetAddress对象 inetadd,然后调用getAddress()方法返回IP字节数组,如果是4个字节的,就是IPV4,如果是16个字节的,就是IPV6。最后我们就可以根据第一个字节数判断网络类型。如果第一字节的形式是0*******,则这个地址就是A类地址。以表12-1判定可以得到B、C、D、E类地址。 

    表12-1  判断网络类型的位串
    类	高  位  串
    A	0……
    B	10……
    C	110……
    D	1110……
    E	11110……


        笔者所用主机的IP地址是C类地址,所以程序的输出结果为"The ip class is C"。如果运行该程序的主机的IP地址为其他类型,输出结果会随之改变。 

        下面我们再介绍InetAddress类的另外两个方法。
        
  • public String getHostName()
        getHostName()方法返回一个字符串,就是主机名字。如果被查询的机器没有主机名,或者如果使用了Applet,但是它的安全性却禁止查询主机名,则该方法就返回一个具有点分形式的数字IP地址。一般的使用方法如下所示:
    InetAddress inetadd = InetAddress.getLocalHost( );
    String localname= inetadd.getHostName( );


        
  • public String toString()
        toSring()方法得到主机名和IP地址的字符串,其具体形式如下:主机名/点分地址 

        如果一个InetAddress对象没有主机名,则点分格式的IP地址将会被代替。 

        下面的程序示例12-2就综合使用了getHostName( )和tostring( )方法。
        【程序源代码】 

    1	// ==================== Program Description ==================
    2	// 程序名称:示例12-2: Internet.java
    3	// 程序目的:熟悉getHostName( )和tostring( )方法
    4	// ==============================================================
    5	import java.net.*;
    6	import java.io.*;
    7	
    8	class Internet
    9	{
    10		public static void main(String args[])
    11	   	{
    12	   		try {
    13	      		InetAddress inetadd;
    14	         		inetadd=InetAddress.getLocalHost();
    15	         		System. out. println("hostname="+inetadd.getHostName());
    16	         		System. out. println(inetadd.toString() );
    17	      	}
    18	      	catch(Exception e) {
    19	         		System.out.println(e);
    20	      	}
    21	   	}
    22	}


        【程序输出结果】 

    D:java project>java internet
    hostname=kevin
    kevin/192.168.50.31
    D:java project>java internet
    hostname=kevin
    kevin/192.168.50.31

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值