ImageVerifierCode 换一换
格式:DOCX , 页数:39 ,大小:46.18KB ,
资源ID:19519340      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19519340.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(用Java Socket开发高并发小型服务器Word格式文档下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

用Java Socket开发高并发小型服务器Word格式文档下载.docx

1、数据-乘客名、航班号、飞行日期、目的地等可以被输入到前端-客户机的应用程序中。一旦数据输入之后,客户机将数据发送到后端-服务器端。服务器处理数据并在数据库中保存数据。客户机/服务器模型的重要性在于所有的数据都存放在同一地点。客户机从不同的地方访问同一数据源,服务器对所有的输入数据应用同样的检验规则。万维网为为什么要将数据的表示与其存储、处理分离开来提供了一个很好的例子。在Web上,你无需控制最终用户用来访问你数据的平台和软件。你可以考虑编写出适用与每一种潜在的目标平台的应用程序。客户机/服务器应用程序的服务器部分管理通过多个客户机访问服务器的、多个用户共享的资源。表明客户机/服务器程序的服务器

2、部分强大功能的最好例子应该是Web服务器,它通过Internet将HTML页传递给不同的Web用户。Java编程语言中最基本的特点是在Java中创建的程序的代码的可移植性。因为具有其他语言所不具备的代码可移植性,Java允许用户只要编写一次应用程序,就可以在任何客户机系统上发布它,并可以让客户机系统解释该程序。这意味着:你只要写一次代码,就能使其在任何平台上运行。2 协议当你同朋友交谈时,你们遵循一些暗含的规则(或协议)。例如:你们俩不能同时开始说话,或连续不间断地说话。如果你们这样作的话,谁也不能理解对方所说的东西。当你说话时,你的朋友倾听,反之亦然。你们以双方都能理解的语言和速度进行对话。

3、当计算机之间进行通讯的时候,也需要遵循一定的规则。数据以包的形式从一台机器发送到另一台。这些规则管理数据打包、数据传输速度和重新 数据将其恢复成原始形式。这些规则被称为网络协议。网络协议是通过网络进行通讯的系统所遵循的一系列规则和惯例。连网软件通常实现有高低层次之分的多层协议。网络协议的例子有:TCP/IP、UDP、Apple Talk和NetBEUI。Java提供了一个丰富的、支持网络的类库,这些类使得应用程序能方便地访问网络资源。Java提供了两种通讯工具。它们是:使用用户报文协议(UDP)的报文和使用传输控制协议/因特网协议(TCP/IP)的Sockets(套接字)。数据报包是一个字节数

4、组从一个程序(发送程序)传送到另一个(接受程序)。由于数据报遵守UDP,不保证发出的数据包必须到达目的地。数据报并不是可信赖的。因此,仅当传送少量数据时才使用,而且发送者和接受者之间的距离间隔不大,假如是网络交通高峰,或接受程序正处理来自其他程序的多个请求,就有机会出现数据报包的丢失。Sockets套接字用TCP来进行通讯。套接字模型同其他模型相比,优越性在于其不受客户请求来自何处的影响。只要客户机遵循TCP/IP协议,服务器就会对它的请求提供服务。这意味着客户机可以是任何类型的计算机。客户机不再局限为UNIX、Windows、DOS或Macintosh平台,因此,网上所有遵循TCP/IP协议

5、的计算机可以通过套接字互相通讯。3 Sockets套接字3.1 Sockets概况在客户机/服务器应用程序中,服务器提供象处理数据库查询或修改数据库中的数据之类的服务。发生在客户机和服务器之间的通讯必须是可靠的,同时数据在客户机上的次序应该和服务器发送出来的次序相同。什么是套接字? 既然我们已经知道套接字扮演的角色,那么剩下的问题是:Bruce Eckel 在他的Java 编程思想一书中这样描述套接字:套接字是一种软件抽象,用于表达两台机器之间的连接“终端”。对于一个给定的连接,每台机器上都有一个套接字,您也可以想象它们之间有一条虚拟的“电缆”,“电缆”的每一端都插入到套接字中。当然,机器之间

6、的物理硬件和电缆连接都是完全未知的。抽象的全部目的是使我们无须知道不必知道的细节。简言之,一台机器上的套接字与另一台机器上的套接字交谈就创建一条通信通道。程序员可以用该通道来在两台机器之间发送数据。当您发送数据时,TCP/IP 协议栈的每一层都会添加适当的报头信息来包装数据。这些报头帮助协议栈把您的数据送到目的地。好消息是 Java 语言通过流为您的代码提供数据,从而隐藏了所有这些细节,这也是为什么它们有时候被叫做流套接字(streaming socket)的原因。把套接字想成两端电话上的听筒,我和您通过专用通道在我们的电话听筒上讲话和聆听。直到我们决定挂断电话,对话才会结束(除非我们在使用蜂

7、窝电话)。而且我们各自的电话线路都占线,直到我们挂断电话。如果想在没有更高级机制如 ORB(以及 CORBA、RMI、IIOP 等等)开销的情况下进行两台计算机之间的通信,那么套接字就适合您。套接字的低级细节相当棘手。幸运的是,Java 平台给了您一些虽然简单但却强大的更高级抽象,使您可以容易地创建和使用套接字。传输控制协议(TCP)提供了一条可靠的、点对点的通讯通道,客户机/服务器应用程序可以用该通道互相通讯。要通过TCP进行通讯,客户机和服务器程序建立连接并绑定套接字。套接字用于处理通过网络连接的应用程序之间的通讯。客户机和服务器之间更深入的通讯通过套接字完成。Java被设计成一种连网语言

8、。它通过将连接功能封装到套接字类里而使得网络编程更加容易。套接字类即Socket类(它创建一个客户套接字)和ServerSocket类(它创建一个服务器套接字)。套接字类大致介绍如下:l Socket是基类,它支持TCP协议。TCP是一个可靠的流网络连接协议。Socket类提供了流输入/输出的方法,使得从套接字中读出数据和往套接字中写数据都很容易。该类对于编写因特网上的通讯程序而言是必不可少的。l ServerSocket是一个因特网服务程序用来监听客户请求的类。ServerSocket实际上并不执行服务;而是创建了一个Socket对象来代表客户机。通讯由创建的对象来完成。3.2 IP地址和端

9、口因特网服务器可以被认为是一组套接字类,它们提供了一般称为服务的附加功能。服务的例子有:电子邮件、远程登录的Telnet、和通过网络传输文件的文件传输协议(FTP)。每种服务都与一个端口相联系。端口是一个数值地址,通过它来处理服务请求(就象请求Web页一样)。TCP协议需要两个数据项:IP地址和端口号。因此,当键入时,你是如何进入金诺的主页呢?因特网协议(IP)提供每一项网络设备。这些设备都带有一个称为IP地址的逻辑地址。由因特网协议提供的IP地址具有特定的形式。每个IP地址都是32位的数值,表示4个范围在0到255之间的8位数值金诺已经注册了它的名字,分配给的IP地址为192.168.0.1

10、10。注意:域名服务或DNS服务是将翻译成192.168.0.110的服务。这使你可以键入而不必记住IP地址。想象一下,怎么可能记住所有需要访问的站点的IP地址!有趣的是一个网络名可以映射到许多IP地址。对于经常访问的站点可能需要这一功能,因为这些站点容纳大量的信息,并需要多个IP地址来提供业务服务。192.168.0.110的实际的内部名称为。DNS可以将分配给jinnuo Ltd.的一系列IP地址翻译成。如果没有指明端口号,则使用服务文件中服务器的端口。每种协议有一个缺省的端口号,在端口号未指明时使用该缺省端口号。端口号 应用21 FTP.传输文件23 Telnet.提供远程登录25 SM

11、TP.传递邮件信息67 BOOTP.在启动时提供配置情况80 HTTP.传输Web页109 POP.使用户能访问远程系统中的邮箱让我们再来看一下URL:URL的第一部分(http)意味着你正在使用超文本传输协议(HTTP),该协议处理Web文档。如果没有指明文件,大多数的Web服务器会取一个叫index.html文件。因此,IP地址和端口既可以通过明确指出URL各部分来决定,也可以由缺省值决定。4 创建Socket客户我们将在本部分讨论的示例将阐明在 Java 代码中如何使用 Socket 和 ServerSocket。客户机用 Socket 连接到服务器。服务器用 ServerSocket

12、在端口 1001 侦听。客户机请求服务器 C: 驱动器上的文件内容。创建 RemoteFileClient 类import java.io.*;import .*;public class RemoteFileClient protected BufferedReader socketReader; protected PrintWriter socketWriter; protected String hostIp; protected int hostPort; /构造方法 public RemoteFileClient(String hostIp, int hostPort) this.

13、hostIp = hostIp; this.hostPort=hostPort; /向服务器请求文件的内容 public String getFile(String fileNameToGet) StringBuffer fileLines = new StringBuffer(); try socketWriter.println(fileNameToGet); socketWriter.flush(); String line = null; while(line=socketReader.readLine()!=null) fileLines.append(line+n); catch(

14、IOException e) System.out.println(Error reading from file: +fileNameToGet); return fileLines.toString(); /连接到远程服务器 public void setUpConnection() Socket client = new Socket(hostIp,hostPort); socketReader = new BufferedReader(new InputStreamReader(client.getInputStream(); socketWriter = new PrintWrite

15、r(client.getOutputStream(); catch(UnknownHostException e) Error1 setting up socket connection: unknown host at +hostIp+:+hostPort);Error2 setting up socket connection:+e); /断开远程服务器 public void tearDownConnection() socketWriter.close(); socketReader.close(); catch(IOException e) Error tearing down so

16、cket connection: public static void main(String args) RemoteFileClient remoteFileClient = new RemoteFileClient(127.0.0.1,1001); remoteFileClient.setUpConnection(); StringBuffer fileContents = new StringBuffer(); fileContents.append(remoteFileClient.getFile(RemoteFileServer.java); /remoteFileClient.t

17、earDownConnection(); System.out.println(fileContents);首先我们导入 和 java.io。 包为您提供您需要的套接字工具。java.io 包为您提供对流进行读写的工具,这是您与 TCP 套接字通信的唯一途径。我们给我们的类实例变量以支持对套接字流的读写和存储我们将连接到的远程主机的详细信息。我们类的构造器有两个参数:远程主机的IP地址和端口号各一个,而且构造器将它们赋给实例变量。我们的类有一个 main() 方法和三个其它方法。稍后我们将探究这些方法的细节。现在您只需知道 setUpConnection() 将连接到远程服务器,getFile

18、() 将向远程服务器请求 fileNameToGet 的内容以及 tearDownConnection() 将从远程服务器上断开。实现 main()这里我们实现 main() 方法,它将创建 RemoteFileClient 并用它来获取远程文件的内容,然后打印结果。main() 方法用主机的 IP 地址和端口号实例化一个新 RemoteFileClient(客户机)。然后,我们告诉客户机建立一个到主机的连接。接着,我们告诉客户机获取主机上一个指定文件的内容。最后,我们告诉客户机断开它到主机的连接。我们把文件内容打印到控制台,只是为了证明一切都是按计划进行的。建立连接这里我们实现 setUpC

19、onnection() 方法,它将创建我们的 Socket 并让我们访问该套接字的流:setUpConnection() 方法用主机的 IP 地址和端口号创建一个 Socket:Socket client = new Socket(hostIp, hostPort);我们把 Socket 的 InputStream 包装进 BufferedReader 以使我们能够读取流的行。然后,我们把 Socket 的 OutputStream 包装进 PrintWriter 以使我们能够发送文件请求到服务器:socketReader = new BufferedReader(new InputStrea

20、mReader(client.getInputStream();socketWriter = new PrintWriter(client.getOutputStream();请记住我们的客户机和服务器只是来回传送字节。客户机和服务器都必须知道另一方即将发送的是什么以使它们能够作出适当的响应。在这个案例中,服务器知道我们将发送一条有效的文件路径。当您实例化一个 Socket 时,将抛出 UnknownHostException。这里我们不特别处理它,但我们打印一些信息到控制台以告诉我们发生了什么错误。同样地,当我们试图获取 Socket 的 InputStream 或 OutputStream

21、 时,如果抛出了一个一般 IOException,我们也打印一些信息到控制台。与主机交谈这里我们实现 getFile() 方法,它将告诉服务器我们想要什么文件并在服务器传回其内容时接收该内容。对getFile()方法的调用要求一个有效的文件路径String。它首先创建名为fileLines的 StringBuffer,fileLines 用于存储我们读自服务器上的文件的每一行。StringBuffer fileLines = new StringBuffer();在 trycatch 块中,我们用 PrintWriter 把请求发送到主机,PrintWriter 是我们在创建连接期间建立的。请

22、注意这里我们是 flush() 该 PrintWriter,而不是关闭它。这迫使数据被发送到服务器而不关闭 Socket。一旦我们已经写到 Socket,我们就希望有一些响应。我们不得不在 Socket 的 InputStream 上等待它,我们通过在 while 循环中调用 BufferedReader 上的 readLine() 来达到这个目的。我们把每一个返回行附加到 fileLines StringBuffer(带有一个换行符以保护行):=null) fileLines.append(line+断开连接这里我们实现 tearDownConnection() 方法,它将在我们使用完毕连接

23、后负责“清除”。tearDownConnection()方法只是分别关闭我们在Socket的InputStream和OutputStream上创建的 BufferedReader和PrintWriter。这样做会关闭我们从Socket获取的底层流,所以我们必须捕捉可能的 IOException。总结一下客户机我们的类研究完了。在我们继续往前讨论服务器端的情况之前,让我们回顾一下创建和使用 Socket 的步骤:1. 用您想连接的机器的 IP 地址和端口实例化 Socket(如有问题则抛出 Exception)。2. 获取 Socket 上的流以进行读写。3. 把流包装进 BufferedRea

24、der/PrintWriter 的实例,如果这样做能使事情更简单的话。4. 对 Socket 进行读写。5. 关闭打开的流。5 创建服务器Socket创建 RemoteFileServer 类public class RemoteFileServer int listenPort; public RemoteFileServer(int listenPort) this.listenPort=listenPort; /允许客户机连接到服务器,等待客户机请求 public void acceptConnections() ServerSocket server = new ServerSocket(listenPort); Socket incomingConnection = null; while(true) incomingConnection = server.accept(); handleConnection(incomingConnection); catch(BindException e) Unable to bind to port +listenPort);Unable to instantiate a ServerSocket on port: /与客户

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1