资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,21,讲网络编程,21.1 InetAddress类,21.2 URL类,21.3 URLConnection类,21.4 Socket通信讲后练习,互联上计算机之间的通信必须遵循一定的协议,目前最广泛的网络协议是TCP/IP协议,IP协议主要负责网络主机的定位,实现数据传输的路由选择。实际应用中使用域名地址,域名和IP之间的转换通过域名解析完成。,网络传输层负责数据传输时的正确性,该层有两类典型的通信协议:TCP协议和UDP协议。,1TCP:Transfer Control Protocol,通过TCP协议传输,得到的是一个顺序的无过失的数据流,使用TCP通信,发送方和接收方首先要建立socket连接,在客户/效劳器通信中,效劳方在某个端口提供效劳,等待客户方的访问连接,建立连接后,双方就可以发送和接收数据了。,2UDP:User Datagram Protocol,UDP是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地。因此能否到达目的地、到达目的地的时间及内容的正确性都不能保证,但UDP无需进行连接,传输效率高。如传输声音信号或视频信号等。,包中提供了丰富的网络功能:,1InetAddress类表示IP地址;,2URL类封装了对资源的访问;,3ServerSocket类和Socket类实现面向连接的网络通信;,4DatagramPacket类和DatagrameSocket类实现数据报的收发,21.1 InetAddress类,因特网上用IP地址或域名标识主机,InetAddress对象封装了这两局部内容。InetAddress对象使用如下格式表示主机的信息:,InetAddress类的主要方法有:,1static InetAddress getByName(String host):根据主机名InetAddress对象,使用该方法必须捕获UnknownHostException异常。,2static InetAddress getLocalHost():返回本地主机对应的InetAddress对象,如果该主机无IP地址,那么产生UnknownHostException异常。,3String getHostAddress():返回UnknownHostException异常的IP地址。,4String getHostName():返回UnknownHostException异常的域名。,21.2 URL类,URL:Uniform Resource Locator,统一资源定位符。用于从主机上读取资源只能读取,不能向主机写。,1一个URL地址通常由4局部组成:,协议名:如 、ftp、file等,主机名:如、等,路径文件:如/java/index.jsp,端口号:如8080、8081等,2URL类的常用方法:,String getFile():获取URL的文件名,它是带路径的文件标识;,String getHost():获取URL的主机名;,String getPath():取得URL的路径局部;,int getPort():取得URL的端口号;,URLConnection openConnection():返回代表与URL进行连接的URLConnection对象;,InputStream openStream():翻开与URL的连接,返回来自连接的输入流;,Object getContent():获取URL的内容。,21.3 URLConnection类,URLConnection类可实现与URL资源双向通信。,它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此URL引用的资源。通常,创立一个到URL的连接需要几个步骤:,1通过在URL上调用openConnection方法创立连接对象。,2处理设置参数和一般请求属性。,3使用connect方法建立到远程对象的实际连接,或者使用URL类的openConnection()方法建立实际连接。,4远程对象变为可用。远程对象的头字段和内容变为可访问。,21.4 Socket通信,Java提供了Socket类和ServerSocket类分别用于Client端和Server端的Socket通信,下面是分别对这两个类进行介绍。,1Socket类,构造方法:,Socket(String,int):构造一个指定主机,指定端口号的Socket。,Socket(InetAddress,int):构造一个指定Internet地址,指定端口号的Socket。,2ServerSocket类,ServerSocket(int):创立绑定到特定端口的效劳器套接字。,ServerSocket(int,int):创立效劳器套接字并将其绑定到指定的本地端口号,其中第二个参数是监听时间的长度。,3建立连接与数据通信,首先,在效劳器端创立一个ServerSocket对象,此对象通过执行accept()方法监听客户端连接,此时效劳器端线程处于等待状态。然后在客户端构造Socket,与某效劳器的指定端口进行连接。效劳器监听到连接请求后,就可在两者之间建立连接,连接建立后,就可以取得相应的输入、输出流进行通信。,在典型的效劳器中,我们希望同时能处理多个客户的请求。解决这个问题的关键就是多线程处理机制。,最根本的方法是在效劳器程序里创立单个ServerSocket,并调用accept()来等候一个新连接。一旦accept()返回,我们就取得结果获得的Socket,并用它新建一个线程,令其只为那个特定的客户效劳。然后再调用accept(),等候下一次新的连接请求。,21.5 无连接的数据报,数据报是一种无连接的通信方式,它的速度比较快,但是由于不建立连接,不能保证所有数据都能送到目的地,一般用于传送非关键性的数据。,1DatagramPacket类,此类是进行数据通信的根本单位,包含需要传送的数据、数据报的长度、IP地址和端口号等信息。其构造方法如下:,DatagramPacket(bytebuf,intlength):构造 DatagramPacket,用来接收长度为 length 的数据包。,DatagramPacket,(bytebuf,intlength,InetAddress,address,intport),:构造数据报包,用来将长度为,length,的包发送到指定主机上的指定端口号。,DatagramPacket,(bytebuf,intoffset,intlength),:构造,DatagramPacket,,用来接收长度为,length,的包,在缓冲区中指定了偏移量。,DatagramPacket,(bytebuf,intoffset,intlength,InetAddress,address,intport),:构造数据报包,用来将长度为,length,偏移量为,offset,的包发送到指定主机上的指定端口号。,DatagramPacket,(bytebuf,intoffset,intlength,SocketAddress,address),:构造数据报包,用来将长度为,length,偏移量为,offset,的包发送到指定主机上的指定端口号。,DatagramPacket,(bytebuf,intlength,SocketAddress,address),:构造数据报包,用来将长度为,length,的包发送到指定主机上的指定端口号。,DatagramPacket,类中的常用函数有:,void setData(byte buf),:设置数据缓冲区。,byte getData(),:返回数据缓冲区。,getLength(),:返回发送或接收数据报的长度。,2DatagramSocket类,DatagramSocket类是用来发送或接收数据报的Socket,其构造方法如下:,DatagramSocket():构造一个用于发送的DatagramSocket。,DatagramSocket(intport):构造一个用于接收的DatagramSocket,参数为接收端口号。,3发送和接收过程,下面代码给出了数据报接收和发送的编程要点,接收端的IP地址是,端口号是80,发送的数据在缓,冲区,message,中,长度为,200,。,接收端的程序:,byte inbuffer=new byte1024;/,设置缓冲区,DatagramPacket inpacket=new DatagramPacket(inbuffer,inbuffer.length);,DatagramSocket insocket=new DatagramSocket(80);/,设置端口号,insocket.receive(inpacket);/,接收数据报,String s=new String(inbuffer,0,0,inpacket.getLength();/,将接收的数据存入字符串。,发送端程序:,/message,为存放发送数据的字节数组,DatagramPacket outpacket=new DatagramPacket(message,200,192.168.0.3,80);,DatagramSocket outsocket=new DatagramSocket();,outsocket.send(outpacket);,讲后练习,1、编写java程序,利用URL对象读取网络上文件的内容。,2、编写程序实现:客户端Client.java向效劳器Server.java端请求请求是一句话,为一个String。如果这句话的内容字符串是字符串“plain的话,效劳器仅将“Hello字符串返回给用户。否那么将用户的话加到当前目录的文本稳健Memo.txt中,并向用户返回“OK。,3、让2中的Server.java能并发的处理多用户,并编写程序模拟多个用户向效劳器发送请求。,4、用一个套接字(Socket)完成,由客户端指定一个效劳器上的文件名,让效劳器发回该文件的内容,或者提示文件不存在。,5、编写程序,用面向连接的网络通信实现一个远程加法器;客户端向效劳器发送两个数;效劳器计算两个数的和,返回给客户端。分别写出客户端和效劳器端的程序。,
展开阅读全文