没有合适的资源?快使用搜索试试~ 我知道了~
Java_Socket开发高并发小型服务器

温馨提示


试读
45页
该文档详细描述如何实现高并发编程和运用Socket编程 Socket原理、计算机工作机制、文档包含整个实例源码。详细介绍了整个项目流程
资源推荐
资源详情
资源评论

















用 Java Socket 开发高并发小型服务器
Java Socket
套接字(socket)为两台计算机之间的通信提供了一种机制,在 James Gosling 注意到
Java 语言之前,套接字就早已赫赫有名。该语言只是让您不必了解底层操作系统的细节就
能有效地使用套接字。
1 客户机/服务器模型
在饭店里,菜单上各种具有异国情调的食品映入你的眼帘,于是你要了一份 pizza。几分钟
后,你用力咀嚼浇着融化的乳酪和其他你喜欢的配料的热 pizza。你不知道,也不想知道:
侍者从那里弄来了 pizza,在制作过程中加进了什么,以及配料是如何获得的。
上例中包含的实体有:美味的 pizza、接受你定餐的侍者、制作 pizza 的厨房,当然还有你。
你是定 pizza 的顾客或客户。制作 pizza 的过程对于你而言是被封装的。你的请求在厨房中
被处理,pizza 制作完成后,由侍者端给你。
你所看到的就是一个客户机/服务器模型。客户机向服务器发送一个请求或命令。服务器处
理客户机的请求。客户机和服务器之间的通讯是客户机/服务器模型中的一个重要组成部分,
通常通过网络进行。
客户机/服务器模型是一个应用程序开发框架,该框架是为了将数据的表示与其内部的处理
和存储分离开来而设计的。客户机请求服务,服务器为这些请求服务。请求通过网络从客
户机传递到服务器。服务器所进行的处理对客户机而言是隐藏的。一个服务器可以为多台
客户机服务。
多台客户机访问服务器
服务器和客户机不一定是硬件组件。它们可以是工作啊同一机器或不同机器上的程序。、
考虑一个航空定票系统中的数据输入程序:数据----乘客名、航班号、飞行日期、目的地等
可以被输入到前端----客户机的应用程序中。一旦数据输入之后,客户机将数据发送到后
端----服务器端。服务器处理数据并在数据库中保存数据。客户机/服务器模型的重要性在
于所有的数据都存放在同一地点。客户机从不同的地方访问同一数据源,服务器对所有的
输入数据应用同样的检验规则。

万维网为‘为什么要将数据的表示与其存储、处理分离开来’提供了一个很好的例子。在
Web 上,你无需控制最终用户用来访问你数据的平台和软件。你可以考虑编写出适用与每
一种潜在的目标平台的应用程序。
‘客户机/服务器应用程序的服务器部分’管理通过多个客户机访问服务器的、多个用户共享
的资源。表明‘客户机/服务器程序的服务器部分’强大功能的最好例子应该是 Web 服务器,
它通过 Internet 将 HTML 页传递给不同的 Web 用户。
Java 编程语言中最基本的特点是在 Java 中创建的程序的代码的可移植性。因为具有其他
语言所不具备的代码可移植性,Java 允许用户只要编写一次应用程序,就可以在任何客户
机系统上发布它,并可以让客户机系统解释该程序。这意味着:你只要写一次代码,就能
使其在任何平台上运行。
2 协议
当你同朋友交谈时,你们遵循一些暗含的规则(或协议)。例如:你们俩不能同时开始说
话,或连续不间断地说话。如果你们这样作的话,谁也不能理解对方所说的东西。当你说
话时,你的朋友倾听,反之亦然。你们以双方都能理解的语言和速度进行对话。
当计算机之间进行通讯的时候,也需要遵循一定的规则。数据以包的形式从一台机器发送
到另一台。这些规则管理数据打包、数据传输速度和重新 数据将其恢复成原始形式。这些
规则被称为网络协议。网络协议是通过网络进行通讯的系统所遵循的一系列规则和惯例。
连网软件通常实现有高低层次之分的多层协议。网络协议的例子有:TCP/
IP、UDP、Apple Talk 和 NetBEUI。
Java 提供了一个丰富的、支持网络的类库,这些类使得应用程序能方便地访问网络资源。
Java 提供了两种通讯工具。它们是:使用用户报文协议(UDP)的报文和使用传输控制协
议/因特网协议(TCP/IP)的 Sockets(套接字)。
数据报包是一个字节数组从一个程序(发送程序)传送到另一个(接受程序)。由于数据
报遵守 UDP,不保证发出的数据包必须到达目的地。数据报并不是可信赖的。因此,仅当
传送少量数据时才使用,而且发送者和接受者之间的距离间隔不大,假如是网络交通高峰,
或接受程序正处理来自其他程序的多个请求,就有机会出现数据报包的丢失。

Sockets 套接字用 TCP 来进行通讯。套接字模型同其他模型相比,优越性在于其不受客户
请求来自何处的影响。只要客户机遵循 TCP/IP 协议,服务器就会对它的请求提供服务。
这意味着客户机可以是任何类型的计算机。客户机不再局限为 UNIX、Windows、DOS 或
Macintosh 平台,因此,网上所有遵循 TCP/IP 协议的计算机可以通过套接字互相通讯。
3 Sockets 套接字
3.1 Sockets 概况
在客户机/服务器应用程序中,服务器提供象处理数据库查询或修改数据库中的数据之类的
服务。发生在客户机和服务器之间的通讯必须是可靠的,同时数据在客户机上的次序应该
和服务器发送出来的次序相同。
什么是套接字?
既然我们已经知道套接字扮演的角色,那么剩下的问题是:什么是套接字?Bruce Eckel
在他的《Java 编程思想》一书中这样描述套接字:套接字是一种软件抽象,用于表达两台
机器之间的连接“终端”。对于一个给定的连接,每台机器上都有一个套接字,您也可以想象
它们之间有一条虚拟的“电缆”,“电缆”的每一端都插入到套接字中。当然,机器之间的物理
硬件和电缆连接都是完全未知的。抽象的全部目的是使我们无须知道不必知道的细节。
简言之,一台机器上的套接字与另一台机器上的套接字交谈就创建一条通信通道。程序员
可以用该通道来在两台机器之间发送数据。当您发送数据时,TCP/IP 协议栈的每一层都会
添加适当的报头信息来包装数据。这些报头帮助协议栈把您的数据送到目的地。好消息是
Java 语言通过"流"为您的代码提供数据,从而隐藏了所有这些细节,这也是为什么它们有
时候被叫做流套接字(streaming socket)的原因。
把套接字想成两端电话上的听筒,我和您通过专用通道在我们的电话听筒上讲话和聆听。
直到我们决定挂断电话,对话才会结束(除非我们在使用蜂窝电话)。而且我们各自的电
话线路都占线,直到我们挂断电话。
如果想在没有更高级机制如 ORB(以及 CORBA、RMI、IIOP 等等)开销的情况下进行两
台计算机之间的通信,那么套接字就适合您。套接字的低级细节相当棘手。幸运的是,
Java 平台给了您一些虽然简单但却强大的更高级抽象,使您可以容易地创建和使用套接字。

传输控制协议(TCP)提供了一条可靠的、点对点的通讯通道,客户机/服务器应用程序可
以用该通道互相通讯。要通过 TCP 进行通讯,客户机和服务器程序建立连接并绑定套接字。
套接字用于处理通过网络连接的应用程序之间的通讯。客户机和服务器之间更深入的通讯
通过套接字完成。
Java 被设计成一种连网语言。它通过将连接功能封装到套接字类里而使得网络编程更加容
易。套接字类即 Socket 类(它创建一个客户套接字)和 ServerSocket 类(它创建一个服
务器套接字)。套接字类大致介绍如下:
l Socket 是基类,它支持 TCP 协议。TCP 是一个可靠的流网络连接协议。Socket 类提供
了流输入/输出的方法,使得从套接字中读出数据和往套接字中写数据都很容易。该类对于
编写因特网上的通讯程序而言是必不可少的。
l ServerSocket 是一个因特网服务程序用来监听客户请求的类。ServerSocket 实际上并
不执行服务;而是创建了一个 Socket 对象来代表客户机。通讯由创建的对象来完成。
3.2 IP 地址和端口
因特网服务器可以被认为是一组套接字类,它们提供了一般称为服务的附加功能。服务的
例子有:电子邮件、远程登录的 Telnet、和通过网络传输文件的文件传输协议(FTP)。
每种服务都与一个端口相联系。端口是一个数值地址,通过它来处理服务请求(就象请求
Web 页一样)。
TCP 协议需要两个数据项:IP 地址和端口号。因此,当键入 http://www.jinnuo.com 时,你
是如何进入金诺的主页呢?
因特网协议(IP)提供每一项网络设备。这些设备都带有一个称为 IP 地址的逻辑地址。由
因特网协议提供的 IP 地址具有特定的形式。每个 IP 地址都是 32 位的数值,表示 4 个范围
在 0 到 255 之间的 8 位数值金诺已经注册了它的名字,分配给 http://www.jinnuo.com 的 IP
地址为 192.168.0.110。
注意:域名服务或 DNS 服务是将 http://www.jinnuo.com 翻译成 192.168.0.110 的服务。这
使你可以键入 http://www.jinnuo.com 而不必记住 IP 地址。想象一下,怎么可能记住所有需
要访问的站点的 IP 地址!有趣的是一个网络名可以映射到许多 IP 地址。对于经常访问的
站点可能需要这一功能,因为这些站点容纳大量的信息,并需要多个 IP 地址来提供业务服

务。例如:192.168.0.110 的实际的内部名称为 http://www.jinnuo.com。DNS 可以将分配
给 jinnuo Ltd.的一系列 IP 地址翻译成 http://www.jinnuo.com。
如果没有指明端口号,则使用服务文件中服务器的端口。每种协议有一个缺省的端口号,
在端口号未指明时使用该缺省端口号。
端口号 应用
21 FTP.传输文件
23 Telnet.提供远程登录
25 SMTP.传递邮件信息
67 BOOTP.在启动时提供配置情况
80 HTTP.传输 Web 页
109 POP.使用户能访问远程系统中的邮箱
让我们再来看一下 URL:http://www.jinnuo.com
URL 的第一部分(http)意味着你正在使用超文本传输协议(HTTP),该协议处理 Web
文档。如果没有指明文件,大多数的 Web 服务器会取一个叫 index.html 文件。因此,IP 地
址和端口既可以通过明确指出 URL 各部分来决定,也可以由缺省值决定。
4 创建 Socket 客户
我们将在本部分讨论的示例将阐明在 Java 代码中如何使用 Socket 和 ServerSocket。客
户机用 Socket 连接到服务器。服务器用 ServerSocket 在端口 1001 侦听。客户机请求服
务器 C: 驱动器上的文件内容。
创建 RemoteFileClient 类
import java.io.*;
import java.net.*;
public class RemoteFileClient {
protected BufferedReader socketReader;
protected PrintWriter socketWriter;
protected String hostIp;
protected int hostPort;
剩余44页未读,继续阅读

普通网友
- 粉丝: 0
- 资源: 18
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制

- 1
- 2
- 3
- 4
前往页