快速业务通道

Java网络编程从入门到精通(30):定制accept方法 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21

Java网络编程从入门到精通(30):定制accept方法

时间:2011-01-13 BlogJava 银河使者

使用ServerSocket类的implAccept方法可以使用accept方法返回一个Socket子类对象。但implAccept是protected方法,因此,必须在ServerSocket类的子类中覆盖accept方法,然后在accept方法中使用implAccept方法重新设置Socket对象。implAccept方法的定义如下:

protected final void implAccept(Socket s) throws IOException

只要通过implAccept方法设置一个未连接的Socket子类对象,accept方法就会返回一个已经连接的Socket子类对象(accept返回的是Socket对象,要想得到Socket子类对象,必须进行类型转换)。在大多数时候不需要改变accept方法的行为,但有时需要一个有更多特性的Socket类。通过implAccept方法就可以达到这个目的。下面的代码定义了一个从Socket继承的HttpSocket类,这个类除了具有Socket类的一切特性外,还增加了一个方法getRequestHeaders,用于返回HTTP请求的头信息。

package server;    import java.net.*;    import java.io.*;    class HttpSocket extends Socket    {        public String getRequestHeaders() throws Exception        {            InputStreamReader isr = new InputStreamReader(getInputStream());            BufferedReader br = new BufferedReader(isr);            String s = "", result = "";            while (!(s = br.readLine()).equals(""))                result = result + s + "\r\n";            return result;        }    }    class HttpServerSocket extends ServerSocket    {        public HttpServerSocket(int port) throws IOException        {            super(port);        }        public Socket accept() throws IOException  // 覆盖accept方法        {            Socket s = new HttpSocket();            implAccept(s);   // 将accept方法返回的对象类型设为HttpSocket            return s;        }    }    public class CustomAccept    {        public static void main(String[] args) throws Exception        {            HttpServerSocket httpServerSocket = new HttpServerSocket(1234);            HttpSocket httpSocket = (HttpSocket) httpServerSocket.accept();            System.out.println(httpSocket.getRequestHeaders()); // 向控制台输出HTTP请求头            httpServerSocket.close();        }    }

测试

执行如下命令:

java server.CustomAccept

在IE的地址栏中输入如下Url:

http://localhost:1234

CustomAccept在控制台中的运行结果:

GET / HTTP/1.1 Accept: */* Accept-Language: zh-cn UA-CPU: x86 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; InfoPath.2) Host: localhost:1234 Connection: Keep-Alive

上面的运行结果就是IE向服务端发出的HTTP请求头的内容。这个运行结果会根据客户机配置的不同而有所差异。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号