《第12章 Java网络编程.ppt》由会员分享,可在线阅读,更多相关《第12章 Java网络编程.ppt(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第12章章 Java网络编程网络编程 学习导读学习导读n用Java开发网络软件非常方便且功能强大,Java用于开发网络程序的API均位于包和中。n在本章中我们将首先介绍Java网络编程中扮演重 要 角 色 的 InetAddress类,再 介 绍 套 接 字(Socket)的概念,同时以实例说明如何使用Network API操纵套接字。n最后简单介绍在非连接的UDP协议下如何进行网络通讯。课程结构课程结构nInetAddress类n面对连接的流式套接字n面向非连接的数据报12.1 InetAddress简介简介nInetAddress描述了描述了32位或位或128位位IP地址,要完地址,要完
2、成这个功能,成这个功能,InetAddress类主要依靠类主要依靠Inet4Address 和和 Inet6Address两个支持类。两个支持类。n这三个类是继承关系,这三个类是继承关系,InetAddrress是父类,是父类,Inet4Address 和和 Inet6Address是子类。是子类。12.1 InetAddress简介简介n以通过下面的以通过下面的5个静态方法来创建一个个静态方法来创建一个InetAddress对象或对象或InetAddress数组数组:(1)getAllByName(String host)方法方法(2)getByAddress(byte addr)方法方法(
3、3)getByAddress(String host,byte addr)方法方法(4)getByName(String host)方法方法(5)getLocalHost()()方法方法 n上面讲到的方法均提到返回一个或多个上面讲到的方法均提到返回一个或多个InetAddress对象的引用对象的引用 12.1 InetAddress简介简介nInetAddress和它的子类型对象处理主机名到主和它的子类型对象处理主机名到主机机IPv4或或IPv6地址的转换地址的转换 例:例:InetAddress ia=InetAddress.getByName();见见例例12。112.2 面向连接的流式套
4、接字面向连接的流式套接字n1 什么是套接字什么是套接字 nSocket可以看成在两个程序进行通信连接中的可以看成在两个程序进行通信连接中的一个端点,一个程序将一段信息写入一个端点,一个程序将一段信息写入Socket中,中,该该Socket将这段信息发送给另外一个将这段信息发送给另外一个Socket中中 12.2 面向连接的流式套接字面向连接的流式套接字n在两个网络应用程序之间发送和接收信息时需在两个网络应用程序之间发送和接收信息时需要建立一个可靠的连接,流套接字依靠要建立一个可靠的连接,流套接字依靠TCP协议协议来保证信息正确到达目的地。来保证信息正确到达目的地。n在在C/S程序中程序中,包括
5、了相关联的三个类:包括了相关联的三个类:InetAddressSocketServerSocket 12.2 面向连接的流式套接字面向连接的流式套接字n2 ServerSocket类类 n服务器程序套接字服务器程序套接字n构造函数:构造函数:ServerSocket(int port););port参数传递端口号参数传递端口号,如,如果在这时出现错误将抛出果在这时出现错误将抛出IOException异常对象异常对象 n接下来服务程序进入无限循环之中。接下来服务程序进入无限循环之中。无限循环从调用无限循环从调用ServerSocket的的accept()()方法开始,方法开始,在调用开始后在调用
6、开始后accept()()方法将导致调用线程阻塞直到方法将导致调用线程阻塞直到连接建立。在建立连接后连接建立。在建立连接后accept()()返回一个最近创建返回一个最近创建的的Socket对象,该对象,该Socket对象绑定了客户程序的对象绑定了客户程序的IP地址地址或端口号。或端口号。12.2 面向连接的流式套接字面向连接的流式套接字n例例:该程序将创建一个该程序将创建一个ServerSocket对象来监听对象来监听端口端口10000的连接请求,如果成功,服务程序将的连接请求,如果成功,服务程序将等待连接输入,开始一个线程处理连接,并响应等待连接输入,开始一个线程处理连接,并响应来自客户程
7、序的命令。来自客户程序的命令。n见见例例12。212.2 面向连接的流式套接字面向连接的流式套接字n3 Socket类类 n当客户程序需要与服务器程序通信时,客户程当客户程序需要与服务器程序通信时,客户程序在客户机创建一个序在客户机创建一个socket对象对象 n构造函数:构造函数:Socket(InetAddress addr,int port););Socket(String host,int port););n可能通过调用可能通过调用Socket的的 getInputStream()()方方法从服务程序获得输入流读传送来的信息法从服务程序获得输入流读传送来的信息n可能通过调用可能通过调用
8、Socket的的 getOutputStream()()方方法获得输出流来发送消息法获得输出流来发送消息 12.2 面向连接的流式套接字面向连接的流式套接字n例:例:这个程序将创建一个这个程序将创建一个Socket对象,对象,Socket将访问运行在指定主机端口将访问运行在指定主机端口10000上的服务程序,上的服务程序,如果访问成功,客户程序将给服务程序发送一系如果访问成功,客户程序将给服务程序发送一系列命令并打印服务程序的响应列命令并打印服务程序的响应 n见见例例12。312.3 面向非连接的数据报面向非连接的数据报n1 UDP简介简介(User Datagram Protocal)nUD
9、P位位于于第第四四层层传传输输层层,处处于于IP协协议议的的上上一层。一层。nUDP有有不不提提供供数数据据报报分分组组、组组装装以以及及不不能能对对数数据报排序的缺点。据报排序的缺点。n当当报报文文发发送送之之后后,是是无无法法得得知知其其是是否否安安全全完完整整到达的。到达的。12.3 面向非连接的数据报面向非连接的数据报n2 DatagramPacket类类 nDatagramPacket类用于处理报文,它将类用于处理报文,它将Byte数数组、目标地址和目标端口等数据包装成报文或者组、目标地址和目标端口等数据包装成报文或者将报文拆卸成将报文拆卸成Byte数组数组 n构造函数:构造函数:1
10、)DatagramPacket(byte buf,int length);其中其中buf参数包含了一个对保存自寻址数据报信息的字参数包含了一个对保存自寻址数据报信息的字节数组的引用,节数组的引用,length表示字节数组的长度表示字节数组的长度 可以通过调用方法可以通过调用方法setAddress(InetAddress addr)和)和setPort(int port)添加上数据报地址和端口信息添加上数据报地址和端口信息 12.3 面向非连接的数据报面向非连接的数据报2)DatagramPacket(byte buf,int length,InetAddress addr,int port)
11、nDatagramPacket的常用方法有:的常用方法有:getAddress()、setAddress(InetAddress)得得到到、设置数据报地址。设置数据报地址。getDate()、setDate(byte buf)得得到到、设设置置数数据报内容。据报内容。getLength()、setLength(ing length)得得到到、设设置置数据报长度。数据报长度。getPort()、()、setPort(int port)得到、设置端口号。得到、设置端口号。12.3 面向非连接的数据报面向非连接的数据报n3 DatagramSocket类类nDatagramSocketDatagra
12、mSocket类在客户端创建数据报套接字类在客户端创建数据报套接字与服务器端进行通信连接,并发送和接受数据报与服务器端进行通信连接,并发送和接受数据报套接字套接字 nDatagramSocket构造方法:构造方法:DatagramSocket()创创建建数数据据报报套套接接字字,绑绑定定到到本本地地主机任意存在的端口。主机任意存在的端口。DatagramSocket(int port)创创建建数数据据报报套套接接字字,绑绑定到本地主机指定端口。定到本地主机指定端口。DatagramSocketDatagramSocket(intint port,port,InetAddress laddr I
13、netAddress laddr)创建数据报套接字,绑定到指定本地地址。创建数据报套接字,绑定到指定本地地址。12.3 面向非连接的数据报面向非连接的数据报n常用方法:常用方法:connect(InetAddress address,int port)连连接接指指定定地地址。址。disconnect()()断开套接字连接。断开套接字连接。close()()关闭数据报套接字。关闭数据报套接字。getInetAddress()()得到套接字所连接的地址。得到套接字所连接的地址。getLocalAddress()()得到套接字绑定的主机地址。得到套接字绑定的主机地址。getLocalPort()()
14、得到套接字绑定的主机端口号。得到套接字绑定的主机端口号。getPort()()得到套接字的端口号。得到套接字的端口号。reseive(DatagramPacket p)接收数据报。接收数据报。send(DatagramPacket p)发送数据报。发送数据报。n见见例例12。4 例例12。512.3 面向非连接的数据报面向非连接的数据报n4 多点传送和多点传送和MulticastSocket类类n如果服务器程序要将同一信息发送给多个客户如果服务器程序要将同一信息发送给多个客户端,那么服务器程序和客户程序可以利用多点传端,那么服务器程序和客户程序可以利用多点传送(送(multicasting)方式进行通信方式进行通信 n网络网络API通过通过MulticastSocket类和类和MulticastSocket,以及一些辅助类(如以及一些辅助类(如NetworkInterface)支持多点传送支持多点传送 n见例见例12。6 例例12。712.3 本章小结本章小结nJava的网络功能是非常强大的,它提供了一整的网络功能是非常强大的,它提供了一整套完善的套完善的API支持在网络环境下的通信支持在网络环境下的通信n本章中,我们从两方面介绍了本章中,我们从两方面介绍了Java的网络编程的网络编程方法方法:n面向连接的流式套接字面向连接的流式套接字n面向非连接的数据报面向非连接的数据报