《最新Java实用教程第21讲网络编程(共22张PPT课件).pptx》由会员分享,可在线阅读,更多相关《最新Java实用教程第21讲网络编程(共22张PPT课件).pptx(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第21讲网络(wnglu)编程21.1 InetAddress21.1 InetAddress类类21.2 URL21.2 URL类类21.3 URLConnection21.3 URLConnection类类21.4 Socket21.4 Socket通信通信(tng xn)(tng xn)讲后练习讲后练习第一页,共二十二页。互联上计算机之间的通信必须遵循一定的协议,目前最广泛的网络协议是TCP/IP协议,IP协议主要负责网络主机的定位,实现数据传输的路由选择。实际应用中使用域名(y mn)地址,域名(y mn)和IP之间的转换通过域名解析完成。网络传输层负责数据传输时的正确性,该层有两类典
2、型的通信协议:TCP协议和UDP协议。(1)TCP:Transfer Control Protocol通过TCP协议传输,得到的是一个顺序的无差错的数据流第二页,共二十二页。使用TCP通信,发送方和接收方首先要建立socket连接,在客户/服务器通信中,服务方在某个端口提供服务,等待客户方的访问连接,建立连接后,双方就可以发送和接收数据了。(2)UDP:User Datagram ProtocolUDP是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径(ljng)传往目的地。因此能否到达目的地、到达目的地的时间及内容的正确性都不能保证,但U
3、DP无需进行连接,传输效率高。如传输声音信号或视频信号等。第三页,共二十二页。包中提供了丰富(fngf)的网络功能:(1)InetAddress类表示IP地址;(2)URL类封装了对资源的访问;(3)ServerSocket类和Socket类实现面向连接的网络通信;(4)DatagramPacket类和DatagrameSocket类实现数据报的收发第四页,共二十二页。21.1 InetAddress21.1 InetAddress类类因特网上用IP地址或域名标识主机,InetAddress对象封装了这两部分内容。InetAddress对象使用如下格式表示主机的信息: InetAddress
4、getByName(String host):根据(gnj)主机名InetAddress对象,使用该方法必须捕获UnknownHostException异常。第五页,共二十二页。(2)static InetAddress getLocalHost():返回(fnhu)本地主机对应的InetAddress对象,如果该主机无IP地址,则产生UnknownHostException异常。(3)String getHostAddress():返回UnknownHostException异常的IP地址。(4)String getHostName():返回UnknownHostException异常的域名
5、。第六页,共二十二页。21.2 URL21.2 URL类类URL:Uniform Resource Locator,统一资源(zyun)定位符。用于从主机上读取资源(zyun)(只能读取,不能向主机写)。(1)一个URL地址通常由4部分组成:协议名:如http、ftp、file等主机名:如、220.181.112.143等路径文件:如/java/index.jsp端口号:如8080、8081等(2)URL类的常用方法:第七页,共二十二页。String getFile():获取URL的文件名,它是带路径的文件标识;String getHost():获取URL的主机名;String getPath
6、():取得URL的路径部分;int getPort():取得URL的端口号;URLConnection openConnection():返回代表与URL进行连接的URLConnection对象(duxing);InputStream openStream():打开与URL的连接,返回来自连接的输入流;Object getContent():获取URL的内容。第八页,共二十二页。21.3 URLConnection21.3 URLConnection类类URLConnection类可实现与URL资源双向通信。它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此URL引用的资源
7、。通常,创建一个到URL的连接需要几个步骤:(1)通过在URL上调用openConnection方法创建连接对象。 (2)处理设置(shzh)参数和一般请求属性。 (3)使用connect方法建立到远程对象的实际连接,或者使用URL类的openConnection()方法建立实际连接。第九页,共二十二页。(4)远程对象(duxing)变为可用。远程对象(duxing)的头字段和内容变为可访问。第十页,共二十二页。21.4 Socket21.4 Socket通信通信(tng xn)(tng xn)Java提供了Socket类和ServerSocket类分别用于Client端和Server端的So
8、cket通信,下面是分别对这两个类进行介绍。(1)Socket类构造方法: Socket(String, int):构造一个(y )指定主机,指定端口号的Socket。 Socket(InetAddress, int):构造一个指定Internet地址,指定端口号的Socket。 第十一页,共二十二页。(2)ServerSocket类 ServerSocket( int):创建绑定到特定端口的服务器套接字。 ServerSocket( int,int):创建服务器套接字并将其绑定到指定的本地端口号,其中第二个参数是监听时间的长度。(3)建立连接与数据通信 首先(shuxin),在服务器端创建一
9、个ServerSocket对象,此对象通过执行accept()方法监听客户端连接,此时服务器端线程处于等待状态。然后在客户端构造Socket,与某服务器的指定端口进行连接。服务器监听到连接请求后,就可在两者之间建立连接,连接建立后,就可以取得相应的输入、输出流进行通信。第十二页,共二十二页。在典型的服务器中,我们希望同时能处理多个客户的请求。解决这个问题的关键就是多线程处理机制。最基本的方法是在服务器(程序)里创建单个ServerSocket,并调用accept()来等候一个新连接。一旦accept()返回(fnhu),我们就取得结果获得的Socket,并用它新建一个线程,令其只为那个特定的客
10、户服务。然后再调用accept(),等候下一次新的连接请求。第十三页,共二十二页。21.5 21.5 无连接无连接(linji)(linji)的数据报的数据报数据报是一种无连接的通信方式,它的速度比较快,但是由于不建立连接,不能保证所有数据都能送到目的地,一般用于传送非关键性的数据。(1)DatagramPacket类此类是进行(jnxng)数据通信的基本单位,包含需要传送的数据、数据报的长度、IP地址和端口号等信息。其构造方法如下: DatagramPacket(byte buf, int length) :构造 DatagramPacket,用来接收长度为 length 的数据包。第十四页
11、,共二十二页。 DatagramPacket(byte buf, int length, InetAddress address, int port):构造数据(shj)报包,用来将长度为 length 的包发送到指定主机上的指定端口号。 DatagramPacket(byte buf, int offset, int length):构造 DatagramPacket,用来接收长度为 length 的包,在缓冲区中指定了偏移量。DatagramPacket(byte buf, int offset, int length, InetAddress address, int port):构造数
12、据报包,用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。第十五页,共二十二页。 DatagramPacket(byte buf, int offset, int length, SocketAddress address):构造数据报包,用来(yn li)将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。 DatagramPacket(byte buf, int length, SocketAddress address):构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。 DatagramPack
13、et类中的常用函数有: void setData(byte buf):设置数据缓冲区。 byte getData():返回数据缓冲区。 getLength():返回发送或接收数据报的长度。第十六页,共二十二页。(2)DatagramSocket类DatagramSocket类是用来发送或接收数据报的Socket,其构造方法如下: DatagramSocket():构造一个用于发送的DatagramSocket。 DatagramSocket(int port):构造一个用于接收的DatagramSocket,参数为接收端口号。(3)发送和接收过程下面(xi mian)代码给出了数据报接收和发送
14、的编程要点,接收端的IP地址是192.168.0.3,端口号是80,发送的数据在缓第十七页,共二十二页。冲区message中,长度为200。接收端的程序(chngx):byte inbuffer=new byte1024;/设置缓冲区DatagramPacket inpacket=new DatagramPacket(inbuffer,inbuffer.length);DatagramSocket insocket=new DatagramSocket(80);/设置端口号insocket.receive(inpacket);/接收数据报String s=new String(inbuffer
15、,0,0,inpacket.getLength();/将接收的数据存入字符串。第十八页,共二十二页。 发送端程序:/message为存放(cnfng)发送数据的字节数组DatagramPacket outpacket=new DatagramPacket(message,200,192.168.0.3,80);DatagramSocket outsocket=new DatagramSocket();outsocket.send(outpacket);第十九页,共二十二页。讲后练习讲后练习(linx)1、编写java程序,利用URL对象读取网络上文件的内容(nirng)。2、编写程序实现:客户
16、端(Client.java)向服务器(Server.java)端请求(请求是一句话,为一个String)。如果这句话的内容字符串是字符串“plain”的话,服务器仅将“Hello”字符串返回给用户。否则将用户的话加到当前目录的文本稳健Memo.txt中,并向用户返回“OK”。第二十页,共二十二页。3、让(2)中的Server.java能并发的处理(chl)多用户,并编写程序模拟多个用户向服务器发送请求。4、用一个套接字(Socket)完成,由客户端指定一个服务器上的文件名,让服务器发回该文件的内容,或者提示文件不存在。5、编写程序,用面向连接的网络通信实现一个远程加法器;客户端向服务器发送两个数;服务器计算两个数的和,返回给客户端。分别写出客户端和服务器端的程序。第二十一页,共二十二页。内容(nirng)总结第21讲网络编程。通过TCP协议传输,得到的是一个(y )顺序的无差错的数据流。用于从主机上读取资源(只能读取,不能向主机写)。String getFile():获取URL的文件名,它是带路径的文件标识。此类的实例可用于读取和写入此URL引用的资源。在典型的服务器中,我们希望同时能处理多个客户的请求第二十二页,共二十二页。