科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Java2 参考大全:第18章 网络 (5)

Java2 参考大全:第18章 网络 (5)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Java2 参考大全:第18章 网络 (5)

作者:Herbert Schildt 著 张玉清 吴溥峰等 译 来源:清华大学出版社 2007年10月30日

关键字: 网络 java

  • 评论
  • 分享微博
  • 分享邮件

18.6 URLConnection类
URLConnection是访问远程资源属性的一般用途的类。如果你建立了与远程服务器之间的连接,你可以在传输它到本地之前用URLConnection来检察远程对象的属性。这些属性由HTTP 协议规范定义并且仅对用HTTP 协议的URL 对象有意义。我们这里将验证URLConnection最有用的原理。下面的例子中我们用一个URL对象的openConnection( )方法创建了一个URLConnection类,然后用它来检查文件的属性和内容:
// Demonstrate URLConnection.
import java.net.*;
import java.io.*;
import java.util.Date;
class UCDemo
{
public static void main(String args[]) throws Exception {
int c;
URL hp = new URL("http://www.osborne.com");
URLConnection hpCon = hp.openConnection();
System.out.println("Date: " + new Date(hpCon.getDate()));
System.out.println("Content-Type: " + hpCon.getContentType());
System.out.println("Expires: " + hpCon.getExpiration());
System.out.println("Last-Modified: " +
new Date(hpCon.getLastModified()));
int len = hpCon.getContentLength();
System.out.println("Content-Length: " + len);
if (len > 0) {
System.out.println("=== Content ===");
InputStream input = hpCon.getInputStream();
int i = len;
while (((c = input.read()) != -1) && (--i > 0)) {
System.out.print((char) c);
}
input.close();
} else {
System.out.println("No Content Available");
}
}
}
该程序建立了一个经过端口80通向www.osborne.com 的HTTP 连接。然后列出了标头值并检索内容。下面是输出的前几行:
Date: Fri Oct 06 14:17:10 CDT 2000
Content-Type: text/html
Expires: 0
Last-Modified: Tue Oct 26 01:36:57 CDT 1999
Content-Length: 529
=== Content ===
URL和URLConnection类对于希望建立与HTTP服务器的连接来获取信息的简单程序来说是非常好的。对于更复杂的应用程序,你会发现学习HTTP协议规范,实现你自己的包装程序是比较好的。
18.7 TCP/IP服务器套接字
如我们在前面提到的,Java具有用来创建服务器应用程序的不同的套接字类。ServerSocket类用来创建服务器,服务器监听本地或远程客户程序通过公共端口的连接。既然Web驱动着Internet中的大部分活动,本节就开发一个可运行的Web服务器(http)。ServerSocket与通常的Sockets类完全不同。当创建一个ServerSocket类,它在系统注册自己对客户连接感兴趣。ServerSocket的构造函数反映了希望接受连接的端口号及你希望排队等待上述端口的时间(该项可选)。队列长度告诉系统多少与之连接的客户在系统拒绝连接之前可以挂起。队列的默认长度是50。构造函数在不利情况下可以引发IOException异常。下面是构造函数:
ServerSocket(int port) 在指定端口创建队列长度为50的服务器套接字。
ServerSocket(int port, int maxQueue) 在指定端口创建一个最大队列长度为maxQueue的服务器套接字。
ServerSocket(int port, int maxQueue,
InetAddress localAddress)
在指定端口创建一个最大队列长度为maxQueue的服务器套接字。在一个多地址主机上,localAddress指定该套接字约束的IP地址。
ServerSocket有一个额外的accept()方法,该方法是一个等待客户开始通信的模块化调用,然后以一个用来与客户通信的常规Socket返回。
18.8 缓存代理HTTP服务器
本节的剩余部分,我们讲述一个简单的缓存代理HTTP服务器,名为http,来演示客户与服务器套接字。http只支持GET操作及硬编码的MIME类型的一小部分(MIME类型是多媒体内容的类型描述符)。代理HTTP服务器是单线程的,该线程中每一个请求依次被处理,其他请求等待。这是缓存的相当天真的策略——它在RAM永久保存所有信息。http作为一个代理服务器时,它还拷贝每一个它获取的文件到本地缓存中。对于本地缓存,它没有用于刷新和无用单元回收的策略。除此之外,http代表了客户和服务器套接字的一个多产的例子,它是值得探究和容易扩展的。
查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章