java语言程序设计第11章.ppt

上传人:max****ui 文档编号:6364703 上传时间:2020-02-24 格式:PPT 页数:21 大小:562.31KB
返回 下载 相关 举报
java语言程序设计第11章.ppt_第1页
第1页 / 共21页
java语言程序设计第11章.ppt_第2页
第2页 / 共21页
java语言程序设计第11章.ppt_第3页
第3页 / 共21页
点击查看更多>>
资源描述
第11章Java网络编程 在Internet 互联网 被广泛使用的今天 网络编程显得日益重要 网络应用是Java语言取得成功的领域之一 它已经成为现在Internet上最流行的一种编程语言 Java语言的网络功能非常强大 其网络类库不仅使我们可以开发访问Internet应用层程序 还可以实现网络底层的通信 本章要点11 1网络基础11 2InetAddress编程11 3URL编程11 4Socket编程11 5数据报通信思考与练习11 11 1网络基础 11 1 1TCP IP协议网络通信协议是计算机间进行通信所要遵循的各种规则的集合 Internet的主要协议有 网络层的IP协议 传输层的TCP UDP协议 应用层的FTP HTTP SMTP等协议 其中 TCP IP 传输控制协议 网间协议 是Internet的主要协议 定义了计算机和外设进行通信所使用的规则 TCP IP网络参考模型包括四个层次 应用层 传输层 网络层 链路层 连接到TCP IP网络中的每台计算机 或其他设备 都有唯一的地址 这就是IP地址 IP地址实质上是一个32位的整数 通常以 d d d d 的形式表示 其中每个d是一个8位整数 在TCP IP网络中 不同的机器之间进行通信时 数据的传输是由传输层控制的 这包括数据要发往的目标机器及应用程序 数据的质量控制等 TCP IP网络中最常用的传输协议 TCP TransportControlProtocol 和UDP UserDatagramProtocol 就属于这一层 11 1网络基础 11 1 1TCP IP协议传输层通常以TCP和UDP协议来控制端点到端点的通信 用于通信的端点是由Socket来定义的 而Socket是由IP地址和端口号组成的 TCP是一种面向连接的保证可靠传输的协议 通过TCP协议传输 得到的是一个顺序的无差错的数据流 发送方和接收方的成对的两个socket之间必须建立连接 以便在TCP协议的基础上进行通信 当一个socket 通常都是serversocket 等待建立连接时 另一个socket可以要求进行连接 一旦这两个socket连接起来 它们就可以进行双向数据传输 双方都可以进行发送或接收操作 11 1网络基础 11 1 2通信端口一台机器只通过一条链路连接到网络上 但一台机器中往往有很多应用程序需要进行网络通信 如何区分呢 这就要靠网络端口号 port 了 端口号是一个标记机器的逻辑通信信道的正整数 端口号不是物理实体 IP地址和端口号组成了所谓的Socket Socket是网络上运行的程序之间双向通信链路的最后终结点 它是TCP和UDP的基础 IP协议使用IP地址使数据投递到正确的计算机上 TCP和UDP协议使用端口号 port 将数据投递给正确的应用程序 端口号是用一个16位的整数来表达的 其范围为0 65535 其中0 1023为系统所保留 专门给那些通用的服务 well knownservices 常见的有 http服务的端口号为80 telnet服务的端口号为21 ftp服务的端口为23等等 因此 当我们编写通信程序时 应选择一个大于1023的数作为端口号 以免发生冲突 11 1网络基础 11 1 3URLURL是统一资源定位符 UniformResourceLocator 的简称 它表示Internet上某一资源的地址 Internet上的资源包括HTML文件 图像文件 声音文件 动画文件以及其他任何内容 并不完全是文件 也可以是一个对数据库的查询等 通过URL 就可以访问Internet 浏览器或其他程序通过解析给定的URL就可以在网络上查找相应的文件或其他资源 一个URL包括两部分内容 协议名称和资源名称 中间用冒号隔开 协议名 资源名如 协议名称指的就是获取资源时所使用的应用层协议 如http ftp file等 资源名称则是资源的完整地址 包括主机名 端口号 文件名或文件内部的一个引用 当然 并不是所有的URL都必须包含这些内容 一个完整的URL如下 80 home white paper html intro 1协议主机域名 IP地址 端口号目录文件名HTML参考点 11 1网络基础 11 1 4客户机 服务器模式目前较为流行的网络编程模型是客户机 服务器 C S 结构 即通信双方一方作为服务器等待客户提出请求并予以响应 客户则在需要服务时向服务器提出申请 服务器一般作为守护进程始终运行 监听网络端口 一旦有客户请求 就会启动一个服务进程来响应该客户 同时自己继续监听服务端口 使后来的客户也能及时得到服务 11 1网络基础 11 1 5Java网络编程Java通过前面介绍的流式输入 输出接口和增加在网络上建立输入 输出对象特性这两个方法支持TCP IP Java支持TCP和UDP协议族 TCP用于网络的可靠的流式输入 输出 UDP支持更简单的 快速的 点对点的数据报模式 Java的网络编程分为三个层次 1 最高一级的网络通信就是我们前面章节中讲的从网络上下载Applet 客户端浏览器通过HTML文件中的标记来识别Applet 并解析Applet的属性 通过网络获取Applet的字节码文件 2 前面我们介绍了声音播放和图像显示 其中声音文件和图像文件的获取是次一级的通信 通过类URL的对象指明文件所在位置 并从网络上下载声音和图像文件 11 1网络基础 11 1 5Java网络编程3 最低一级的通信是利用包中提供的类直接在程序中实现网络通信 针对网络通信的不同层次 Java提供的网络功能有四大类 InetAddress URLs Sockets Datagram 1 URLs 面向应用层 通过URL Java程序可以直接送出或读入网络上的数据 2 InetAddress 面向的是IP层 用于标识网络上的硬件资源 3 Sockets和Datagram 面向的则是传输层 Sockets使用的是TCP协议 这是传统网络程序最常用的方式 可以想象为两个不同的程序通过网络的通信信道进行通信 Datagram则使用UDP协议 是另一种网络传输方式 它把数据的目的地记录在数据包中 然后直接放在网络上 11 1网络基础 11 1 5Java网络编程Java网络编程中主要使用的包中的类有 面向IP层的类 InetAddress面向应用层的类 URL URLConnectionTCP协议相关类 Socket ServerSocketUDP协议相关类 DatagramPacket DatagramSocket MulticastSocket可能产生的异常 BindException ConnectException MalformedURLException NoRouteToHostException ProtocolException SocketException UnknownHostException UnknownServiceException 11 2InetAddress编程 无论你是在打电话 发送邮件或建立与Internet的连接 地址是基础 InetAddress类用来封装IP地址和该地址的域名 InetAddress类可以用于标识网络上的硬件资源 它提供了一系列方法以描述 获取及使用网络资源 每个InetAddress对象包含了IP地址 主机名等信息 InetAddress类没有构造方法 因此不能用new来构造一个InetAddress实例 通常是用它提供的静态方法来获取 publicstaticInetAddressgetByName Stringhost host可以是一个机器名 也可以是一个形如 d d d d 的四个十进制数的IP地址或一个DSN域名 publicstaticInetAddressgetLocalHost publicstaticInetAddress getAllByName Stringhost 这三个方法通常会产生UnknownHostException异常 应在程序中捕获处理 InetAddress类也有一些非静态的方法 如本书表11 1所示 11 3URL编程 11 2 1创建URL对象URL类有以下几种方式创建URL对象 1 URL String String int String 构造一个URL类 第一个String类型的参数是协议的类型 可以是http ftp file等 第二个String类型参数是主机名 int类型参数是指定端口号 最后一个参数是给出文件名或路径名 2 URL String String String 构造一个URL类 参数含义与上相同 使用缺省端口号 3 URL URL String 构造一个URL类 使用给出的URL和相对路径 String类型参数是相对路径 4 URL String 使用URL字符串构造一个URL类 当创建URL时发生错误 系统会产生异常MalformedURLException 这是非运行时异常 必须在程序中捕获处理 11 3URL编程 11 2 2获取URL对象的属性一个URL对象生成后 其属性是不能被改变的 但可以通过它给定的方法来获取这些属性 publicStringgetProtocol 获取该URL的协议名publicStringgetHost 获取该URL的主机名publicStringgetPort 获取该URL的端口号publicStringgetPath 获取该URL的文件路径publicStringgetFile 获取该URL的文件名publicStringgetRef 获取该URL在文件中的相对位置publicStringgetQuery 获取该URL的查询名publicStringtoExternalForm 获取代表URL的字符串 11 4Socket编程 Socket 插座 通信属于网络底层通信 Socket最先应用于Unix操作系统 如果了解Unix系统的输入 输出 I O 的话 就很容易掌握Socket 因为Socket数据传输其实就是一种特殊的I O 在传统的UNIX环境下可以操作TCP IP协议的接口不止Socket一个 Socket所支持的协议种类也不光TCP IP一种 因此两者之间是没有必然联系的 在Java环境下 Socket编程主要是指基于TCP IP协议的网络编程 在Java中可以将Socket类和ServerSocket类分别用于Client端和Server端 在任意两台机器间建立连接 11 4Socket编程 11 4 1Socket与ServerSocket类网络上的两个程序通过一个双向的通讯连接实现数据的交换 这个双向链路的一端称为一个Socket Socket通常用来实现客户方和服务方的连接 Socket是TCP IP协议的一个十分流行的编程界面 一个Socket由一个IP地址和一个端口号唯一确定 尽管Socket编程是低层次网络编程但并不等于它功能不强大 恰恰相反 正因为层次低 Socket编程比基于URL的网络编程提供了更强大的功能和更灵活的控制 但是却要更复杂一些 java在包中提供了两个类 Socket和ServerSocket 分别用来表示双向连接的客户端和服务端 这是两个封装得非常好的类 使用很方便 11 4Socket编程 11 4 2Socket通信Socket通常用来实现C S结构 使用Socket进行Client Server程序设计的一般连接过程是这样的 Server端Listen 监听 某个端口是否有连接请求 Client端向Server端发出Connect 连接 请求 Server端向Client端发回Accept 接受 消息 一个连接就建立起来了 Server端和Client端都可以通过Send Write等方法与对方通信 进行Socket通信 需要完成三个部分的工作 1 建立服务器类在服务器端 用Java中的服务器类 ServerSocket 使用端口号作为参数来创建服务器对象 例如 ServerSocketserver newServerSocket 2000 这条语句创建了一个服务器对象 这个服务器使用2000号端口 当一个客户端程序建立一个Socket连接 所连接的端口号为2000时 服务器对象server便响应这个连接 11 4Socket编程 11 4 2Socket通信接下来用server accept 方法创建一个Socket对象 服务器端便可以利用这个Socket对象与客户端进行通讯 例如 Socketincoming server accept 紧接着用下面语句得到输入流和输出流 并进行封装 BufferedReaderin newBufferedReader newInputStreamReader incoming getInputStream PrintWriterout newPrintWriter incoming getOutputStream true 随后 就可以使用in readLine 方法得到客户端的输入 也可以使用out println 方法向客户端发送数据 从而可以根据程序的需要对客户端的不同请求进行回应 11 4Socket编程 11 4 2Socket通信每一个Socket存在时 都将占用一定的资源 在Socket对象使用完毕时 要其关闭 关闭Socket可以调用Socket的Close 方法 在关闭Socket之前 应将与Socket相关的所有的输入 输出流全部关闭 以释放所有的资源 而且要注意关闭的顺序 与Socket相关的所有的输入 输出该首先关闭 然后再关闭Socket 例如 in close out close socket close 11 4Socket编程 11 4 2Socket通信2 建立客户端代码相比服务器端 客户端要简单一些 客户端只需用服务器所在机器的IP以及服务器的端口作为参数创建一个Socket对象 得到这个对象后 就可以用前面介绍的方法实现数据的输入和输出 例如 Socketsocket newSocket 192 168 1 1 2000 in newBufferedReader newInputStreamReader socket getInputStream out newPrintWriter socket getOutputStream true 以上的程序代码建立了一个Socket对象 这个对象连接到IP地址为192 168 1 1的主机上 端口为2000的服务器对象 并且建立了输入流和输出流 分别对应服务器的输出和客户端的写入 11 4Socket编程 11 4 2Socket通信3 建立用户界面大家可以利用前面讲解的知识 根据自己的喜好建立自己的用户界面 经过以上三个步骤 就可以建立一个比较简单的对话程序 但是 为了使这个程序更加完善 应将服务器端的程序变为多线程 这样可以使服务器为多个客户端服务 11 5数据报通信 数据报是一种无连接的通信方式 它的速度比较快 但是由于不建立连接 不能保证所有数据都能送到目的地 所以一般用于传送非关键性的数据 发送和接收数据报需要使用Java类库中的DatagramPacket类和DatagramSocket类 下面分别介绍 1 DatagramPacket类它是进行数据报通信的基本单位 它包含了需要传送的数据 数据报的长度 IP地址和端口等 DatagramPacket类的构造方法有两种 1 DatagramPacket byte int 构造一个用于接收数据报的DatagramPacket类 byte 类型的参数是接收数据报的缓冲 int类型的参数是接收的字节数 2 DatagramPacket byte int InetAddress int 构造一个用于发送数据的DatagramPackte类 byte 类型参数是发送数据的缓冲区 int类型参数是发送的字节数 InetAddress类型参数是接收机器的Internet地址 最后一个参数是接收的端口号 11 5数据报通信 2 DatagramSocket类DatagramSocket类是用来发送数据报的Socket 它的构造方法有两种 1 DatagramSocket 构造一个用于发送的DatagramSocket类 2 DatagramSocket int 构造一个用于接收的DatagramSocket类 构造完DatagramSocket类后 就可以发送和接收数据报 3 发送和接收过程发送数据报 需要在接收端先建立一个接收的DatagramSocket 在指定端口上监听 构造一个DatagramPacket类指定接收的缓冲区 DatagramSocket的监听将阻塞线程 在发送端需要首先构造DatagramPacket类 指定要发送的数据 数据长度 接收主机地址及端口号 然后使用DatagramSocket类来发送数据报 接收端接收到后 将数据保存到缓冲区 发送方的主机地址和端口号一并保存 随后将接收到的数据报返回给发送方 并附上接收缓冲区地址 缓冲长度 发送方地址和端口号等信息 等待新的数据
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!