博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java网络编程从入门到精通(30):定制accept方法
阅读量:6692 次
发布时间:2019-06-25

本文共 2005 字,大约阅读时间需要 6 分钟。

使用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
请求头的内容。这个运行结果会根据客户机配置的不同而有所差异。

 本文转自 androidguy 51CTO博客,原文链接:
http://blog.51cto.com/androidguy/214344
,如需转载请自行联系原作者
你可能感兴趣的文章
android开发艺术探索学习 之 结合Activity的生命周期了解Activity的LaunchMode
查看>>
第三百一十节,Django框架,模板语言
查看>>
关于游戏行业目前的形势
查看>>
Struts2+Spring+Hibernate+Jbpm技术实现Oa(Office Automation)办公系统第一天框架搭建
查看>>
POJ 1655 Balancing Act(树的重心)
查看>>
Loadrunner IP欺骗
查看>>
大型站点架构体系的演变(上)
查看>>
Linux-中断的本质
查看>>
springboot跨域请求设置
查看>>
Ajax介紹
查看>>
linux下vim命令具体解释
查看>>
Java基础(四):Java Number & Math 类、Character 类、String 类、StringBuffer & StringBuilder 类...
查看>>
CLH队列锁
查看>>
不受控制的 position:fixed
查看>>
Light OJ 1406 Assassin`s Creed 状态压缩DP+强连通缩点+最小路径覆盖
查看>>
精简版—愤慨的小鸟
查看>>
一键部署Moodle开源课程管理系统
查看>>
SQL Server 数据库引擎怎样记录完整备份后修改过的数据
查看>>
[C#] .NET Core项目修改project.json来引用其他目录下的源码等文件的办法 & 解决多框架时 project.json 与 app.config冲突的问题...
查看>>
plsql developer ini
查看>>