网络编程ppt课件.ppt
网络编程ppt课件 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望OSI模型OSI参考模型(OSI/RM)全称是开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM)它是由国际标准化组织(International Standard Organization,ISO)提出的一个网络系统互连模型。Tel:0571-88394222 QQ;OSI模型在这个OSI七层模型中,每一层都为其上一层提供服务、并为其上一层提供一个访问接口或界面。Tel:0571-88394222 QQ;物理层 与传输媒体的接口与传输媒体的接口,完成传输媒体上的信号和二进制完成传输媒体上的信号和二进制数据间的转换数据间的转换.物理层的传输单位为比特(bit)。物理层定义了接口的机械特性,电气特性,功能和过程特性等.例如插头,插座的几何尺寸,每根引脚的功能定义,逻辑0的1的电平定义,信号宽带定义等.属于物理层定义的典型规范代表包括:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等。Tel:0571-88394222 QQ;数据链路层 该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发,链路管理等。在这一层,数据的单位称为帧(frame)。数据链路层协议的代表包括:SDLC、HDLC、PPP、STP、帧中继等。Tel:0571-88394222 QQ;网络层提供主机到主机的通信,其间可能存在多条能路,网络层将实现的功能包括:选择路由 流量控制 协议的转换 分段和重组 对用户的分组,字符等计数 等等在这一层,数据的单位称为数据(packet).网络层协议的代表包括:IP、IPX、RIP、OSPF等。低三层的通信对象通常是路由器.Tel:0571-88394222 QQ;传输层提供端到端,应用到应用的通路.传输层将把高层要求传输的数据分成若干个报文,报文和帧不一样,帧只有帧标记(开始标记和结果标记),而报文有信源和信宿的地址及端口.报文的顺序号,确定号等。传输层协议的代表包括:TCP、UDP、SPX等。Tel:0571-88394222 QQ;会话层l会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。l建立有关会话的机制,或双向对话,或以向对话时要有切换等.l会话层协议的代表包括:NetBIOS、ZIP(AppleTalk区域信息协议)等。Tel:0571-88394222 QQ;表示层l表示层对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。l表示层协议的代表包括:ASCII、ASN.1、JPEG、MPEG等。Tel:0571-88394222 QQ;应用层l应用层为操作系统或网络应用程序提供访问网络服务的接口。l应用层协议的代表包括:Telnet、FTP、HTTP、SNMP等。Tel:0571-88394222 QQ;数据封装过程l当一台主机需要传送用户的数据(DATA)时,数据首先通过应用层的接口进入应用层。在应用层,用户的数据被加上应用层的报头(Application Header,AH),形成应用层协议数据单元(Protocol Data Unit,PDU),然后被递交到下一层-表示层。l表示层并不关心上层-应用层的数据格式而是把整个应用层递交的数据包看成是一个整体进行封装,即加上表示层的报头(Presentation Header,PH)。然后,递交到下层-会话层。Tel:0571-88394222 QQ;数据封装过程l同样,会话层、传输层、网络层、数据链路层也都要分别给上层递交下来的数据加上自己的报头。它们是:会话层报头(Session Header,SH)、传输层报头(Transport Header,TH)、网络层报头(Network Header,NH)和数据链路层报头(Data link Header,DH)。其中,数据链路层还要给网络层递交的数据加上数据链路层报尾(Data link Termination,DT)形成最终的一帧数据。Tel:0571-88394222 QQ;数据封装过程l当一帧数据通过物理层传送到目标主机的物理层时,该主机的物理层把它递交到上层-数据链路层。数据链路层负责去掉数据帧的帧头部DH和尾部DT(同时还进行数据校验)。如果数据没有出错,则递交到上层-网络层。l同样,网络层、传输层、会话层、表示层、应用层也要做类似的工作。最终,原始数据被递交到目标主机的具体应用程序中。Tel:0571-88394222 QQ; Tel:0571-88394222 QQ;TCP/IP模型lISO制定的OSI参考模型的过于庞大、复杂招致了许多批评。与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用。Tel:0571-88394222 QQ;TCP/IP 层次结构lTCP/IP协议栈是美国国防部高级研究计划局计算机网(Advanced Research Projects Agency Network,ARPANET)和其后继因特网使用的参考模型。ARPANET是由美国国防部(U.SDepartment of Defense,DoD)赞助的研究网络。最初,它只连接了美国境内的四所大学。随后的几年中,它通过租用的电话线连接了数百所大学和政府部门。最终ARPANET发展成为全球规模最大的互连网络-因特网。最初的ARPANET于1990年永久性地关闭。TCP/IP参考模型分为四个层次:应用层、传输层、网络互连层和主机到网络层。Tel:0571-88394222 QQ;TCP/IPTel:0571-88394222 QQ;层次结构l在TCP/IP参考模型中,去掉了OSI参考模型中的会话层和表示层(这两层的功能被合并到应用层实现)。同时将OSI参考模型中的数据链路层和物理层合并为主机到网络层。Tel:0571-88394222 QQ;链路层l链路层,有时也称作数据链路层或网络接口层,l通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。l负责数据帧的发送和接收,帧是独立的网络信息传输单元。网络接口层将帧放在网上,或从网上把帧取下来。Tel:0571-88394222 QQ;网络互连层l网络互连层是整个TCP/IP协议栈的核心。它的功能是把分组发往目标网络或主机。同时,为了尽快地发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。网络互连层定义了分组格式和协议,即IP协议(Internet Protocol)。网络互连层除了需要完成路由的功能外,也可以完成将不同类型的网络(异构网)互连的任务。除此之外,网络互连层还需要完成拥塞控制的功能。Tel:0571-88394222 QQ;传输层l在TCP/IP模型中,传输层的功能是使源端主机和目标端主机上的对等实体可以进行会话。在传输层定义了两种服务质量不同的协议。即:传输控制协议TCP(transmission control protocol)和用户数据报协议UDP(user datagram protocol)。TCP协议是一个面向连接的、可靠的.全双工协议。它将一台主机发出的字节流无差错地发往互联网上的其他主机。在发送端,它负责把上层传送下来的字节流分成报文段并传递给下层。在接收端,它负责把收到的报文进行重组后递交给上层。TCP协议还要处理端到端的流量控制,以避免缓慢接收的接收方没有足够的缓冲区接收发送方发送的大量数据。UDP协议是一个不可靠的、无连接协议,主要适用于不需要对报文进行排序和流量控制的场合。Tel:0571-88394222 QQ;应用层lTCP/IP模型将OSI参考模型中的会话层和表示层的功能合并到应用层实现。应用层面向不同的网络应用引入了不同的应用层协议。l有基于TCP协议的,l文件传输协议(File Transfer Protocol,FTP)l虚拟终端协议(TELNET)l超文本链接协议(Hyper Text Transfer Protocol,HTTP),l也有基于UDP协议的,l简单网络管理协议(Simple Network Management Protocol,SNMP)l简单文件传输协议(Trivial File Transfer Protocol,TFTP)l网络时间协议(Network Time Protocol,NTP)Tel:0571-88394222 QQ;TCP/IP协议栈lT C P/I P协议族是一组不同的协议组合在一起构成的协议族。尽管通常称该协议族为T C P/I P,但T C P和I P只是其中的两种协议而已(该协议族的另一个名字是I n t e r n e t协议族(Internet Protocol Suite))。Tel:0571-88394222 QQ;网络层和传输层l在8 0年代,网络不断增长的原因之一是大家都意识到只有一台孤立的计算机构成的“孤岛”没有太大意义,于是就把这些孤立的系统组在一起形成网络。随着这样的发展l到了9 0年代,我们又逐渐认识到这种由单个网络构成的新的更大的“岛屿”同样没有太大的意义。于是,人们又把多个网络连在一起形成一个网络的网络,或称作互连网(i n t e r n e t)。一个互连网就是一组通过相同协议族互连在一起的网络。Tel:0571-88394222 QQ;通过路由器互联Tel:0571-88394222 QQ;网络互联l连接网络的另一个途径是使用网桥。网桥是在链路层上对网络进行互连,而路由器则是在网络层上对网络进行互连。网桥使得多个局域网(L A N)组合在一起,这样对上层来说就好像是一个局域网。lTCP/IP倾向于使用路由器而不是网桥来连接网络.Tel:0571-88394222 QQ;域名系统l尽管通过I P地址可以识别主机上的网络接口,进而访问主机,但是人们最喜欢使用的还是主机名。在T C P/I P领域中,域名系统(D N S)是一个分布的数据库,由它来提供I P地址和主机名之间的映射信息。l现在,我们必须理解,任何应用程序都可以调用一个标准的库函数来查看给定名字名字的主机的I P地址。类似地,系统还提供一个逆函数给定主机的I P地址,查看它所对应的主机名。nslookupl大多数使用主机名作为参数的应用程序也可以把I P地址作为参数。Tel:0571-88394222 QQ; ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。如何查看如何查看ARP缓存表缓存表:arp-aTel:0571-88394222 QQ;Ip地址MAC地址192.168.1.1 192.168.1.2192.168.1.3.00-aa-00-62-c6-0900-aa-00-62-c5-0303-aa-01-75-c3-06Tel:0571-88394222 QQ;IP 包Tel:0571-88394222 QQ;TCP/IPl在T C P/I P协议族中,网络层I P提供的是一种不可靠的服务。也就是说,它只是尽可能快地把分组从源结点送到目的结点,但是并不提供任何可靠性保证。Tel:0571-88394222 QQ;lTCP是一个可靠的、面向连接的协议。它可以保证数据从连接的一方传递到另一方,并且发送数据的顺序和所接收数据的顺序一致。当应用程序需要一个可靠的、点对点的连接时,可以使用TCP。l为了提供这种可靠的服务,T C P采用了超时重传、发送和接收端到端的确认分组等机制。TCP协议Tel:0571-88394222 QQ;TCP协议Tel:0571-88394222 QQ; 用户数据报协议UDP是一种不可靠的通信协议,没有检测错误的机制,也不重发丢失的数据。接收到的数据包的顺序可能与发送的数据包的顺序不一致。采用UDP进行通信时,事先不需要建立连接。而采用TCP进行通信时,首先要建立一个连接。TCP的通信质量比UDP高,UDP的开销比TCP小。Tel:0571-88394222 QQ;l在网络上可以用IP地址来唯一的标识一台计算机。IP地址(IPv4)是四个用点隔开的数字,总共32位,每个数字8位(表示范围:0255),例如:192.168.10.22。(IPv6地址有128位,地址范围更大)l端口port与IP地址一起可以为网络的应用程序之间提供一种地址标识功能。同一台计算机上可能有多个服务程序,每个服务程序在相应的port提供服务。Tel:0571-88394222 QQ; 客户端程序要和服务程序交互,首先要找到服务程序所在的机器(可以通过IP地址),然后在这台机器上找到服务程序(通过port)。在一台服务器上,可能有很多服务程序,每个服务程序对应与一个不与其他服务冲突的port。Tel:0571-88394222 QQ;l客户端程序必须事先知道它所请求的服务程序对应的端口号。lport通常称为握手点handshake point,它被客户用来定位服务器计算机上的服务应用程序。l端口号范围:065535。可以是范围中的任何一个数字。通常,OS将1024以下的端口号保留给系统服务用。Tel:0571-88394222 QQ;l建立连接服务程序在相应的port监听是否有连接Connection。客户端程序尝试与服务程序。连接建立以后,可以通过连接传输数据,在处理数据时,可以使用与IO处理相同的Java编程模型。Tel:0571-88394222 QQ; 当我们使用java编写网络程序时,不用关心TCP和UDP的细节。使用包中的类就可以编写出平台无关的网络程序。Tel:0571-88394222 QQ;网络编程l网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。l网络编程中有两个主要的问题.l一个是如何准确的定位网络上一台或多台主机,l另一个就是找到主机后如何可靠高效的进行数据传输。l在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。Tel:0571-88394222 QQ;TCP/UDPl尽管TCP/IP协议的名称中只有TCP这个协议名,但是在TCP/IP的传输层同时存在TCP和UDP两个协议。lTCP是Tranfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。lUDP是User Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。Tel:0571-88394222 QQ;TCP/UDPl使用UDP时,每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。对于TCP协议,由于它是一个面向连接的协议,在socket之间进行数据传输之前必然要建立连接,所以在TCP中多了一个连接建立的时间。l使用UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内。而TCP没有这方面的限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大量的数据。UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。而TCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。Tel:0571-88394222 QQ;TCP/UDPl总之,TCP在网络通信上有极强的生命力,例如远程连接(Telnet)和文件传输(FTP)都需要不定长度的数据被可靠地传输。相比之下UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序。l既然有了保证可靠传输的TCP协议,为什么还要非可靠传输的UDP协议呢?主要的原因有两个。l一是可靠的传输是要付出代价的,对数据内容正确性的检验必然占用计算机的处理时间和网络的带宽,因此TCP传输的效率不如UDP高。l二是在许多应用中并不需要保证严格的传输可靠性,比如视频会议系统,并不要求音频视频数据绝对的正确,只要保证连贯性就可以了,这种情况下显然使用UDP会更合理一些。Tel:0571-88394222 QQ;Socket简述lsocket是进程之间通信的抽象连接点。客户程序和服务程序通过一个双向的通信连接实现数据交换,这个双向通路的每一端就是一个socket。l现实生活中,人们可以通过电话进行交流。我们可以把打电话的双方看作客户程序和服务程序,电话之间的连线是一个双向的通信链路,链路每一端的电话机可以看成是一个socket。Tel:0571-88394222 QQ;l目前有两种socket:流式socket、数据报式socket。流式socket提供了双向的、有序的、无重复的数据流服务。TCP是一种流式socket协议;UDP是一种数据报式socket协议。数据报式socket支持双向的数据流,但不能保证有序、无重复。Tel:0571-88394222 QQ; 在网络编程时,需要产生一个socket来建立与另一台机器的连接。然后就可以从socket获得InputStream和OutputStream对象,可以用输入输出流对象来进行数据处理。一个连线对应于两个socket。有两种socket类:ServerSocket用来让服务器监听连线;Socket用来让客户端建立连线。Tel:0571-88394222 QQ; 当客户端建立连线后,ServerSocket就会通过accept()方法返回对应的Socket,通过返回的Socket就可以开始通信。这样便有一条socket对socket的连线。可以使用getInputSream()和getOutputStream()方法从两个socket获得相应的InputStream和OutputStream对象,然后可以对其进行处理,就象通常的文件处理一样。Tel:0571-88394222 QQ;lServerSocket的主要作用是等待客户机连接上来,然后返回一个Socket。l生成ServerSocket对象时只需指定port,因为它已经位于运行服务程序的机器上了。在产生Socket对象时,必须同时指定IP地址和port(服务程序所对应的端口号)Tel:0571-88394222 QQ;lURL地址lURL是统一资源定位符Uniform Resource Locator的简称,以一个字符串的形式表示Internet上某一资源的位置。URL地址由两部分组成:协议名和资源名,两者用“:”隔开。协议名指出了访问该资源所使用的网络协议,如http、ftp等。资源名是网络资源的完整地址,包括主机名、端口号、文件名和文件的一个引用。Tel:0571-88394222 QQ; 包中有一个URL类,可以通过URL类创建的对象来代表一个网络资源。l类URL的构造方法:l(1)public URL(String s);s是表示URL地址的字符串。例如:lnew URL(“http:/ URL(URL context,String s);例如:lURL u1=new URL(“http:/ u2=new URL(u1,“index.html”);Tel:0571-88394222 QQ;l(3)public URL(String protocol,String host,String file);l(4)public URL(String protocol,String host,int port,String file);例如:lURL u=new URL(“http”,“”,80,“index.html”);lURL类的构造方法声明抛出(throws)异常MalformedURLException(将异常抛给调用构造方法的代码)。所以我们必须在调用URL构造方法的地方对异常进行处理.Tel:0571-88394222 QQ;URL属性l一个URL对象生成后,其属性是不能被改变的,但是我们可以通过类URL所提供的方法来获取这些属性:public String getProtocol()获取该URL的协议名。public String getHost()获取该URL的主机名。public int getPort()获取该URL的端口号,如果没有设置端口,返回-1。public String getFile()获取该URL的文件名。public String getRef()获取该URL在文件中的相对位置。public String getQuery()获取该URL的查询信息。public String getPath()获取该URL的路径public String getAuthority()获取该URL的权限信息public String getUserInfo()获得使用者的信息public String getRef()获得该URL的锚 Tel:0571-88394222 QQ;l通过URL对象可以访问网络资源:URL提供了openStream()方法,该方法与指定的URL地址建立连接并返回一个InputStream类的对象,因此可以使用InputStream类的方法读取数据,和普通的文件处理一样方便,只是读取的文件不是在本地计算机上,而是在网络上。其定义为:InputStream openStream();方法openSteam()与指定的URL建立连接并返回InputStream类的对象以从这一连接中读取数据。Tel:0571-88394222 QQ;从URL读取网络资源public class URLReader public static void main(String args)throws Exception URL tirc=new URL(http:/ in=new BufferedReader(new InputStreamReader(tirc.openStream();String inputLine;while(inputLine=in.readLine()!=null)System.out.println(inputLine);in.close();/关闭输入流Tel:0571-88394222 QQ;通过URLConnection连接wwwlURL只能从网络读取数据,如果还想发送给服务器一些数据,就得用URLConnection.l类URLConnection也在包中定义,它表示Java程序和URL在网络上的通信连接。当与一个URL建立连接时,首先要在一个URL对象上通过方法openConnection()生成对应的URLConnection对象。lTryURL netchinaren=new URL(http:/);URLConnectonn tc=netchinaren.openConnection();catch(MalformedURLException e)/创建URL()对象失败catch(IOException e)/openConnection()失败Tel:0571-88394222 QQ;相关属性lInputSteram getInputSteram();OutputSteram getOutputStream();URL url=new URL(http:/ con=url.openConnection();DataInputStream dis=new DataInputStream(con.getInputSteam();PrintStream ps=new PrintSteam(con.getOutputSteam();String line=dis.readLine();/从服务器读入一行ps.println(“client”);/向服务器写出字符串 实际上,类URL的方法openSteam()是通过URLConnection来实现的。它等价于openConnection().getInputStream();基于URL的网络编程在底层其实还是基于下面要讲的Socket接口接口的。WWW,FTP等标准化的网络服务都是基于TCP协议的,所以本质上讲URL编程也是基于TCP的一种应用.Tel:0571-88394222 QQ;lInetAddress类lJava通过InetAddress对象存储网络计算机的Internet地址,该对象含有与网络编程有关的许多变量和方法。有三个方法可以用来创建InetAddress实例:l1、InetAddress iInetAddress.getLocalhost();getLocalhost()返回代表本地主机的 InetAddress对象。Tel:0571-88394222 QQ;l2.InetAddress i=InetAddress.getByName(“”);getByName(hostname)返回由hostname所指定机器的InetAddress对象,如果找不到hostname机器,则该方法抛出UnknownHostException。l3、InetAddress i=InetAddress.getAllByName(“”);可以用同样的名字代表一组机器。getAllByName(hostname)返回一组具有相同名字的InetAddress对象,如果一台机器都没找到,则方法抛出UnknownHostException。Tel:0571-88394222 QQ;l在InetAddress类中,提供了一些常用的方法:l1、public String getHostName();返回表示InetAddress对象主机名的字符串。l2、public byte getAddress();返回InetAddress对象的地址。l3、public String getHostAddress();返回InetAddress对象的Internet地址。Tel:0571-88394222 QQ;Socket编程l概述lJava提供了URL类用来在一个相对较高的层次上进行网络通讯,以实现对Internet上资源的访问。但有时程序需要较低层次的网络通信。如客户机/服务器应用程序以及某些特殊协议的应用。Tel:0571-88394222 QQ;Socket编程l在各种网络的C/S应用中,客户机与服务器之间的通信组件是多种多样的,大部分通信组件内最低层的核心通信机制都是使用传输层接口的socket机制来实现的。socket是在两个应用程序之间用来进行双向数据传输的网络通信端点,一般由一个地址加一个端口号来识别。每个服务程序在一个众所周知的端口提供服务。Tel:0571-88394222 QQ;lUDP协议不能保证数据包以指定的顺序到达。数据包可能丢失,也可能重复,甚至可能无序到达。因此,如果使用UDP,程序员需要投入大量额外的编程工作,以应对这些问题。UDP适用于不要求错误检查和可靠性的网络应用程序,可靠性差,但速度快。l在网络编程时,大多数的时候,我们采用TCP,偶尔才会使用UDP。TCP提供了一个可靠的、面向连接的通信通道。Tel:0571-88394222 QQ;lpublic class Serverllpublic static void main(String args)lltry lServerSocket serverS=new ServerSocket(10000);lSystem.out.println(server is runing on port:+serverS.getLocalPort();lSocket clientS=serverS.accept();lBufferedReader in=new BufferedReader(new InputStreamReader(clientS.getInputStream();lPrintWriter out=new PrintWriter(clientS.getOutputStream();lwhile(true)llString str=in.readLine();lout.println(str);lout.println(has receiveing);lout.flush();lif(byebye.equals(str)llbreak;lllin.close();lout.close();lclientS.close();l catch(IOException e)le.printStackTrace();lTel:0571-88394222 QQ;lpublic class Client llpublic static void main(String args)lltryllSocket client=new Socket(127.0.0.1,10000);lBufferedReader br=new BufferedReader(new InputStreamReader(System.in);lPrintWriter pw=new PrintWriter(client.getOutputStream();lBufferedReader br2=new BufferedReader(new InputStreamReader(client.getInputStream();lwhile(true)llString str=br.readLine();lpw.println(str);lpw.flush();l if(byebye.equals(str)l l break;l lSystem.out.println(br2.readLine();ll catch(Exception e)le.printStackTrace();lTel:0571-88394222 QQ;lTCP Socket通信程序的开发步骤:l1、初始化服务器,建立socket对象,等待客户机的连接请求。l2、初始化客户机,建立socket对象,向服务器发出连接请求。l3、服务器响应客户机,建立连接。l4、客户机向服务器发送请求数据。l5、服务器接受客户机请求数据。Tel:0571-88394222 QQ;l6、服务器处理数据,并把处理结果返回给客户机。l7、客户机接收服务器返回的结果。l8、重复47步,直到客户机结束对话为止。l9、中断连接,结束通信。包中的Socket和ServerSocket类分别用于在客户机和服务器上创建和管理socket。Tel:0571-88394222 QQ;l服务器端程序的编写l1、调用ServerSocket类的构造方法,以某个端口号为参数,创建一个ServerSocket对象,该对象代表在指定端口监听客户机连接请求的socket。ServerSocket有以下几种构造方法:la、public ServerSocket(int port)throws IOException;Tel:0571-88394222 QQ;该构造方法在指定端口创建一个ServerSocket对象。若端口号为0,则在任意一个空闲的端口创建socket对象。连接数缺省的情况下允许50个客户等待在连接队列中,如果队列已满,则服务器拒绝新的连接请求。lb、public ServerSocket(int port,int count)throws IOExceptionTel:0571-88394222 QQ;该构造方法可以设定连接队列的长度。lc、public ServerSocket(int port,int count,InetAddress localAddr)throws IOException;l2、服务程序使用ServerSocket对象的accept()方法接收来自客户程序的请求。直到接收到从客户程序发来的连接请求(否则一直等待),然后该方法返回一个新建的Socket类的对象,该对象代表和客户方建立的通信链路在服务程序内的通信端点。Tel:0571-88394222 QQ;通过accept()方法返回的Socket对象可以获得客户方的相关信息,如getInetAddress()方法可以获得客户机的IP地址;l3、获取输入输出流对象,使服务器能够通过输入输出流与客户机交互。getInputSream()返回对socket的输入流的引用;getOutputStream()返回对socket的输出流的引用。服务器通过OutputStream把信息发给客户;通过InputStream接收客户信息。Tel:0571-88394222 QQ;l可以将其他的流类型同与socket关联的InputStream和OutputStream联系起来:DataInputStream in=new DataInputStream(is);PrintStream out=new PrintStream(os);BufferedReader in=new BufferedReader(new InputStreamReader(is);Tel:0571-88394222 QQ;l4、使用I/O处理的方法完成和客户方的数据传输,处理客户方的数据,并将结果返回给客户方。l5、客户方工作完毕,服务程序通过调用流和socket的close()方法关闭连接。l通过使用socket,网络I/O处理类似于顺序文件I/O处理。socket为程序员隐藏了很多网络编程的细节。Tel:0571-88394222 QQ;l客户端程序的编写l1、创建一个Socket,实现与服务器的连接。Socket socnew Socket(localhost,8000);第一个参数是表示服务器名称的字符串,第二个参数是端口号(服务程序在此提供服务)。第一个参数也可以是服务器的IP地址。若连接成功则该语句返回一个Socket对象;若创建socket时出现I/O错误,则抛出IOException 的一个实例。Tel:0571-88394222 QQ;如果服务器地址错误,则抛出UnknownHostException。若连接服务器时发生错误,则抛出ConnectException。l2、客户使用Socket类提供的方法getInputStream()和getOutputStream()获得对输入输出流的引用。此步骤与服务器类似。Tel:0571-88394222 QQ;l3、处理阶段。客户通过输入输出流对象进行通信。l4、调用流和Socket的close()方法关闭连接。Tel:0571-88394222 QQ;作业用