ServerSocket

Socket类代表一个客户端套接字,即任何时候你想连接到一个远程服务器应用的时候你构造的套接字,现在,假如你想实施一个服务器应用,例如一个HTTP服务器或者FTP服务器,你需要一种不同的做法。这是因为你的服务器必须随时待命,因为它不知道一个客户端应用什么时候会尝试去连接它。为了让你的应用能随时待命,你需要使用java.net.ServerSocket类。这是服务器套接字的实现。
    ServerSocket和Socket不同,服务器套接字的角色是等待来自客户端的连接请求。一旦服务器套接字获得一个连接请求,它创建一个Socket实例来与客户端进行通信。
    要创建一个服务器套接字,你需要使用ServerSocket类提供的四个构造方法中的一个。你需要指定IP地址和服务器套接字将要进行监听的端口号。通常,IP地址将会是127.0.0.1,也就是说,服务器套接字将会监听本地机器。服务器套接字正在监听的IP地址被称为是绑定地址。服务器套接字的另一个重要的属性是backlog,这是服务器套接字开始拒绝传入的请求之前,传入的连接请求的最大队列长度。
    其中一个ServerSocket类的构造方法如下所示:

public ServerSocket(int port, int backLog, InetAddress bindingAddress);

对于这个构造方法,绑定地址必须是java.net.InetAddress的一个实例。一种构造InetAddress对象的简单的方法是调用它的静态方法getByName,传入一个包含主机名称的字符串,就像下面的代码一样。

InetAddress.getByName("127.0.0.1");

下面一行代码构造了一个监听的本地机器8080端口的ServerSocket,它的backlog为1。

new ServerSocket(8080, 1, InetAddress.getByName("127.0.0.1"));

一旦你有一个ServerSocket实例,你可以让它在绑定地址和服务器套接字正在监听的端口上等待传入的连接请求。你可以通过调用ServerSocket类的accept方法做到这点。这个方法只会在有连接请求时才会返回,并且返回值是一个Socket类的实例。Socket对象接下去可以发送字节流并从客户端应用中接受字节流,就像前一节"Socket类"解释的那样。实际上,这章附带的程序中,accept方法是唯一用到的方法。

应用程序

我们的web服务器应用程序放在ex01.pyrmont包里边,由三个类组成:

·      HttpServer

·      Request

·      Response

这个应用程序的入口点(静态main方法)可以在HttpServer类里边找到。main方法创建了一个HttpServer的实例并调用了它的await方法。await方法,顾名思义就是在一个指定的端口上等待HTTP请求,处理它们并发送响应返回客户端。它一直等待直至接收到shutdown命令。
    应用程序不能做什么,除了发送静态资源,例如放在一个特定目录的HTML文件和图像文件。它也在控制台上显示传入的HTTP请求的字节流。不过,它不给浏览器发送任何的头部例如日期或者cookies。
    现在我们将在以下各小节中看看这三个类。

转载于:https://www.cnblogs.com/macula7/archive/2009/08/16/1960634.html

Tomcat源码学习(4)-How Tomcat works(转)相关推荐

  1. Tomcat源码学习(9)-How Tomcat works(转)

    第2章:一个简单的Servlet容器 概要 本章通过两个程序来说明你如何开发自己的servlet容器.第一个程序被设计得足够简单使得你能理解一个servlet容器是如何工作的.然后它演变为第二个稍微复 ...

  2. Tomcat源码学习(7)-How Tomcat works(转)

    Response类 ex01.pyrmont.Response类代表一个HTTP响应,在Listing 1.6里边给出.          Listing 1.6: Response类 package ...

  3. Tomcat源码学习(一)

    Tomcat源码学习(一) 已有 9159 次阅读 2008-3-13 03:10 |个人分类:Tomcat|系统分类:开发 http://blog.ccidnet.com/home.php?mod= ...

  4. java tomcat源码_详解Tomcat系列(一)-从源码分析Tomcat的启动

    在整个Tomcat系列文章讲解之前, 我想说的是虽然整个Tomcat体系比较复杂, 但是Tomcat中的代码并不难读, 只要认真花点功夫, 一定能啃下来. 由于篇幅的原因, 很难把Tomcat所有的知 ...

  5. Tomcat源码解析五:Tomcat请求处理过程

    前面已经分析完了Tomcat的启动和关闭过程,本篇就来接着分析一下Tomcat中请求的处理过程. 在开始本文之前,咋们首先来看看一个Http请求处理的过程,一般情况下是浏览器发送http请求-> ...

  6. tomcat源码分析(一)从tomcat架构说起

    首先dowload源码并导入到Eclipse中,导入后代码代码的层次如下图所示.先简单来看下tomcat源码的结构.javax这个包主要是有关JavaEE规范的,比如Servlet等等,并不是我们主要 ...

  7. tomcat源码学习

    2019独角兽企业重金招聘Python工程师标准>>> 1.下载源码 在eclicpse 用svn导入源码   http://svn.apache.org/repos/asf/tom ...

  8. Tomcat源码解析三:tomcat的启动过程

    Tomcat组件生命周期管理 在Tomcat总体结构 (Tomcat源代码解析之二)中,我们列出了Tomcat中Server,Service,Connector,Engine,Host,Context ...

  9. (精)tomcat 源码学习

    Tomcat6是最新版本的web容器,其支持最新版本的servlet2.5和jsp2.1.而且Tomcat6架构也是经过重新设计优化过的,所以我们有必要分析一下它的架构过程.显然,这是一个通过阅读To ...

最新文章

  1. 网络营销外包期间站长如何挖掘用户真实需求探索网络营销外包真谛
  2. Java中的线程和同步
  3. Python对象基础
  4. Asp.net動態添加控件(转)
  5. centos7.2 Apache+PHP7.2+Mysql5.6环境搭建
  6. 【Android】实现页面跳转
  7. 十七、MySQL触发器(创建、删除、查看)详解
  8. Power BI 如何获取数据做可视化
  9. 矩阵求多元函数的通解_Hessian矩阵
  10. Shell基本应用(学习笔记)
  11. 此版本的 SQL Server 不支持用户实例登录标志。该连接将关闭“的解决
  12. Java排序之Comparable与Comparator详解
  13. 2020-10-22标准正态分布表(scipy.stats)
  14. 【SQL实战项目】电商平台数据分析项目
  15. linux环境变量大全,Linux环境变量总结
  16. Android文字实现跑马灯效果——两种方法实现
  17. 日语假名小写怎么打出来?
  18. NLPCC:自然语言处理和中文计算——诗创作样本
  19. 回顾在江西博微科技工作9个月回顾(吐槽)
  20. STM32三种BOOT模式介绍

热门文章

  1. B+树比B树更适合索引
  2. C语言实现:将一个字符串插入到另一个字符串的指定位置
  3. mybaits二十一:1连接池以及事务控制
  4. springmvc五:使用pojo作为参数
  5. 架构探险笔记7-事务管理简介
  6. 混迹网络运营多年经验之谈
  7. 20172304 《程序设计与数据结构》第六周学习总结
  8. jQuery 之 [ 动画 ]
  9. 阿里七层流量入口 Tengine硬件加速探索之路
  10. UML建模工具EA和Rose比较