Merlin的魔力: Java联网增强技术

Java 编程中的联网包括了定位和识别资源的能力以及通过 TCP 和 UDP 连接进行通信的能力。首先,您需要识别具有象 www.ibm.com 这样名称的资源,然后打开到该资源的连接,最后在您自己和连接的另一端之间发送信息包。由于安全性原因,可能会包括其它任务,但是整个过程是一样的。对于 Java 平台,会在 java.net 包中找到支持这些操作的类。从 Java 编程的早期到现在,这些操作中大多数都未曾发生太大的变化。但是,随着 Merlin 的发展,这些基本操作中有些已经作了改进,以支持有价值的新功能。在本文中,我们将研究五个此类功能:IPv6 支持、URI、网络接口、非绑定套接字和安全套接字。

对 IPv6 地址的支持

首先让我们研究一下对下一代因特网协议 V6(Internet Protocol V6,IPv6)寻址体系结构的新支持。借助于 InetAddress 的两个新子类( Inet4Address 和 Inet6Address ),您能够与基于 TCP 和 UDP 的应用程序进行连接。 Inet4Address 支持大多数机器所支持的较旧的(而且通常是唯一的)IP 寻址样式,localhost 的格式为 127.0.0.1 。RFC2373(请参阅 参考资料)中所定义的新寻址方案提供了一种用冒号隔开的格式,其中 0:0:0:0:0:0:0:1 是与 127.0.0.1 等价的回送地址。新的类允许应用程序支持一种或这两种寻址方案。

对 IPv6 的支持取决于底层平台是否支持它,Solaris 8 和更高版本,以及 Linux 2.1.2 和更高(RedHat 6.1+)版本都支持 IPv6,而 Microsoft Windows 并不支持它(Microsoft 的 Window 2000 实现是个有限的实现)。希望 J2SE 1.4 的 Windows 版本以后能支持 IPv6。

认识统一资源标识符

java.net 包现已包括了统一资源标识符(uniform resource identifier,URI)类。可将 URI 看作是幕后没有协议处理程序的统一资源定位符(uniform resource locator,URL)。通常,URL 看上去象 http://www.ibm.com 。为了使 Java 语言运行时理解 URL,它需要知道该怎么处理以 http: 开头的信息。以前,如果您提出新协议(例如,象 jdbc:database ),那么若没有协议处理程序,则您不能将 jdbc:database 字符串作为 URL 处理。相反,您不得不严格地将它作为字符串处理,这正是 JDBC 现在所做的。

URI 的典型格式是: [scheme:][//authority][path][?query][#fragment] ,其中 authority 通常就是主机名。但是,它还可以包括用户登录信息和端口: [userInfo@]host[:port] 。URI 类自身提供了一系列的 getter 方法,以便了解 URI 各个特定的部分。在您先前传递看上去象 URL 的字符串(但这仅为了描述 URL 而非使用它)的地方,您应当使用该类。

用 NetworkInterface 列出网络连接

您是否曾经想知道哪个联网接口是可用的,但是在不回复到本机代码的情况下又不知道该如何询问呢?通常,连接至因特网的大多数机器中有两个连接:到其自身的本地循环和到其本地服务供应商的连接。但是,有些机器是 多宿主的。它们有多个网卡,每个网卡都有一个到因特网的独立连接并且都有自己的名称和地址。有了这个新的 NetworkInterface 接口,您就可以在向外发送多点广播数据报时指定使用哪个网卡,或查看网络连接是否正常。清单 1 演示了该类的用法:

清单 1. 列出网络接口

import java.net.*;
import java.util.Enumeration;
public class Nets {
  public static void main(String args[]) throws SocketException {
   Enumeration enum = NetworkInterface.getNetworkInterfaces();
   while (enum.hasMoreElements()) {
    NetworkInterface net = (NetworkInterface)enum.nextElement();
    System.out.println(
     "Names: " + net.getName() + " / " + net.getDisplayName());
    Enumeration enum2 = net.getInetAddresses();
    while (enum2.hasMoreElements()) {
     InetAddress address = (InetAddress)enum2.nextElement();
     System.out.println("\tAddress: " + address.getHostAddress());
    }
   }
  }
}

您运行该程序所得的结果肯定是不同的。清单 2 包括了您想看到的输出样本:

清单 2. 清单 1 的样本结果

Names: lo / MS TCP Loopback interface
     Address: 127.0.0.1
Names: eth0 / 3Com EtherLink PCI
     Address: 192.168.0.109

时间: 2025-01-09 06:53:27

Merlin的魔力: Java联网增强技术的相关文章

下一代Java Applet插件技术

Applet回来了! 为了在网络中传递你的程序,是时候再次考虑Java Applet技术了.下一代Java插件技术以一种不同的 ,比过去更高效.更可靠的途径来运行Applet.现在你可以获得如下好处: 增强的可靠性 改进的用户体验 在后台启动Applet 内建的JNLP支持 针对每个Applet的命令行参数 堆内存大小,Java 2D API加速选项 改进的Java/JavaScript程序设计语言集成 改进的Windows Vista支持 签名的Applet现在可以在Internet Expl

Merlin的魔力: Swing 的新JFormattedTextField组件

Java 2 标准版(J2SE),版本 1.4 为可用的 GUI 元素调色板添加了 2 个新的 Swing 组件: JSpinner 和 JFormattedTextField .在 Merlin 的魔力专栏的第一篇我们就介绍了 JSpinner 组件:我们现在将要探讨 JFormattedTextField . 虽然 JFormattedTextField 组件看起来与 JTextField 相似,但是它的行为与 JSpinner 完全不同.在最简单的情况下,您可以为电话号码提供一个类似"(#

Merlin的魔力: 异常和日志记录

为了理解问题的根源并适当地响应,Merlin 发行版添加了几个与异常处理相关的功能.现在,您不必手工分析堆栈转储信息就可以检查堆栈跟踪信息,并且可以把异常连成一条菊花链,这样就能够在重新抛出异常时附加上异常的原因,这会大大促进调试工作.此外,现在还有一个内建的日志记录工具用来记录消息的不同级别.在 Merlin 的魔力系列的这一部分,John Zukowski 演示了这些新的日志记录和异常功能的工作原理并提供了一个示例程序以供查看和下载. 这个 Merlin 发行版中新添加的许多功能(比如异常处

Merlin的魔力: J2SE 1.4.2提供两种新的外观设计

迄今为止,所有Merlin的魔力专栏都是关于Java 1.4版本的新特性,本文主要针对目前正在测试的1.4.2版本.Sun认为Windows的经典外观已经过时,没有人再使用Motif了 -- 至少在用户桌面上.您将在这一标准Java平台的最新版本中找到新款Windows外观以及称为GTK+的全新外观,当用户使用Windows XP操作系统时新款Windows外观看起来象Windows XP,GTK+使用普通Linux桌面的外观. Swing架构提供可插入外观框架.例如,该框架提供一种标准方法使所

《大规模Java平台虚拟化与调优》——1.3 大规模Java平台的技术因素

1.3 大规模Java平台的技术因素 当设计大规模Java平台时,需要考虑很多的技术因素.例如,对于构建良好的大规模Java平台来说,需要很好地理解Java垃圾回收(garbage collection,GC)以及JVM架构.硬件和hypervisor架构.本节中,概要讨论了GC.非一致内存架构(Non-Uniform Memory Architecture,NUMA),以及在理论和实际操作中的内存限制.稍后的章节会给出更为详细的描述,但首先在整体上理解围绕大规模Java平台设计有哪些问题是非常

Tomcat与Java Web开发技术详解连载之一

web|详解 本章介绍如何在Tomcat上创建和发布Web应用.这里首先讲解Tomcat的目录结构以及Web应用的目录结构,接着介绍如何将HTML.Servlet.JSP和Tag Library部署到Web应用中,然后介绍把整个Web应用打包并发布的方法,最后介绍如何在Tomcat上配置虚拟主机. 本章侧重于讨论Web应用的结构和发布方法,所以没有对本章的Servlet和JSP的例子进行详细解释,关于Servlet和JSP的技术可以分别参考其它章节的内容. 2.1 Tomcat的目录结构 在To

Tomcat与Java Web开发技术详解连载之二

web|详解 2.2.4 部署HTML文件 在helloapp目录下加入index.htm文件,这个文件仅仅用来显示一串带链接的字符"Welcome to HelloApp", 它链接到login.jsp文件.以下是index.htm文件的代码: <html><head><title>helloapp</title></head><body ><p><font size="7"

Tomcat与Java Web开发技术详解连载之三

web|详解 2.2.8 创建并发布WAR文件 Tomcat既可以运行采用开放式目录结构的Web应用,也可以运行WAR文件.在本书配套光盘的sourcecode/chapter2/helloapp目录下提供了所有源文件,只要把整个helloapp目录拷贝到/webapps目录下,即可运行开放式目录结构的helloapp应用.在Web应用的开发阶段,为了便于调试,通常采用开放式的目录结构来发布Web应用,这样可以方便地更新或替换文件.如果开发完毕,进入产品发布阶段,应该将整个Web应用打包为WAR

JSP中使用Java的JDBC技术实现对数据库的各种操作

在JSP 中可以使用Java 的JDBC 技术,实现对数据库中表记录的查询.修改和删除等操作.JDBC 技术在JSP 开发中占有很重要的地位. JDBC(Java DataBase Connectivity)是Java 数据库连接API.简单地说, JDBC 能完成三件事: (1) 与一个数据库建立连接, (2) 向数据库发送SQL 语句, (3) 处理数据库返回的结果. JDBC 和数据库建立连接的一种常见方式是建立起一个JDBC─ODBC 桥接器.由于ODBC 驱动程序被广泛的使用,建立这种