下载此文档

Java网络编程之服务器套接字.pdf


文档分类:IT计算机 | 页数:约38页 举报非法文档有奖
1/ 38
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/ 38 下载此文档
文档列表 文档介绍
本章内容: 第十一章
● ServerSocket 类
●一些有用的服务器
服务器套接字
前一章我们从客户机的角度讨论了套接字:打开到正在监听的服务器的套接字。但
是,仅有客户机套接字是不够的,如果客户机没有和服务器对话,那么它是没用的。
考虑到这一点,我们前一章所讨论的内容用于写服务器程序是远远不够的。为创建
Socket,主机。在编写服务器程序时不需要
提前知道谁会与程序员联系,即使知道是谁,也无法知道他何时想与之建立联系。
换句话说,服务器类似于坐在电话机旁边等待呼叫到来的接收者。它们不知道是谁、
会在什么时候会打电话来,只有在电话铃声响起的时候才知道有呼叫进来,然后它
们拿起电话与不知在何处的人(对方响应之前)进行通话。我们无法编写单独实现
Socket类的程序。当然没有任何理由用Java编写的客户程序一定是与Java服务器对
话——事实上,客户程序不关心服务器程序是用什么语言编写的,也不关心它具
体在哪一种操作平台上运行。但是,如果Java 不支持服务器程序的编写,那将是它
在功能上令人吃惊的漏洞。
幸运的是,Java 中不存在这样的漏洞。它提供了一个 ServerSocket 类,程序员可以
很方便地用它编写服务器程序。服务器套接字的基本功能类似于坐在电话机旁边等
待呼叫到来。从技术上讲,ServerSocket 运行在服务器上并监听到来的 TCP 连接。
每个ServerSocket都在服务器上的指定端口监听。当远程主机上的客户Socket试图
与指定端口建立连接时,服务器被激活,判定客户程序与服务器的连接,并打开两
个主机之间固有的 Socket。一旦与服务器套接字建立了连接,则服务器就可以使用
固有的 Socket 对象向客户机发送数据。数据总是通过固有的套接字传递。
369
370 第十一章
ServerSocket 类
ServerSocket 类包含了用 Java 编写服务器程序的所有内容。它包括创建新
ServerSocket对象的构造器、在指定端口监听连接的方法,以及连接建立后可以发
送和接收数据时返回Socket对象的方法。此外,它还有设置不同选项以及各种各
样常用的方法,例如 toString()方法。
服务器的基本生命期是:
1. 利用 ServerSocket()构造器在指定端口创建一个新的 ServerSocket;
2. ept()方法在指定端口监听到来的连接。accept()
方法一直处于阻塞状态,直到有客户机试图建立连接。ept()方法返
回连接客户机何服务器的 Socket;
3. 调用getInputStream()方法、getOutputStream()方法或者两者都调用来得
到与客户机通信的输入流和输出流,具体调用哪一个方法还是两者都调用与具
体服务器的类型有关;
4. 服务器和客户机根据双方都承认的协议进行交互,直到关闭连接时为止;
5. 服务器、客户机或两者均关闭连接;
6. 服务器返回步骤 2,等待下一个连接到来。
如果在第4 步花费的时间很长或时间无限期,则 wu-ftpd 这样的传统Unix 服务器会
创建一个新的进程来处理每个连接,从而使服务器在同一时刻可以为多个客户机提
供服务。Java 程序产生一个线程来与客户机发生作用,从而使服务器能很快准备好
处理下一个连接。服务器上的线程远比子进程小。事实上,服务器所要处理的进程
实在太多,这也就是为什么在没有缓存进行缓冲的条件下,典型的 Unix FTP 服务
器不能处理多于 400 个连接的原因。另一方面,如果所使用的协议比较简单快速,
而且允许服务器在它通过时关闭连接,则对于服务器处理客户机请求来说会更加有
效,客户机的请求可以很快得到处理,而不需要再产生线程。
操作系统将到来的连接请求放在一个先入先出(first in first out)的队列中,每个
请求都寻址到指定端口。队列的默认长度通常为50,但这根据操作系统的不同可以
有所变化。有些操作系统(Solaris不是)有一个队列长度最大值限制,典型的值为
5。在这些系统上,队列的最大可能长度应该是小于等于 50。在未处理的连接的数
服务器套接字 371
目达到队列的最大长度数以后,主机就拒绝在此端口再增加连接,直到队列出现空
隙为止。对于许多(尽管不是全部)客户程序来说,如果它们开始的连接请求被拒
绝,它们一般都会试着继续建立连接,并进行很多次。对到来的连接和队列的管理
由操作系统提供的服务器程序负责,用户程序不需要考虑这些。如果用户认为等待
队列的长度不足够大,有几个 Socket构造器允许改变队列的长度限制。但是不能
在操

Java网络编程之服务器套接字 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数 38
  • 收藏数 0 收藏
  • 顶次数 0
  • 上传人 经管专家
  • 文件大小 0 KB
  • 时间2013-11-25
最近更新