第七章基于TCP的Socket通信.ppt
《第七章基于TCP的Socket通信.ppt》由会员分享,可在线阅读,更多相关《第七章基于TCP的Socket通信.ppt(33页珍藏版)》请在三一办公上搜索。
1、3 基于TCP的Socket通信3.1 Socket类与ServerSocket类3.2 简单服务器程序3.3 简单客户端程序3.4 基于多线程的服务器程序3.5 基于多线程的客户端程序,基于TCP的Socket通信,基于TCP的Socket通信是通过指定IP地址和port 号,采用C/S模式建立TCP协议下的两个通信进程间的连接,实现可靠的双向通信。Java中:实现客户端套接字的Socket类;实现服务器端套接字的ServerSocket类。,3.1 Socket类与ServerSocket类,1Socket通信原理网络中基于Socket通信的两个进程间建立连接时,会将其中一个进程作为客户端
2、,而另一个进程作为服务器端。(1)基于Socket通信的C/S模型使用ServerSocket类和Socket类实现通信的C/S模型如图3-1所示。,(1)基于Socket通信的C/S模型(续一),图3-1 使用ServerSocket类和Socket类实现通信的C/S模型,基于Socket通信的基本算法:S1:用一致的端口分别创建Socket类和ServerSocket类对象;S2:服务器端ServerSocket类对象用accept()监视端口;S3:打开连接到客户端Socket类对象的输入/输出流,向服务器端ServerSocket类对象发送相应请求,服务器接受客户请求并返回客户端Soc
3、ket类对象,从而建立连接;S4:通信双方按照一定协议对Socket对象进行读/写操作;S5:关闭Socket。,(2)客户端进程,按给定的服务器端的地址及端口号,建立客户端套接字Socket类的对象,并向服务器端发送请求,等待服务器的响应。代码如下:try/创建客户端Socket类的对象socket,服务器地址取本地,端口号为55558 Socket socket=new Socket(localhost,55558);catch(UnknownHostException e)e.printStackTrace();catch(IOException e)e.printStackTrace(
4、);,(3)服务器端进程,按与客户端商定的端口号建立服务器端套接字ServerSocket类的对象,然后用ServerSocket对象的阻塞方法accept()监听该端口号中是否有客户端发送的请求。若没有请求,则服务器进程会处于等待状态并一直监听端口;一旦接收到客户端发送的请求,accept()方法就会获取返回该客户端对象,从而在服务器端保存与客户端的连接,接下来就可利用该连接实现与客户端之间的数据交换。,(3)服务器端进程,建立服务器端套接字及端口监听的代码:try ServerSocket serversocket=new ServerSocket(55558);Socket socket
5、=serversocket.accept();catch(IOException e)e.printStackTrace();,强调:服务器的端口号和客户端进程中指定端口号应该一致,否则不能建立连接。,2Socket类的构造方法与常用方法,表3-2 常用方法及功能,3ServerSocket类的构造方法与常用方法,3.2 简单服务器程序,根据图3-1所示的“使用ServerSocket类和Socket类实现通信的C/S模型”设计一个简单的基于Socket的通信系统。该系统由服务器端程序与客户端程序两部分组成,其基本功能分别是:()服务器端程序它的任务是监听C/S双方约定的端口(55558),等
6、待并接收客户请求,接受客户请求后建立一个至客户端的基于套接字的连接,然后利用该连接返回到客户端的Socket对象,创建一个服务器端输入流InputStream和一个服务器端输出流OutputStream,同时将它们分别包装成便于操作与刷新的BufferedReader输入流和PrintWriter输出流。然后,服务器端从InputStream读入客户端输出的数据,用OutputStream向客户端输出数据,直到接收到客户端的数据终止标志“结束”为止,最后关闭连接,释放网络资源,结束本次通信。,()客户端程序,首先创建客户端Socket对象后,然后在约定端口向服务器端发送请求,待服务器端接受请求
7、后建立基于套接字的连接,然后利用该连接的Socket对象,创建一个客户端输入流InputStream和一个客户端输出流OutputStream,同时将它们分别包装成便于操作与刷新的BufferedReader输入流和PrintWriter输出流。然后,客户端从InputStream读入服务器端输出的数据,用OutputStream向服务器端输出数据,直到发送完数据终止标志“结束”为止,最后关闭连接,释放网络资源,结束本次通信。,例3-1 基于Socket的简单服务器程序。程序清单:SimpleServerSocketDemo.java运行方法:在待运行类的主目录下编写并运行SimpleServ
8、erSocketDemo.bat文件,其内容如下:java socket.SimpleServerSocketDemoPause,图3-2 服务器端的输出结果,【例3-1】程序分析:,服务器端程序与客户端程序都使用同样的端口号(55558),服务器端程序在本地机器上运行其ServerSocket只需要一个端口号,而不需要IP地址。服务器端ServerSocket类的实例调用accept()方法时,会陷入阻塞状态,直到某个客户端程序请求与它建立连接。连接正常建立后,accept()将返回一个客户端Socket类的实例,即本次C/S套接字连接的实例,它是一个可读写的双向管道。,【例3-1】程序分析
9、:(续一),必须将ServerSocket构造方法、accept()方法和I/O流操作方法等放在一个try-finally代码块,以确保无论什么方式结束,ServerSocket、Socket和I/O流都能被正确关闭。若ServerSocket对象创建失败,则抛出IOException异常,并由finally块确保无论正常与否结束通信,均会关闭连接、释放网络套接字等资源。由于套接字使用了重要的非内存资源,因此要特别谨慎,必须以显式方式将它们及时清除。,【例11-5】程序分析:(续二),当程序中利用标准输出流System.out将ServerSocket类构造的实例和accept()方法返回的S
10、ocket类的实例打印输出时,自动调用了它们的toString()方法,其结果如下:ServerSocket addr=0.0.0.0/0.0.0.0,port=0,localport=55558Socket addr=/127.0.0.1,port=3024,localport=55558,【例11-5】程序分析:(续三),数据交换部分:服务器端的输入流InputStream和输出流OutputStream是从Socket类的实例创建的。它采用装饰模式,先利用两个“转换器”类InputStreamReader和OutputStreamWriter,将InputStream和OutputStr
11、eam对象分别转换成为Reader和Writer对象。再利用类BufferedReader和PrintWriter,将Reader和Writer对象分别转换成为BufferedReader和PrintWriter对象,以方便读写与刷新操作。若构造方法PrintWriter(Writer out,boolean autoFlush)中的“autoFlush”为“true”时,则PrintWriter类的out对象每次调用println()结束时会自动刷新输出缓冲区(但不适用于print()语句),使输出流中的信息能即时通过网络传递出去。,11.3.3 简单客户端程序,根据11.3.2节中基于So
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第七 基于 TCP Socket 通信

链接地址:https://www.31ppt.com/p-2864516.html