第14章Java网络编程.ppt
《第14章Java网络编程.ppt》由会员分享,可在线阅读,更多相关《第14章Java网络编程.ppt(43页珍藏版)》请在三一文库上搜索。
1、第14章 Java网络编程 14.1 URL类 URL类是包中的一个重要的类,URL的实例封装 着一个统一资源定位符(Uniform Resource Locator) ,使用URL创建对象的应用程序称作客户端程序。一个 URL对象封装着着一个具体的资源的引用,表明客户要访 问这个URL中的资源,客户利用URL对象可以获取URL中 的资源。一个URL对象通常包含最基本的三部分信息:协 议、地址、资源。协议必须是URL对象所在的Java虚拟机 支持的协议,许多协议并不为我们所常用,而常用的Http 、Ftp、File协议都是虚拟机支持的协议;地址必须是能连 接的有效IP地址或域名;资源可以是主机
2、上的任何一个文 件 14.1.1 URL的构造方法 URL类通常使用如下的构造方法创建一个URL对 象: public URL(String spec) throws MalformedURLException 该构造方法使用字符串初始化一个URL对象 另一个常用的构造方法是: public URL(String protocol, String host,String file) throws MalformedURLException 该构造方法构造使用的协议、地址和资源分别由 参数protocol、host和file指定 14.1.2 读取URL中的资源 URL对象调用InputStre
3、am openStream() 方法 可以返回一个输入流,该输入流指向URL对象所 包含的资源。通过该输入流可以将服务器上的资 源信息读入到客户端。URL对象调用 InputStream openStream() 方法可以返回一个输入流,该输入流指向URL对 象所包含的资源。通过该输入流可以将服务器上 的资源读入到客户端 14.2 InetAdress类 14.2.1 地址的表示 Internet上的主机有两种方式表示地址: 1域名 例如, 2IP 地址 例如,202.108.35.210 包中的InetAddress类对象含有一个 Internet主机地址的域名和IP地址: 14.2.2
4、获取地址 1获取Internet上主机的地址 可以使用InetAddress类的静态方法: getByName(String s); 将一个域名或IP地址传递给该方法的参数s,获得 一个InetAddress对象,该对象含有主机地址的 域名和IP地址,该对象用如下格式表示它包含的 信息: 另外,InetAddress类中还有两个实例方法: public String getHostName() 获取 InetAddress对象所含的域名。 public String getHostAddress() 获取 InetAddress对象所含的IP地址。 2获取本地机的地址 我们可以使用InetA
5、ddress类的静态方法: getLocalHost()获得一个InetAddress对象,该 对象含有本地机的域名和IP地址。 14.3 套接字 14.3.1 套接字 网络通信使用IP地址标识Internet上的计算机,使用端口 号标识服务器上的进程(程序)。也就是说,如果服务器 上的一个程序不占用一个端口号,用户程序就无法找到它 ,就无法和该程序交互信息。端口号被规定为一个16位的 065535之间的整数,其中,01023被预先定义的服务 通信占用(如telnet占用端口23,http占用端口80等), 除非我们需要访问这些特定服务,否则,就应该使用 102465535这些端口中的某一个进
6、行通信,以免发生端 口冲突 当两个程序需要通信时,它们可以通过使用Socket类建立 套接字对象并连接在一起 14.3.2 客户端套接字 客户端的程序使用Socket类建立负责连接到服务 器的套接字对象。 Socket的构造方法是:Socket(String host,int port),参数host是服务器的IP地址,port是一个 端口号。建立套接字对象可能发生IOException 异常,因此应象下面那样建立连接到服务器的套 接字对象: try Socket mysocket=new Socket(“http:/192.168.0.78“,2010); catch(IOException
7、 e) 14.3.3 ServerSocket对象与服务器端 套接字 为了能使客户成功地连接到服务器,服务器必须建立一个 ServerSocket对象,该对象通过将客户端的套接字对象和 服务器端的一个套接字对象连接起来,从而达到连接的目 的。 ServerSocket的构造方法是:ServerSocket(int port), port是一个端口号。port必须和客户呼叫的端口号相同。 当建立ServerSocket对象时可能发生IOException异常, 因此应象下面那样建立ServerSocket对象: try ServerSocket serverForClient = new Ser
8、verSocket(2010); catch(IOException e) 当服务器的ServerSocket对象serverForClient建 立后,就可以使用方法accept()将客户的套接字 和服务器端的套接字连接起来,代码如下所示: try Socket sc = serverForClient.accept(); catch(IOException e) 客户端的Socket 输入流 输出流 服务器端Socket 输出流 输入流 图14.2 套接字连接示意图 互相连接 互相连接 连接建立后,服务器端的套接字对象调用 getInetAddress()方法可以获取一个InetAddes
9、s 对象,该对象含有客户端的IP地址和域名,同样 ,客户端的套接字对象调用getInetAddress()方 法可以获取一个InetAddess对象,该对象含有服 务器端的IP地址和域名。 双方通信完毕后,套接字应使用close()方法关闭 套接字连接 14.3.4 使用多线程技术 从套接字连接中读取数据与从文件中读取数据有 着很大的不同。尽管二者都是输入流,但从文件 中读取数据时,所有的数据都已经在文件中了, 而使用套接字连接时,可能在另一端数据发送出 来之前,就已经开始试着读取了,这时,就会堵 塞本线程,直到该读取方法成功读取到信息,本 线程才继续执行后续的操作。因此,服务器端收 到一个客
10、户的套接字后,就应该启动一个专门为 该客户服务的线程 服务器程序 客户1的线程客户1 客户2的线程客户2 客户3的线程客户3 图14.5 具有多线程的服务器端程序 可以使用Socket类的不带参数的构造方法 Socket()创建一个套接字对象,该对象再调用 public void connect(SocketAddress endpoint) throws IOException 请求和参数SocketAddress指定地址的服务器端 的套接字建立连接。为了使用connect方法,可 以使用SocketAddress的子类: InetSocketAddress创建一个对象, InetSocke
11、tAddress的构造方法是: public InetSocketAddress(InetAddress addr, int port) 14.4 UDP数据报 基于UDP的通信和基于TCP的通信不同,基于 UDP的信息传递更快,但不提供可靠性保证。也 就是说,数据在传输时,用户无法知道数据能否 正确到达目的地主机,也不能确定数据到达目的 地的顺序是否和发送的顺序相同。可以把UDP通 信比作生活中的邮递信件,我们不能肯定所发的 信件就一定能够到达目的地,也不能肯定到达的 顺序是发出时的顺序,可能因为某种原因导致后 发出的先到达。 基于UDP通信的基本模式是: 将数据打包,称为数据包(好比将信件
12、装入信封 一样),然后将数据包发往目的地。 接受别人发来的数据包(好比接收信封一样), 然后查看数据包中的内容。 14.4.1 发送数据包 1用DatagramPacket类将数据打包,即用 DatagramPacket类创建一个对象,称为数据包 。用DatagramPacket的以下两个构造方法创建 待发送的数据包: DatagramPacket(byte data,int length,InetAddtress address,int port): 使用该构造方法创建的数据包对象具有下列两个性质: 含有data数组指定的数据。 该数据包将发送到地址是address、端口号是port的主机
13、上。 我们称address是它的目标地址、port是这个数据包的目 标端口。 DatagramPack(byte data,int offset,int length,InetAddtress address,int port) 使用该构造方法创建的数据包对象含有数组data中从 offset开始后的length个字节,该数据包将发送到地址是 address,端口号是port的主机上。 2用DatagramSocket类的不带参数的构造方法 :DatagramSocket()创建一个对象,该对象负责 发送数据包。例如: DatagramSocket mail_out=new DatagramS
14、ocket(); mail_out.send(data_pack); 14.4.2 接收数据包 首先用DatagramSocket的另一个构造方法: DatagramSocket(int port) 创建一个对象,其中 的参数必须和待接收的数据包的端口号相同。例 如,如果发送方发送的数据包的端口是5666,那 么如下创建DatagramSocket对象: DatagramSocket mail_in=new DatagramSocket(5666); 然后对象mail_in使用方法receive(DatagramPacket pack)接受数据包。该方法有一个数据包参数pack,方法 rece
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 14 Java 网络 编程
链接地址:https://www.31doc.com/p-2510123.html