




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章Java中的网络编程 本章导读1 URL类2 读取URL中的资源3 显示URL资源中的HTML文件4 处理超链接5 InetAddress类6 套接字Socket7 使用多线程处理套接字连接8 UDP数据报9 广播数据包 11 1URL类 包中的URL类是对统一资源定位符 UniformResourceLocator 的抽象 使用URL创建对象的应用程序称作客户端程序 一个URL对象存放着一个具体的资源的引用 表明客户要访问这个URL中的资源 利用URL对象可以获取URL中的资源 一个URL对象通常包含最基本的三部分信息 协议 地址 资源 协议必须是URL对象所在的Java虚拟机支持的协议 许多协议并不为我们所常用 而常用的Http Ftp file协议都是虚拟机支持的协议 地址必须是能连接的有效IP地址或域名 资源可以是主机上的任何一个文件 1 URL的构造方法publicURL Stringspec throwsMalformedURLException该构造方法使用字符串初始化一个URL对象 例如try url newURL catch MalformedURLExceptione System out println BadURL url 该URL对象使用的协议是 Http 协议 即用户按着这种协议和指定的服务器通信 该URL对象包含的地址是 所包含的资源是默认的资源 主页 publicURL Stringprotocol Stringhost Stringfile throwsMalformedURLException该构造方法构造的URL对象的协议 地址和资源分别由参数protocol host和file指定 返回 11 2读取URL中的资源 URL对象调用InputStreamopenStream 方法可以返回一个输入流 该输入流指向URL对象所包含的资源 通过该输入流可以将服务器上的资源信息读入到客户端 下面的例子1在一个文本框中输入网址 然后点击确定按钮读取服务器上的资源 由于网络速度或其它的因素 URL资源的读取可能会引起堵塞 因此 程序需在一个线程中读取URL资源 以免堵塞主线程 返回 11 3显示URL资源中的html文件 在上面的例子1中 我们可以将的主页的内容显示在文本区中 但是 有时候我们想看到网页的运行效果 Javax swing包中的JEditorPane类可以解释执行html文件 也就是说 如果你把html文件读入到JEditorPane 该html文件就会被解释执行 显示在JEditorPane中 这样程序就看到了网页的运行效果 可以使用JEditorPane类的构造方法 publicJEditorPane publicJEditorPane URLinitialPage throwsIOExceptionpublicJEditorPane Stringurl throwsIOException构造JEditorPane对象 后两个构造方法使用参数initialPage或url指定该对象最初显示的URL中的资源 JEditorPane对象调用publicvoidsetPage URLpage throwsIOException法可以显示新的URL中的资源 在下面的例子2中 我们用JEditorPane对象显示网页 返回 11 4处理超链接 当JEditorPane对象调用setEditable方法将编辑属性设为false时 不仅可以显示网页的运行效果 而且用户如果单击网页中超链接还可以使得JEditorPane对象触发HyperlinkEvent事件 程序可以通过处理HyperlinkEvent事件 来显示新的URL资源 JEditorPane对象调用addHyperlinkListener HyperlinkListenerlistener 获得监视器 监视器需实现HyperlinkListener接口 该接口中的方法是 voidhyperlinkUpdate HyperlinkEvente 在下面的例子中 当单击超链接时 JEditorPane对象将显示超链接所链接的网页 返回 11 5InetAdress类 我们已经知道Internet上的主机有两种方式表示地址 1 域名例如 2 IP地址例如 包中的InetAddress类对象含有一个Internet主机地址的域名和IP地址 1 获取Internet上主机的地址我们可以使用InetAddress类的静态方法 getByName Strings 将一个域名或IP地址传递给该方法的参数s 获得一个InetAddress对象 该对象含有主机地址的域名和IP地址 该对象用如下格式表示它包含的信息 当你运行上述程序时应保证你已经连接到Internet 通过拨号或局域网连接到Internet上 上述程序的运行结果 2 获取本地机的地址我们可以使用InetAddress类的静态方法 getLocalHost 获得一个InetAddress对象 该对象含有本地机的域名和IP地址 返回 11 6套接字Socket IP地址标识Internet上的计算机 端口号标识正在计算机上运行的进程 程序 端口号与IP地址的组合得出一个网络套接字 端口号被规定为一个16位的整数0 65535 其中 0 1023被预先定义的服务通信占用 如telnet占用端口23 http占用端口80等 除非我们需要访问这些特定服务 否则 就应该使用1024 65535这些端口中的某一个进行通信 以免发生端口冲突 1 套接字连接所谓套接字连接就是客户端的套接字对象和服务器端的套接字对象通过输入 输出流连接在一起 现在我们分三个步骤来说明套接字连接的基本模式 1 服务器建立ServerSocket对象ServerSocket对象负责等待客户端请求建立套接字连接 类似邮局某个窗口中的业务员 也就是说 服务器必须事先建立一个等待客户请求建立套接字连接的ServerSocket对象 ServerSocket的构造方法是 ServerSocket intport 当建立服务器套接字时可能发生IOException异常 因此要象下面那样建立接收客户的服务器套接字 try ServerSocketwaitSocketConnection newServerSocket 1880 catch IOExceptione 当服务器的ServerSocket对象waitSocketConnection建立后 就可以使用方法accept 接受客户的套接字连接请求 代码如下所示 waitSocketConnection accept 接收客户的套接字也可能发生IOException异常 因此要象下面那样建立接受客户的套接字 try SocketsocketAtServer waitSocketConnection accept catch IOExceptione 所谓 接收 客户的套接字请求 就是accept 方法会返回一个Socket对象 socketAtServer 称作服务器端的套接字对象 SocketsocketAtServer waitSocketConnection accept System out println ok catch IOExceptione 2 客户端创建Socke对象 客户端程序可以使用Socket类创建对象 Socket的构方法是 Socket Stringhost intport 参数host是服务器的IP地址 port是一个端口号 也可以使用Socket类不带参数的构造方法publicSocket 创建一个套接字对象 该对象不请求任何连接 该对象再调用publicvoidconnect SocketAddressendpoint throwsIOException请求和参数SocketAddress指定地址的套接字建立连接 为了使用connect方法 可以使用SocketAddress的子类 InetSocketAddress创建一个对象 InetSocketAddress的构造方法是 publicInetSocketAddress InetAddressaddr intport 创建Socket对象可能发生IOException异常 因此要象下面那样建立到服务器的套接字连接try SocketsocketAtClient newSocket http 192 168 0 78 1880 catch IOExceptione 客户端建立socketAtClient对象的过程就是向服务器发出套接字连接请求 如果服务器端相应的端口上有ServerSocket对象正在使用accept方法等待客户 那么双方的套接字对象socketAtClient和socketAtServer就都诞生了 3 流连接客户端和服务器端的套接字对象诞生以后 还必须进行输入 输出流的连接 服务器端的这个Socket对象socketAtServer使用方法getOutputStream 获得的输出流将指向客户端Socket对象socketAtClient使用方法getInputStream 获得的那个输入流 同样 服务器端的这个Socket对象ocketAtServer使用方法 getInputStream 获得的输入流将指向客户端Socket对象socketAtClient使用方法getOutputStream 获得的那个输出流 因此 当服务器向这个输出流写入信息时 客户端通过相应的输入流就能读取 反之亦然 连接建立后 服务器端的套接字对象调用getInetAddress 方法可以获取一个InetAddess对象 该对象含有客户端的IP地址和域名 同样 客户端的套接字对象调用getInetAddress 方法可以获取一个InetAddess对象 该对象含有服务器端的IP地址和域名 套接字调用close 可以关闭双方的套接字连接 只要一方关闭连接 就会导致对方发生IOException异常 下面我们通过一个简单的例子说明上面讲的概念 在例子5中 客户端向服务器发出ASCII表的顺序值 1 127 服务器接受这些数据 并将顺序值对应的字符返回给客户 你首先将例子5中服务器端的Server java编译通过 并运行起来 等待客户请求连接 然后运行客户端程序 返回 11 7使用多线程处理套接字连接 套接字连接中涉及到输入流和输出流操作 客户或服务器读取数据可能会引起堵塞 我们应把读取数据放在一个单独的线程中去进行 另外 服务器端收到一个客户的套接字后 就应该启动一个专门为该客户服务的线程 我们用学过的组件 设计一个略微复杂的套接字连接 在下面的例子6中 客户输入一个一元二次方程的系数并发送给服务器 服务器把计算出的方程的实根返回给客户 因此你可以将计算量大的工作放在服务器端 客户负责计算量小的工作 实现客户 服务器交互计算 来完成某项任务 返回 11 8UDP数据报 基于UDP通信的基本模式是 1 将数据打包 称为数据包 好比将信件装入信封一样 然后将数据包发往目的地 2 接受别人发来的数据包 好比接收信封一样 然后查看数据包中的内容 1 发送数据 1 创建DatagramPacket对象首先用DatagramPacket类将数据打包 即用DatagramPacket类创建一个对象 称为数据包 返回 用DatagramPacket的以下两个构造方法创建待发送的数据包 DatagramPacket bytedata intlength InetAddtressaddress intport DatagramPack bytedata intoffset intlength InetAddtressaddress intport 使用构造方法创建的数据包对象具有下列两个性质 含有data数组指定的数据 该数据包将发送到地址是address 端口号是port的主机上 我们称address是它的目标地址 port是这个数据包的目标端口号 其中 第2个构造方法创建的数据包对象含有数组data从offset开始指定长度的数据 例如 bytedata 近来好吗 getByte InetAddtressaddress InetAddtress getName DatagramPacketdata pack newDatagramPacket data data length address 980 2 发送数据然后用DatagramSocket类的不带参数的构造方法 DatagramSocket 创建一个对象 该对象负责发送数据包 例如 DatagramSocketmail out newDatagramSocket mail out send data pack 2 接收数据DatagramSocket类另一个构造方法 DatagramSocket intport 创建一个对象 其中的参数必须和待接收的数据包的端口号相同 例如 如果发送方发送的数据包的端口号是5666 DatagramSocketmail in newDatagramSocket 5666 该对象mail in使用方法receive DatagramPacketpack接受数据包 该方法有一个数据包参数pack 方法receive把收到的数据包传递给该参数 因此我们必须预备一个数据包以便收取数据包 这时需使用DatagramPack类的另外一个构造方法 DatagramPack bytedata intlength 创建一个数据包 用于接收数据包 例如 bytedata newbyte 100 intlength 90 DatagramPacketpack new DatagramPacket data length mail in receive pack 该数据包pack将接收长度是length的数据放入data 在下面的例子7中两个主机 可用本地机模拟 互相发送和接收数据包 返回 11 9广播数据包 广播数据包类似于电台广播 进行广播的电台需在指定的波段和频率上广播信息 接收者只有将收音机调到指定的波段 频率上才能收听到广播的内容 广播数据包涉及到地址和端口 我们知道 Internet的地址是a b c d的形式 该地址的一部分代表用户自己主机 而另一部分代表用户所在的网络 当a小于128 那么b c d就用来表示主机 这类地址称做A类地址 如果a大于等于128并且小于192 则a b表示网络地址 而c d表示主机地址 这类地址称做B类地址 如果a大于等于192 则网络地址是a b c d表示主机地址 这类地址称做C类地址 224 0 0 0与239 255 255 255之间的地址称做D类地址 D类地址并不代表某个特定主机的位置 一个具有A B或C类地址的主机要广播数据或接收广播 都必须加入到同一个D类地址 一个D类地址也称做一个组播地址 加入到同一个组播地址的主机可以在某个端口上广播信息 也可以在某个端口号上接收信息 准备广播或接收的主机需经过下列步骤 1 1 设置组播地址使用InetAddress类创建组播组地址 例如 InetAddressgroup InetAddress getByName 239 255 8 0 2 创建多点广播套接字使用MulticastSocket类创建一个多点广播套接字对象 Multicast
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年企业可持续发展报告:聚焦SDGs目标与绿色企业文化培育
- 2025年农业物联网在精准种植中的农业物联网设备能耗管理与优化报告
- 睡眠健康教学课件
- 38度发烧的护理常规讲课件
- 上海博物馆讲课件
- 文化活动的室内外声学设计对比
- 中山职业技术学院《桥梁模型试验》2023-2024学年第二学期期末试卷
- 2024年度浙江省二级建造师之二建公路工程实务通关题库(附答案)
- 商业培训中的学生动机激发技巧
- 广州科技贸易职业学院《医学论文写作》2023-2024学年第二学期期末试卷
- 2025版国家开放大学法学本科《知识产权法》期末纸质考试第三大题名词解释题库
- 保安反恐防暴培训
- 《无人机测绘技术》项目2任务1无人机航测任务规划
- 新能源汽车充电桩项目可行性研究报告模板及范文
- 电力市场概论张利课后参考答案
- 2024版首诊负责制度课件
- 人工智能在教育行业的创新应用研究
- 常州大学《工程热力学》2022-2023学年第一学期期末试卷
- 高考物理一轮复习考点精讲精练第34讲 光电效应 波粒二象性(解析版)
- 新能源行业光伏发电技术操作指南
- 全国托育职业技能竞赛(保育师赛项)选拔赛考试题及答案
评论
0/150
提交评论