动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.使用SWT开发基于Java的图形用户界.
.运用DBUnit进行高效的单元测试.
.嵌入式开发技术前沿:仔细研究J2.
.java 技术分析.
.用java实现外部调用exe文件.
.通过---JAVA程序--打开文本!.
.“Java中可复用事件处理的设计与.
.Java核心代码例程之:VectorDemo.
.linux 下使用jasperreport的注意.
.Java程序员需要了解的几个开源协.
..NET和J2EE该相互学习什么?.
.JOX(关于Java处理xml文档的讨论).
.Java 各类本地接口——规范大全.
.关于动态绑定的理解.
.Java网络数据库编程及其应用.
.Java和C++的基本差异.
.J2SE(TM) 5.0 语言特性.
.关于J2ME MIDP1.0.3中的安全问题.
.J2EE应用部署(二):实践篇.
.Java有用论.

Java联网增强技术

发表日期:2008-1-5 |



  Java联网增强技术
  
         
  
  ——研究J2SE1.4中最新的联网特姓
  
  作者:John Zukowski 本文选自:IBM DW中国 2003年05月20日
  
    随着 Merlin 的发布,java.net 包发生了很大的变化。不仅添加了六个类和三个异常,而且现有的类中有许多都进行了更改以支持额外的功能(比如改进 URL 编码和解码)。在本文中,John Zukowski 向您说明了用 Java 技术进行联网有什么新鲜和不同之处,其中包括 J2SE 1.4 中最新的联网功能:IPv6 支持、URI、网络接口、安全套接字和非绑定套接字。
  
    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
  
  
  
  对未连接套接字和非绑定套接字的支持
  
    通常,象在套接字之间进行读写之类的操作都是阻塞操作。在操作完成之前,调用线程都不能继续运行。在 Merlin 新 I/O(NIO)类的帮助下,联网类现在可以是非阻塞型的。无论哪一种情况(阻塞或非阻塞),新的 InetSocketAddress 和 SocketAddress 类都答应您打开到主机和端口的连接,然后在真正连接到主机之前为该连接设置一些选项。清单 3 显示了基本的操作序列:
  
  
  
  清单 3. 连接至主机和端口 String hostname = ...;
  
  int port = ...;
  
  SocketAddress socketAddress =
  
  new InetSocketAddress(host, port);
  
  SocketChannel channel = SocketChannel.open();
  
  channel.configureBlocking(false);
  
  channel.connect(socketAddress);
  
  
  
    请在下个月的专栏文章中查阅有关 NIO 包的更多信息。
  
  用安全套接字进行连接
  
    Merlin 中有一个新的包:javax.net.ssl。该包提供了使用 Java 安全套接字扩展(Java Secure socket extension,JSSE)的安全通信,该扩展更常用的名称是 https URL 的安全套接字层(secure sockets layer,SSL)支持。您不再需要用标准扩展库来实现 SSL 支持 - 它现已随核心库一起提供。通过请求来自 SSLSocketFactory 的 SSL 套接字,您自动地就获得了一个安全连接(假设您所连接的服务器支持该功能)。获取套接字后,您不必再执行任何非凡的操作了 - 它会完全象普通套接字那样进行通信。
  
    在清单 4 中,我们使用 SSL 来连接用户指定的站点,或 Verisign,并获取该站点的入口页面。可以随意将输出保存到文件中,以便查看。
  
  
  
  清单 4. 通过安全套接字进行连接 import java.io.*;
  
  import java.net.*;
  
  import javax.net.*;
  
  import javax.net.ssl.*;
  
  public class SslSample {
  
  static final int HTTPS_PORT = 443;
  
  public static void main(String args[]) throws IOException {
  
  String hostname;
  
  // If host not provided, connect to Verisign
  
  if (args.length == 0) {
  
  hostname = "www.verisign.com";
  
  } else {
  
  hostname = args[0];
  
  }
  
  // Get socket factory
  
  SocketFactory factory = SSLSocketFactory.getDefault();
  
  // Get socket from factory
  
  Socket socket = factory.createSocket(hostname, HTTPS_PORT);
  
  // Send request
  
  OutputStream os = socket.getOutputStream();
  
  PrintWriter pw = new PrintWriter(os);
  
  // Setup command
  
  String command = "GET / HTTP/1.0\r\n\r\n";
  
  pw.print(command);
  
  pw.flush();
  
  // Get response
  
  InputStream is = socket.getInputStream();
  
  InputStreamReader isr = new InputStreamReader(is);
  
  BufferedReader br = new BufferedReader(isr);
  
  String line;
  
  while ((line = br.readLine()) != null) {
  
  System.out.println(line);
  
  }
  
  pw.close();
  
  br.close();
  
  socket.close();
  
  }
  
  }
  
  
  
    还有一个 HttpsURLConnection 类,可以象 jave.net.URLConnection 那样使用它。
  
  旧的类,新的技巧
  
    并不是所有的联网增强技术都是在新的类(和包)中实现的。许多现有的类也得到了增强。有些功能主要是在后台进行的,比如改进的 FTP 协议处理程序。现在,Merlin 的功能和 RFC1738 和 RFC959 的功能(请参阅参考资料)匹配得更加紧密了,包括对被动方式的支持。另外,URLEncoder 和 URLDecoder 类
上一篇:在运行时刻从文件中调入Class 人气:414
下一篇:90%的重叠10%的较量 ——C#与Java述评 人气:446
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-9-4 LPLY CMS 网站管理系统 v5.0
2008-9-4 缤纷互动视频交友 v3.01.902
2008-9-4 ADN视频收藏专家 v3.0 bulid 080
2008-9-4 天空网络电影系统SKYUC v2.5.6 简
2008-9-4 Web Wiz Rich Text Editor(文本编
2008-9-4 幻影动漫网视频系统(Ppdong) v1.
2008-9-4 乐维电脑在线DIY配置系统
2008-9-4 老樊文章管理系统SQL版
2008-9-4 ASP.NET 2.53 缩略图水印组件源码
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵