- 1、本文档共47页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第12章 Java网络程序设计 12.1 Socket 介 绍 Socket是指网络上运行的两个程序间双向通信的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便地对网络上数据的传递进行编程。在Java中,有专门的Socket类来处理用户的请求和响应。利用Socket类的方法,就可以实现两台计算机之间的通信。本章介绍在Java中如何利用Socket进行网络编程。 在Java中Socket可以理解为客户端或者服务器端的一个特殊对象,这个对象有两个关键的方法:一个是getInput Stream()方法,另一个是getOutputStream()方法。getInput Stream()方法可以得到一个输入流,客户端的Socket对象上 的 getInputStream()方法得到的输入流其实就是从服务器端发回的数据流。getOutputStream()方法得到一个输出流,客户端Socket对象上的getOutputStream()方法返回的输出流就是将要发送到服务器端的数据流(其实是一个缓冲区,暂时存储将要发送过去的数据)。 Socket有两种主要的操作方式:面向连接的和无连接的。面向连接的Socket操作就像一部电话,必须建立一个连接和一人呼叫,所有的事情在到达时的顺序与它们出发时的顺序一样,无连接的Socket操作就像是一个邮件投递,没有什么保证,多个邮件可能在到达时的顺序与出发时的顺序不一样。到底用哪种模式是由应用程序的需要决定的。如果可靠性更重要,则用面向连接的操作会好一些。比如,文件服务器需要数据的正确性和有序性,如果一些数据丢失,则系统的有效性将会失去。又如,一些服务器间歇性地发送一些数据块,如果数据丢失,服务器并不想要再重新发过一次,因为当数据到达时,它可能已经过时了。确保数据的有序性和正确性需要额外的内存消耗,额外的费用将会降低系统的回应速率。 无连接的操作使用数据报协议。一个数据报是一个独立的单元,它包含了这次投递的所有信息。可以把它想象成一个信封,它有目的地址和要发送的内容。这个模式下的Socket不需要连接一个目的地的Socket,它只是简单地投出数据报。无连接的操作是快速的和高效的,但是数据安全性不佳。 面向连接的操作使用TCP协议。在该模式下,一个Socket必须在发送数据之前与目的地的Socket取得一个连接。一旦连接建立了,Socket就可以使用一个流接口进行打开、读、写、关闭操作。所有发送的信息都会在另一端以同样的顺序被接收。面向连接的操作比无连接的操作效率更低,但是数据的安全性更高。 12.2 Socket 程 序 在Java中面向连接的类有两种形式:客户端和服务器端。下面讨论服务器端。 下面建立服务器端程序,此服务器端程序只用于向客户端输出“helloworld!”字符串。 【例12-1】 HelloServer.java。 图12-1 HelloServer 运行结果 程序说明: (1) 第7行声明了一个ServerSocket的对象。 (2) 第8行声明了一个PrintWriter的对象,用于向客户端打印输出。 (3) 第9行~第18行实例化ServerSocket对象,在9999端口进行监听。 (4) 第19行声明了一个Socket对象clientsocket,此对象用于接收客户端的Socket连接。 (5) 第20行~29 行通过ServerSocket类中的accept()方法,接收客户端的Socket请求,此方法返回一个客户端的Socket请求。 (6) 第30行通过客户端的Socket对象去实例化PrintWriter对象,此时out对象就具备了向客户端打印信息的能力。 (7) 第31行调用println()方法,将信息打印至客户端。 (8) 第32行关闭客户端Socket连接。 (9) 第33行关闭服务器端Socket连接。 由运行结果可以发现,执行HelloServer.java之后,程序停在原处不动了,这就表示服务器在等待客户端的连接,下面为程序的客户端程序。 【例12-2】 HelloClient.java。 图12-2 HelloClient运行结果 程序说明: (1) 第7行声明一个Socket的对象hellosocket。 (2) 第8行声明一个BufferedReader的对象in,此对象用于读取服务器端发送过来的信息。 (3) 第12行实例化hellosocket对象,此连接在本机的9999端口上监听。 (4) 第13行通过hellosocket对象实例化BufferedReader对象。 (5) 第25行等待服务器端发送过
文档评论(0)