已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章 用户网络程序设计 知识点 TCP IP协议的分层结构IP地址与域名Java中URL对象的创建及使用编写SOCKET客户机 服务器的应用程序 TCP IP协议的分层结构 每一层负责不同的通信功能URL就是Java基于应用层的一种网络应用的实现Socket是TCP IP协议中的传输层接口 IP地址与域名 TCP IP协议中定义了一种通用的地址编码方案 即IP地址 可以惟一区分每一台计算机 例 166 111 136 3建立IP地址和主机名之间的映射关系 主机名就是平时所说的域名 如 1 URL的使用 URL称为统一资源定位器 是对Internet某资源的一个引用 地址 J包含有一个称为URL的类 在程序中可用它代表一个URL地址 所有的URL拥有两个主要的组成部分 协议标识符和资源名称即 protocolID resourceName例 URL的通用格式 传输协议 常用的标识符有 FILE HTTP FTP TELNET WAIS NEWS MAILTO等 文档和服务所在的主机名 即域名系统DNS中的 点 地址 域名或IP地址 如 172 17 98 1 服务端口号 各种网络协议有自己相应的端口号 http的默认端口号为80 FTP为21 Telnet为23等 如果采用相应的默认端口 80 端口号可以忽略 建立一个URL 在Java的网络类库中 URL类提供了对URL进行解析的方法 在程序中可用一个String建立一个URL对象 打开对它的一个连接 然后在这个连接中读入和写出信息 建立一个绝对URL对象 创建一个相对URL对象 为文件中的命名 锚点 建立了一个URL对象 建立一个绝对URL 由一个绝对的URL地址创建URL对象 已知一个网点为URLgamelan newURL 表示一个绝对URL 包含了到达资源所需的所有信息 URL字符串 建立一个相对URL 由一个相对的URL地址创建URL对象 假定程序中已经创建了一个URL对象 还已知同网点中的一个文件为 Gwork htmlURLgamelan newURL URLgamelanNetwork newURL gamelan Gwork html 只包含到达对于另一个URL 或处于另一个URL上下文之中 的资源的足够信息 建立一个带 锚点 的URL 为一个文件中的命名 锚点 作为引用 创建URL对象 假定Gwork html文件中 在它的底部有一个称为BOTTOM的锚点 所创建的URL对象为 URLgamelanNetworkBottom newRUL gamelanNetwork BOTTOM BOTTOM前的字符 是必需的 URL构造函数的一般形式 创建URL对象使用了URL类的构造函数 一般形式 其中 指定新URL基址的一个URL对象 是一个字符串 设定相对于这个基址的资源名字的剩余部分 注意 如果baseURL为null 构造函数将relativeURL视为一个绝对URL指定 如果relativeURL是一个绝对URL设置 那么构造函数忽略baseURL 获得URL对象属性 在成功建立一个URL对象以后 可通过URL类提供的方法获取对象的各种属性 PublicStringgetProtocol 协议名称PublicStringgetHost 主机名称PublicStringgetPort 端口号PublicStringgetDefaultPort 协议的默认端口 未指定端口时 PublicStringgetFile 完整文件名PublicStringgetRef URL引用PublicStringgetUserInfo 用户信息部分PublicStringtoString 获取整个URL字符串不包含的属性返回null 没有端口号时 getPort 返回 1 获取URL对象属性 publicclassurltest publicstaticvoidmain String args URLurl try url newURL file D jdk1 4 docs api index html chapt1 file协议info url url newURL http jdk1 4 docs api index html chapt1 http协议info url catch MalformedURLExceptionme 参数有错 非运行时异常System out println MalformedURLException me publicstaticvoidinfo URLurl System out println toString url toString 其它属性 URL创建后仅代表一个网络资源 直接从URL读取内容 在成功建立一个URL以后 调用URL对象的openStream方法与指定的URL建立连接并获得一个输入流 从中可读取这个URL的内容 即资源文件的内容 即数据 openStream方法返回一个java io InputStream对象 使用InputStream方法从一个URL中读取内容 下列程序运行结果 直接打开一个输入流的方法 importjava io publicclassopenStreamTest publicstaticvoidmain String args try URLyahoo newURL 根据URL建立一个数据输入流DataInputStreamdis newDataInputStream yahoo openStream StringinputLine while inputLine dis readLine null 从流中读取一行显示System out println inputLine dis close catch MalformedURLExceptionme 参数有错 非运行时异常System out println MalformedURLException me catch IOExceptionioe System out println IOException ioe 注意 只有在网络连通的情况下可执行 直接打开一个输入流的方法 如果想得到更多的有关站点资源的信息 或者需要向服务器输出自己的数据的话 URL类就无能为力了 这时需要使用URLConnection对象 该对象封装了从本机到Web对象的活动的HTTP连接 是以HTTP协议为中心的类 URLConnection对象是一个访问远程资源的类 连接一个URL 在成功创建一个URL之后 调用该URL对象的openConnection方法返回一个用于URL的URLConection对象与它连接 建立起程序与该URL之间的网络通信链接 try 建立连接URLyahoo newURL URLConnectionyc yahoo openConnection 创建对象 catch MalformedURLExceptione newURL failed catch IOExceptione openConnection failed 读写URLConnection URLConnection类包含许多与URL进行网络通信的方法 见后 它是一个抽象类 不能直接对它实例化 要使用URLConnection类必须先创建一个URL对象 1 从URLConnection读取显示地开通与URL的一个连接 获得这个连接的输入流 importjava io classConnectionTest publicstaticvoidmain String args try URLyahoo newURL URLConnectionyahooConnection yahoo openConnection 建立连接DataInputStreamdis newDataInputStream yahooConnection getInputStream StringinputLine while inputLine dis readLine null System out println inputLine dis close catch MalformedURLExceptionme System out println MalformedURLException me catch IOExceptionioe System out println IOException ioe 用getInputStream 方法和getOutputStream 方法得到指定资源的输入和输出流 2 往URLConnection写 Java程序可以与服务器端的cgi bin脚本交互作用 能简单地写URL 为服务器提供数据 实现步骤 1 创建一个URL 2 开通对URL的一个连接 3 从这个连接获得一个输出流 输出流被连接到服务器上cgi bin脚本的标准输入流 4 写入这个输出流 5 关闭这个输出流 importjava io classReverseTest publicstaticvoidmain String args try if args length 1 System err println Usage JavaReverseTest string to reverse System exit 1 StringstringToReverse URLEncoder encode args 0 URLurl newURL DataInputStreaminStream newDataInputStream connection getInputStream StringinputLine while inputLine inStream readLine null System out println inputLine inStream close catch MalformedURLExceptionme System err println MalformedURLException me catch IOExceptionioe System err println IOException ioe URLConnection类的实例方法 URLConnection的特点是以HTTP协议为中心的类 openConnection方法声明 创建对象 publicURLConnectionopenConnection throwsIOException实例方法 publicObjectgetContent IOException 获取资源内容publicintgetContentLength 获取资源信息的长度publicStringgetContentType 获取资源信息的类型publiclonggetData 获取资源的当前日期publiclonggetLastModified 获取资源的最后修改日期publicInputStreamgetInputStream throwsIOException 输入流publicOutputStreamgetOutputStream throwsIOException 输出流 2 编写客户机 服务器的应用程序 Socket是实现客户 服务器 Client Server 模式的通信方式 这种通信模式首先要创建一个Socket类 利用这个类实例建立一条可靠链接 以流的方式传输数据 这种服务模式是目前广泛应用于各种应用环境的分布计算模式 Java提供了极其方便的客户机 服务器编程机制 Socket通信的基本概念 建立连接两台计算机分别运行不同的程序 由一端发出请求 由另一端等候连接请求 当等候端收到请求并接受请求后 两个程序则建立起一个连接 通过这个连接可以进行数据交换 请求方称为客户端 接收方成为服务端 这是计算机通信的一个基本机制 称客户 服务器模式 基本概念 连接地址能够惟一识别对方机器的地址 就是计算机的名称或地址 在Internet网中 计算机的惟一标识是IP地址 一台机器上可能会启动多个程序 必须为每个程序分配一个惟一的端口号 一个完整的连接地址 计算机的IP地址 连接程序的端口号 基本概念 端口号在TCP IP系统中 端口号由16位整数组成 范围是0 65535 其中前1024个端口已预先定义特殊服务程序 其余端口可自由分配 例 80 web服务 21 ftp服务 110 pop3服务连接之前约定好端口 端口号由服务器端分配 并等候请求 客户端使用该端口号发出请求 两个程序的端口号一致 连接成功 什么是Socket 一个Socket是在网络上运行的两个程序之间的双向通信链中的一个端点 套接字 Java提供了相应的Socket编程方法 用Java既可以编写服务端程序又可以编写客户端的程序 服务端套接字使用ServerSocket类 客户端套接字使用Socket类 Java的TCP IP协议下Socket通信模式 服务端 客户端 ServerSocket port ServerSocket accept Socket OutputStream InputStream ServerSocket close Socket host port Socket Close 在指定端口注册服务器端的套接字 在指定端口等待连接 建立Socket连接 停止ServerSocket服务 向指定计算机和端口号发出连接请求 Socket close 关闭Socket连接 InputStream OutputStream 通过流进行数据交换 编写服务端的程序 Java中的ServerSocket类提供了服务端的Socket接口 例中提供了一个模拟FTP服务器的服务软件 只提供了最简单的建立FTP连接的功能 借用Windows本身提供的FTP客户软件来测试这个模拟的FTP服务程序 importjava io publicclassftpserver publicstaticvoidmain Stringargs try ServerSocketftpserv newServerSocket 21 Socketfs ftpserv accept PrintStreamfs out newPrintStream fs getOutputStream DataInputStreamfs in newDataInputStream fs getInputStream 这4个语句可作为编写服务端程序的一个范式 Ftpserver java fs out println Welcometothetestserver System out println gotfollowinforfromclient fs in readLine fs out println 331PleasesendPassword System out println gotfollowinforfromclient fs in readLine fs out println 230LoginOK System out println gotfollowinforfromclient fs in readLine catch Exceptione System out println e 按照约定的协议对输入输出流进行读写操作 Ftpserver java 测试该程序 可以在一台安装了Window98并配置了TCP IP协议的微机上进行 两个DOS窗口 C WINDOWS system32 ftp ftp202 207 208 8Connectedto202 207 208 8WelcometothetestserverUser 202 207 208 8 none anonymous331PleasesendPasswordPassword 输入真实的Email地址 230LoginOKftp bye c j2sdk1 4 0 bin javaftpservergotfollowinforfromclient USERanonymousgotfollowinforfromclient PASS 输入真实的Email地址 gotfollowinforfromclient QUIT 客户端 模拟FTP服务器 说明 创建一个服务器端的Socket 将其绑定到21端口 一直等待客户端的连接 利用accept 方法接受客户端的连接 为建立的连接打开一个输出流 为建立的连接打开一个输入流 按照约定的协议对输入输出流进行读写操作 其中 USER PASS QUIT分别为协议规定的编程者账号 口令及退出的命令 以上可看出客户端和服务器端对话的简单过程 这里省略了服务端对用户及口令的检验以及根据客户端输入的不同命令执行各种操作 编写客户端的程序 自己编写一个客户端的程序 使用一个自己定义的简单协议 服务器使用一个空闲的端口8886 客户端连接后 1 服务端向客户端发送一条信息 2 客户端读取服务端的信息并显示 再向服务端发送一条反馈信息 3 服务端读取客户端的反馈信息并显示 importjava io publicclassServer publicstaticvoidmain Stringargs try ServerSocketserver 1 newServerSocket 8886 Socketsocket s server 1 accept PrintStreamserver out newPrintStream socket s getOutputStream DataInputStreamserver in newDataInputStream socket s getInputStream server out println Thisisinforsentbyserver r Strings1 server in readLine System out println gotfollowinforfromclient s1 catch Exceptione System out println e 服务端的程序Server java importjava io publicclassClient publicstaticvoidmain Stringargs try Socketsock 1 newSocket 202 207 208 8 8886 DataInputStreamclient in newDataInputStream sock 1 getInputStream DataOutputStreamcl out newDataOutputStream sock 1 getOutputStream PrintStreamclient out newPrintStream cl out 客户端的程序Client java 这4个语句可作为编写客户端程序的一个范式 Strings1 client in readLine System out println gotfollowinforfromserver s1 client out println Thisisinforsentbyclient r catch Exceptione System out println e 客户端的程序Client java 按照约定的协议对输入输出流进行读写操作 说明 创建一个客户端的Socket 与 202 207 208 8 主机建立一个连接 要求与服务器端的Socket所绑定的端口号相对应 为Socket创建一个输入流 为Socket创建输出流 按照约定的协议对输入输出流进行读写操作 readLine 读取服务端发送的字符串println 向服务器发送 测试时 既可以在通一台微机上开两个DOS窗口 也可以在两台联网的微机上进行 执行效果 客户端 c j2sdk1 4 0 bin javaClientGotfollowinforfromserver Thisisinforsentbyserver服务端 c j2sdk1 4 0 bin javaServerGotfollowinforfromclient Thisisinforsentbyclient 可以为前面的模拟FTP服务程序编写一个客户端程序 见Ftpc java importjava io publicclassFtpc publicstaticvoidmain Stringargs try Socketsock 1 newSocket 202 207 208 8 21 DataInputStreamclient in newDataInputStream soc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年民宿污水处理服务合同协议
- 2025年水资源综合治理项目可行性研究报告及总结分析
- 2025年衢州市护理竞赛模拟考试(第二场)
- 2025年低碳城市可持续发展项目可行性研究报告及总结分析
- 2025年人工智能在工业生产中的应用项目可行性研究报告及总结分析
- 华为ICT大赛2025-2026中国区(实践赛)昇腾AI赛道校赛理论考试题 含答案
- 2025年旅游体验经济发展项目可行性研究报告及总结分析
- 2025年数字化农业生态系统构建可行性研究报告及总结分析
- 2025年智能农业综合服务平台可行性研究报告及总结分析
- 2025年注册会计师(综合阶段)考试深度剖析试题试卷
- 自考《心理治疗》5624学习资料
- 粮油食材配送投标方案(大米食用油食材配送服务投标方案)(技术方案)
- SONY索尼数码照相机DSC-HX200使用说明书
- 北师大版高考英语一轮复习选择性必修第2册UNIT4 HUMOUR课件
- 住宅机电施工图设计技术标准
- 动静脉瘘护理查房
- 保险行业职业生涯规划总结
- 中国现当代文学史-13贾平凹的文学地理
- 大数据与会计专业职业生涯规划书2700字数
- 七年级上册小题狂做英语巅峰版2022电子版
- 组培基本操作技术-无菌操作(园艺植物组织培养)
评论
0/150
提交评论