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

简介: 本文为原创,如需转载,请注明作者和出处,谢谢!上一篇:Java网络编程从入门到精通(29):服务端Socket的选项 使用ServerSocket类的implAccept方法可以使用accept方法返回一个Socket子类对象。

本文为原创,如需转载,请注明作者和出处,谢谢!

上一篇:Java网络编程从入门到精通(29):服务端Socket的选项

使用ServerSocket类的implAccept方法可以使用accept方法返回一个Socket子类对象。但implAcceptprotected方法,因此,必须在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请求头的内容。这个运行结果会根据客户机配置的不同而有所差异。

下一篇:
Java网络编程从入门到精通(31):非阻塞I/O简介



国内最棒的Google Android技术社区(eoeandroid),欢迎访问!

《银河系列原创教程》发布

《Java Web开发速学宝典》出版,欢迎定购

目录
相关文章
|
18天前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
46 11
|
24天前
|
机器学习/深度学习 数据采集 人工智能
基于Huffman树的层次化Softmax:面向大规模神经网络的高效概率计算方法
层次化Softmax算法通过引入Huffman树结构,将传统Softmax的计算复杂度从线性降至对数级别,显著提升了大规模词汇表的训练效率。该算法不仅优化了计算效率,还在处理大规模离散分布问题上提供了新的思路。文章详细介绍了Huffman树的构建、节点编码、概率计算及基于Gensim的实现方法,并讨论了工程实现中的优化策略与应用实践。
65 15
基于Huffman树的层次化Softmax:面向大规模神经网络的高效概率计算方法
|
11天前
|
JSON Dart 前端开发
鸿蒙应用开发从入门到入行 - 篇7:http网络请求
在本篇文章里,您将掌握鸿蒙开发工具DevEco的基本使用、ArkUI里的基础组件,并通过制作一个简单界面掌握使用
47 8
|
1月前
|
机器学习/深度学习 资源调度 算法
图卷积网络入门:数学基础与架构设计
本文系统地阐述了图卷积网络的架构原理。通过简化数学表述并聚焦于矩阵运算的核心概念,详细解析了GCN的工作机制。
85 3
图卷积网络入门:数学基础与架构设计
|
16天前
|
域名解析 缓存 网络协议
优化Lua-cURL:减少网络请求延迟的实用方法
优化Lua-cURL:减少网络请求延迟的实用方法
|
22天前
|
Web App开发 网络协议 安全
网络编程懒人入门(十六):手把手教你使用网络编程抓包神器Wireshark
Wireshark是一款开源和跨平台的抓包工具。它通过调用操作系统底层的API,直接捕获网卡上的数据包,因此捕获的数据包详细、功能强大。但Wireshark本身稍显复杂,本文将以用抓包实例,手把手带你一步步用好Wireshark,并真正理解抓到的数据包的各项含义。
74 2
|
29天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
70 3
|
2月前
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
2月前
|
网络协议 Java 物联网
Java网络编程知识点
Java网络编程知识点
55 13
|
2月前
|
机器学习/深度学习 数据采集 算法
机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用
医疗诊断是医学的核心,其准确性和效率至关重要。本文探讨了机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用。文章还讨论了Python在构建机器学习模型中的作用,面临的挑战及应对策略,并展望了未来的发展趋势。
147 1

热门文章

最新文章