《12 Socket编程.ppt》由会员分享,可在线阅读,更多相关《12 Socket编程.ppt(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1.2 Socket编程n1、TCP Socket通信程序的开发步骤n2、服务器端程序的编写n3、客户端程序的编写11、TCP Socket通信程序的开发步骤 开发步骤:n(1)初始化服务器,建立socket对象,等待客户机的连接请求。n(2)初始化客户机,建立socket对象,向服务器发出连接请求。n(3)服务器响应客户机,建立连接。n(4)客户机向服务器发送请求数据。n(5)服务器接受客户机请求数据。21、TCP Socket通信程序的开发步骤n(6)服务器处理数据,并把处理结果返回给客户机。n(7)客户机接收服务器返回的结果。n(8)重复47步,直到客户机结束对话为止。n(9)中断连接,
2、结束通信。包中的Socket和ServerSocket类分别用于在客户机和服务器上创建和管理socket。32、服务器端程序的编写(1)调用ServerSocket类的构造方法,以某端口号为参数,创建一个ServerSocket对象。该对象代表在指定端口监听客户机连接请求的socket。ServerSocket有以下几种构造方法:nA、public ServerSocket(int port)throws IOException;42、服务器端程序的编写 该构造方法在指定端口创建一个ServerSocket对象。若参数port为0,则在任意一个空闲的端口创建socket对象。连接数缺省的情况下
3、允许50个客户等待在连接队列中,如果队列已满,则服务器拒绝新的连接请求。nB、public ServerSocket(int port,int count)throws IOException52、服务器端程序的编写 该构造方法可以设定连接队列的长度。nC、public ServerSocket(int port,int count,InetAddress localAddr)throws IOException;(2)服务程序使用ServerSocket对象的accept()方法接收来自客户程序的请求。n直到接收到从客户程序发来的连接请求(否则一直等待),然后该方法返回一个新建的Socket
4、类的对象,该对象代表和客户方建立的通信链路在服务程序内的通信端点。62、服务器端程序的编写 通过accept()方法返回的Socket对象可以获得客户方的相关信息,如getInetAddress()方法可以获得客户机的IP地址;(3)获取输入输出流对象,使服务器能够通过输入输出流与客户机交互。ngetInputSream()返回对socket的输入流的引用;getOutputStream()返回对socket的输出流的引用。服务器通过OutputStream把信息发给客户;通过InputStream接收客户信息。72、服务器端程序的编写n可以将其他的流类型同与socket关联的InputStr
5、eam和OutputStream联系起来:DataInputStream in=new DataInputStream(is);PrintStream out=new PrintStream(os);BufferedReader in=new BufferedReader(new InputStreamReader(is);njava.io包中的类有两种:基于字节的输入输出流;基于字符的输入输出流。大多数基于字节的流都有相应的基于字符的Reader和Writer类。请看Reader和Writer的层次结构:82、服务器端程序的编写oclass java.io.Reader o class ja
6、va.io.BufferedReader o class java.io.LineNumberReadero class java.io.CharArrayReader o class java.io.FilterReader o class java.io.PushbackReadero class java.io.InputStreamReader o class java.io.FileReadero class java.io.PipedReader o class java.io.StringReaderReader及其子类:9Writer及其子类:oclass java.io.Wr
7、iter o class java.io.BufferedWriter o class java.io.CharArrayWriter o class java.io.FilterWriter o class java.io.OutputStreamWriter o class java.io.FileWritero class java.io.PipedWriter o class java.io.PrintWriter o class java.io.StringWriter2、服务器端程序的编写102、服务器端程序的编写nBufferedReader和BufferedWriter类能有效
8、的缓冲基于字符的流。基于字符的流使用Unicode字符。nCharArrayReader和CharArrayWriter分别从字符数组中读写字符。LineNumberReader是一个缓冲的字符流,可以跟踪行数。nFileReader和FileWriter从文件读写字符。112、服务器端程序的编写nPipedReader和PipedWriter实现管道字符流,用于线程之间传递信息。nStringReader和StringWriter分别从字符串读写字符。nPrintWriter类用于将字符写入流中。122、服务器端程序的编写(4)使用I/O处理的方法完成和客户方的数据传输,处理客户方的数据,并
9、将结果返回给客户方。(5)客户方工作完毕,服务程序通过调用流和socket的close()方法关闭流和连接。n总结:通过使用socket,网络I/O处理类似于本地顺序文件I/O处理。socket为程序员隐藏了很多网络编程的细节。133、客户端程序的编写(1)创建一个Socket,实现与服务器的连接。nSocket socnew Socket(localhost,8000);第一个参数是表示服务器名称的字符串,第二个参数是端口号(服务程序在此提供服务)。第一个参数也可以是服务器的IP地址。若连接成功则该语句返回一个Socket对象;若创建socket时出现I/O错误,则抛出IOException 的一个实例。143、客户端程序的编写 如果服务器地址错误,则抛出UnknownHostException。若连接服务器时发生错误,则抛出ConnectException。(2)客户使用Socket类提供的方法getInputStream()和getOutputStream()获得对输入输出流的引用。此步骤与服务器端编程类似。153、客户端程序的编写(3)处理阶段。通过获得的输入输出流对象进行通信。(4)调用流和Socket的close()方法关闭流和连接。n程序实例:用socket实现的C/S交互程序 例 SocketServer.java 例 SocketClient.java16