知识大全 进阶教程——Java网络编程
Posted 地址
篇首语:心专才能绣得花,心静才能织得麻。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 进阶教程——Java网络编程相关的知识,希望对你有一定的参考价值。
进阶教程——Java网络编程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java最初是作为一种网络编程语言出现的 它能够使用网络上的各种资源和数据 与服务器建立各种传输通道 将自己的数据传送到网络的各个地方 你可以用Java很轻松地完成这些 因为Java类库提供了很强大的网络功能 本章主要介绍如下内容 Java网络类和接口 InetAddress类 URL和URLConnection类 TCP/IP服务器与客户端套接字 Datagram套接字 Java网络类和接口 Java中有关网络方面的功能都定义在程序包中 Java所提供的网络功能可大致分为三大类 URL和URLConnection 这是三大类功能中最高级的一种 通过URL的网络资源表达方式 很容易确定网络上数据的位置 利用URL的表示和建立 Java程序可以直接读入网络上所放的数据 或把自己的数据传送到网络的另一端 Socket 所谓Socket 可以想像成两个不同的程序通过网络的通道 而这是传统网络程序中最常用的方法 一般在TCP/IP网络协议下的客户服务器软件采用Socket作为交互的方式 Datagram 是这些功能中最低级的一种 其他网络数据传送方式 都假想在程序执行时 建立一条安全稳定的通道 但是以Datagram的方式传送数据时 只是把数据的目的地记录在数据包中 然后就直接放在网络上进行传输 系统不保证数据一定能够安全送到 也不能确定什么时候可以送到 也就是说 Datagram不能保证传送质量 InetAddress类 InetAddress类是Java的IP地址封装类 它不需要用户了解如何实现地址的细节 该类的定义如下 public final class InetAddress extends object implements Serializable 该类里有两个字段 hostName(String)和address(int) 即主机名和IP地址 这两个字段是不公开的 我们不能直接访问它们 下面我们介绍InetAddress类提供的Internet地址的操作 创建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) … // 异常处理代码 实例 查询IP地址的版本 InteAddress类有一个getAddress()方法 该方法将IP地址以网络字节顺序作为字节数组返回 当前IP只有 个字节 但是当实行IPV 时 就有 个字节了 如果需要知道数组的长度 可以用数组的length字段 使用getAddress( )方法的一般性用法如下所示 InetAddress inetaddress=InetAddress getLocalHost( ); byte[ ] address=inetaddress getAddress( ); 我们要注意的是返回的byte[ ]字节是无符号的 但是Java没有无符号字节的基本数据类型 因此如果要对返回的字节操作时 必须要将int做适当的调整 下面的方法就实现了这个目的 int unsignbyte = signbyte < ? signbyte + : signbyte; 如果signbyte是负数 就加 使其成为正数 否则就保持不变 下面的程序示例 可以查询IP地址是IPV 还是IPV 还能查询IP的类别 【程序源代码】 // ==================== Program Description ================== // 程序名称 示例 : IPVersion java // 程序目的 查询IP的版本 熟悉InetAddress用法 // ====================================================== import *; import java io *; public class IPVersion public static void main(String args[]) try InetAddress inetadd=InetAddress getLocalHost(); byte[ ] address=inetadd getAddress( ); if (address length== ) System out println( The ip version is ipv ); int firstbyte=address[ ]; if (firstbyte< ) firstbyte += ; if((firstbyte& x )== ) System out println( the ip class is A ); else if ((firstbyte& xC )== x ) System out println( The ip class is B ); else if((firstbyte& xE )== xC ) System out println( The ip class is C ); else if((firstbyte& xF )== xE ) System out println( The ip class is D ); else if((firstbyte& xF )== xF ) System out println( The ip class is E ); else if(address length== ) System out println( The ip version is ipv ); catch (Exception e) ; 【程序输出结果】 The ip version is ipv The ip class is C 【程序注解】 在第 行用getLocalHost()方法得到本地的InetAddress对象inetadd 然后调用getAddress()方法返回IP字节数组 如果是 个字节的 就是IPV 如果是 个字节的 就是IPV 最后我们就可以根据第一个字节数判断网络类型 如果第一字节的形式是 ******* 则这个地址就是A类地址 以表 判定可以得到B C D E类地址 表 判断网络类型的位串 类 高 位 串 A …… B …… C …… D …… E …… 笔者所用主机的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地址将会被代替 下面的程序示例 就综合使用了getHostName( )和tostring( )方法 【程序源代码】 // ==================== Program Description ================== // 程序名称 示例 : Internet java // 程序目的 熟悉getHostName( )和tostring( )方法 // ============================================================== import *; import java io *; class Internet public static void main(String args[]) try InetAddress inetadd; inetadd=InetAddress getLocalHost(); System out println( hostname= +inetadd getHostName()); System out println(inetadd toString() ); catch(Exception e) System out println(e); 【程序输出结果】 D:\\java project>java internet cha138/Article/program/Java/hx/201311/26214相关参考
知识大全 Java进阶 关于Java Socket编程的详细介绍[1]
Java进阶关于JavaSocket编程的详细介绍[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
知识大全 Java编程那些事儿14——Eclipse基础使用进阶
Java编程那些事儿14——Eclipse基础使用进阶 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
Java进阶:Java编写通过代理访问的应用程序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 Java技术进阶 基于Java的IDEA加密算法探讨
Java技术进阶基于Java的IDEA加密算法探讨 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java进阶Java中具有实例缓存的不可变类 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 不可
知识大全 Java进阶 Java应用程序中动态分配CPU资源[2]
Java进阶Java应用程序中动态分配CPU资源[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
知识大全 Java进阶 Java应用程序中动态分配CPU资源[1]
Java进阶Java应用程序中动态分配CPU资源[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
知识大全 Java进阶 Java应用程序中动态分配CPU资源[3]
Java进阶Java应用程序中动态分配CPU资源[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
进阶教程——Java性能优化通用篇 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一通用篇 通
利用Ruby简化你的Java测试(进阶篇) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文是