CH11 Java网络编程.ppt_第1页
CH11 Java网络编程.ppt_第2页
CH11 Java网络编程.ppt_第3页
CH11 Java网络编程.ppt_第4页
CH11 Java网络编程.ppt_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、,java网络编程技术,设计、制作:谭献海 Email:,第一节 JAVA概述,1.1 JAVA概述,Java是什么? C+语言虽在计算机行业广为使用,但它的复杂与繁琐也令一般用户为之伤透脑筋。 Java= “C+”-“复杂性和奇异性”+“安全性和可移植性”,1JAVA概述,JAVA的定义 Java有两方面的含义:Java语言、Java平台 作为一种语言,Java是一种跨平台开发语言,能开发出跨平台的应用对象和应用程序。例如:Oracle 8i的安装程序就是用Java开发的。 Java语言具有以下特点:简单、面向对象、分布式、解释执行、安全、 跨平台、高性能、多线程等。 作为一种平台,Java

2、平台包括两部分内容:Java虚拟机和Java API。,1JAVA概述,用Java 可 以 写 两 种 类 型 的 程 序: 小 程 序( 又 叫Java Applet) 和 应 用 程 序(Java Application)。 小 程 序 是 嵌 入 在HTML 文 档 中 的Java 程 序; 而Java 应 用 程 序 是 从 命 令 行 运 行 的 程 序。 对Java 而 言,Java 小 程 序 的 大 小 和 复 杂 性 都 没 有 限 制。 事 实 上,Java 小 程 序 有 些 方 面 比Java 应 用 程 序 更 强 大。 但 是 由 于 目 前Internet 通 讯

3、 速 度 有 限, 因 此 大 多 数 小 程 序 规 模 较 小。 小 程 序 和 应 用 程 序 之 间 的 技 术 差 别 在 于 运 行 环 境。Java 应 用 程 序 运 行 在 最 简 单 的 环 境 中, 它 的 唯 一 外 部 输 入 就 是 命 令 行 参 数。 而小程序则是通过浏览器来运行,需 要 来 自Web 浏 览 器 的 大 量 信 息: 它 需 要 知 道 何 时 启 动, 何 时 放 入 浏 览 器 窗 口, 何 处、何 时 激 活 关 闭。,JAVA概述,随着Internet技术的发展和应用的推广,Java语言也不断有更新版本推出,以满足新的需求,java的版

4、本从1.X演变到了java2,这时,为了在明显区分各种Java的应用,由分割出了J2EE、J2SE以及J2ME三种版本。 1、J2SE J2SE(Java 2 Platform ,Standard Edition)含有基本的Java 2 SDK、工具、运行时(Runtime)和API,开发者可以用来编写、部署和运行Java应用程序和Applet。,JAVA概述,2、J2EE J2EE(Java 2 Platform , Enterprise Edition)建立在J2SE的基础之上,它是JSP(Java Server Page)、Servlet、EJB(Enterprise JavaBean)

5、、JTS(Java Transaction Service)、Java mail以及JMS(Java Message Service)等多项技术的混合体,并且还含有兼容性测试套件,主要用于开发分布式的、服务器端的多层结构的应用系统,例如电子商务网站。 3、J2ME J2ME(Java 2 Platform , Micro Edition)主要用于开发电子产品,例如移动电话、数字机顶盒、汽车导航系统等。,1.2 Java的 特 点,Sun公司这样形容自己的Java语言:它是一种简单、面向对象、分布式、解释型、稳定、安全、结构中立、易移植、高性能、多线程的动态语言。,1.2 Java的 特 点,(

6、1) 面向对象 类、封装性、多态性、继承性、动态链接 (2) 操作平台无关性 用Java语言编写的程序可以在任何一台计算机上运行,而不管该计算机使用何种操作系统,,Java是一种解释型语言。由于产生的是中间代码字节代码,而不是特定的机器码,因而与平台无关。,两种工作模式的比较,虚拟机,为了做到Java的可移植性,Java引入了Java虚拟机(Java Virtual Machine , JVM)的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特

7、定系统的机器码执行。 在Java中,这种供虚拟机理解的代码叫做字节码(ByteCode),它不面向任何特定的处理器,只面向虚拟机。 从结构上看,Java虚拟机由一组抽象的部件组成,这些部件包括指令集、寄存器组、类文件格式规定、堆栈、内存垃圾收集器和存储区6个部分。,JAVA语言的安全性,Java取消了指针,杜绝了不怀好意的程序对内存恶意篡改。 Java语言的安全机制基于“不存在可信任的代码”的概念。其运行环境提供了以下四级安全保障机制: 字节码校验器 类装载器 运行时内存布局 文件访问机制,1.2 Java的 特 点,(4) 多线程 Java提供现成的类Thread,只要继承这个类就可以编写多

8、线程的程序。 (5) 简单性 Java在形式上它和C/C+极为相似,但进行了精简。Java与C及C+的区别 不再有#include 和#define 等于处理功能 不再有structure,union及typedef 不再有函数、不再有指针、不再有多重继承 不再有goto 不再有操作符重载(Operatior Overloading) 取消自动类型转换,要求强制转换,丰 富 的 类 库,Java提 供 了 大 量 的 类 以 满 足 网 络 化 、 多 线 程 、 面 向对象系统的需 要 。 1. 语 言 包 提 供 的 支 持 包 括 字 符 串 处 理 、 多 线 程 处 理 、例外 处

9、理 、 数 学 函数 处 理 等 ,可 以 用 它 简 单 地 实 现 Java 程 序的 运 行 平 台 。 2. 实 用 程 序 包 提 供 的 支 持 包 括 哈 希 表 、 堆 栈 、 可 变 数组、 时 间 和 日 期 等。 3. 输 入 输 出 包 用 统 一 的 流 模 型 来 实 现 所 有 格式 的 I/O,包括 文 件 系 统 、 网 络、 输 入 /出 设 备 等 。 4. 低 级 网 络 包 用 于 实 现 URL、Socket、数据报等网络编 程方法 。 5. 抽 象 图 形 用 户 接 口 包 实 现 了 不 同 平 台 的 计 算 机 的 图形用 户 接 口 部

10、件 ,包括 窗 口 、 菜 单 、 滚 动 条 、 对 话 框 等 ,使得 Java可 以 移 植 到 不 同平 台 的 机 器 。 6. 网 络 包 支 持 Internet的 TCP/IP协 议 ,提 供 了 与 Internet的 接 口。它 支 持 URL连 接,WWW的 即 时 访 问 ,并 且 简 化 了 用 户/服 务 器 模型 的 程 序 设 计,1.3 Java的开发环境,运行“j2sdk-1_3_1-win.exe”,按安装向导进行安装。 解压“j2sdk-1_3_1-doc.zip”,得到JDK的开发文档。 javabin的目录下包含义下主要文件: Javac: Java

11、 编译器,将Java源代码转换成字节码(byte code)。 Java: Java 解释器,直接从类文件执行Java应用程序字节代码。 appletviewer: 小程序浏览器,一种执行HTML文件 上的Java小程序的Java 浏览器。 Javadoc: API文档生成器,根据Java源码及说明语 句生成HTML文档。,Java的开发环境,Jdb:Java 调 试 器, 可 以 逐 行 执 行 程 序, 设 置 断 点 和 检 查 变 量。 Javah:头文件生成器,产 生 可 以 调 用Java 过 程 的C 过 程, 或 建 立 能 被Java 程 序 调 用 的C 过 程 的 头 文

12、 件。 Javap:Java 反 汇 编 器, 显 示 编 译 类 文 件 中 的 可 访 问 功 能 和 数 据, 同 时 显 示 字 节 代 码 含 义。,Java的开发环境,图1. 建 立 小 程 序 的 流 程 图,1.4 Java语言的应用前景,Java语言有着广泛的应用前景,大体上可以从以下几个方面来考虑其应用: 1)所有面向对象的应用开发,包括面向对象的事件描述、处理、综合等; 2)计算过程的可视化、可操作化的软件的开发; 3)动态画面的设计,包括图形图像的调用; 4) 交互操作的设计(选择交互、定向交互、控制流程等); 5)Internet的系统管理功能模块的设计,包括Web页

13、面的动态设计、管理和交互操作设计等; 6)Intranet(企业内部网)上的软件开发(直接面向企业内部用户的软件); 7) 与各类数据库连接查询的SQL语句实现; 其它应用类型的程序。,整数类型 byte、short、int、long 浮点类型 float、double 字符型 char 布尔类型 boolean 类 class 接口 interface 数组 array,基本类型,引用类型,数据类型,Java支持的数据类型,JAVA.IO包中的I/O流概览,JAVA.IO包中的两个基本流:InputStream和OutputStream。 InputStream继承了Object类,它有六个

14、直属的子类,其中之一的FilterInputStream是一个抽象类,并有四个后代。 类似地,OutputStream继承了Object类,它有四个直属的子类,其中之一的FilterOutputStream是一个抽象类,并有三个子类。,输入流,图 InputStream类的继承树,输出流,第二节 JAVA网络编程,Java中的网络支持,JAVA作为“网络上的世界语”,具有独特的网络优势与网络功能。正如Java的设计者Gosling所说,Java的设计就是为了“最大限度地利用网络”。 Java网络支持包括低层通信和高层协议实现 为了进行网络通信,JAVA提供了一个包,将该工具包与java中的输入

15、/输出流相结合,就可以做到从网络上读取文件、数据或向网络写文件或数据时,可以象在本地磁盘上读写文件或数据一样容易和方便。,Java中的网络支持,包中的主要的类和可能产生的例外包括: 面向IP层的类:InetAddress 面向应用层的类:URL、URLConnection 面向传输层的类: TCP协议相关类:Socket、ServerSocket UDP协议相关类:DatagramPacket、DatagramSocket、MulticastSocket 可能产生的例外: BindException、ConnectException、MalformedURLException、NoRouteT

16、oHostException、ProtocolException、SocketException、UnknownHostException、UnknownServiceException,InetAddress类,1 GetHostName() 返回该地址的主机名。如果主机名为null,那么,当前地址指向当地机器的任一可得网络地址。 返回值:类型为 string 2 GetAddress() 以网络地址顺序来返回IP地址 返回值:存在byte型的字节数组中,其中,最高序字节位于标值为0的元素中。 3 GetHostAddress() 以“%d%d%d%d”的形式返回IP地址串。 返回值:类型为

17、 string 4 HashCode() 返回该InetAddress对象的散列码。 返回值:类型为int,InetAddress类,5 Equals(Object obj) 将当前对象与指定对象进行比较。 返回值:true 相同 false 不相同 6 ToString() 将该InetAddress对象以字符串的形式表示出来。 返回值:类型为string的实体对象。 7 GetByName(string host) 该方法用于返回指定主机的网络地址。如果主机名为null,则返回当地机器的默认地址。为了加速对地址的访问,使用了一个当地cashe.如果地址未知,则会发生unknowHostEx

18、ception例外。 参数:host 指定的主机。 返回值:类型为InetAddress,InetAddress类,8 GetAllByName(string host) 返回指定主机名的所有InetAddress对象。 参数:host 指定的主机。 返回值:存放于InetAddress数组中。 9 GetLocalHost 用于返回当地主机的InetAddress对象。如果无法决定主机名,则会发生unknowHostException例外。,例1:获取本机的IP地址 import .*; public class getLocalHostTest public static void mai

19、n() InetAddress myIP=null; try myIP=InetAddress.getLocalHost(); catchUnknowHostException e) System.out.println(myIP); 创建inetAddress类不用构造函数(不用new),获取本机的IP地址,下面的例子演示java如何根据域名进行DNS (与DNS服务器的连接只有一行) import .*; public class getIP public static void main(String args) InetAddress swjtu=null; try swjtu= In

20、etAddress.getByName(“”); catch(UnknowHostException e) System.out.println(swjtu); ,例2 根据域名自动到DNS上查找IP地址,2.2.2 URL网络编程,2.2 URL网络编程,JAVA的.URL类和.URLConnection类使得编程者能很方便地利用URL在Internet上进行网络通信。 2.2.1 URL概念 URL(Uniform Resource Locator)是统一资源定位器的简称,它提供了人和机器的导航,其功能是指向计算机里的资源,即定位。URL指明了取得资源采用的协议和资源地址及文件。 URL格

21、式: 协议名:/资源名 协议名:指明获取资源所用的传输协议,如:http、ftp、gopher、 new、mailto、file等。 资源名:是资源的完整地址,包括主机IP地址(或主机域名)、端口号、完整文件名、HTML文件中参考位置等。,URL网络编程,http:/ 一个完整的URL如下: http:/:80/home/white_paper.html#intro_1 协议主机域名(IP地址) 端口号目录 文件名 HTML参考点 其中, 传 输 协 议 :说 明 访 问 资 源 时 使 用 的 网 络 协 议 。 主 机 名 称 ( host name ) : 资 源 所 在 的 主 机 的

22、 名 称 (IP地址)。 文 件 名(file name) :资 源 在 机 器 上 的 完 整 名 字 。 这 里 的 文 件 名 并 不 是 简 单 的 名 字 , 它 要 包 括 文 件 的 完 整 的 路 径 名 , 这 样 我 们 才 能 直 接 通 过 文 件 名 访 问 到 一 个 文 件 。 端 口 号 ( port number) : 连 接 时 所 使 用 的 服 务 器 端 口 号 。省 略时表示标准端口号,如http:80,telnet:23等 。 参 考 点 ( reference ) : 资 源 中 的 特 定 位 置 , 用 来 标 识 一 个 文 件 中 特 定

23、 的 偏 移 位 置 。 通 过 参 考 点 我 们 可 以 对 一 个 文 件 中 感 兴 趣 的 部 分 创 建 URL 对 象 。,URL网络编程,2.2.2 URL类URL类提供的最基本的网络功能是以流的形式读取URL所指的的数据。由URL类生成的对象指向WWW资源(如WEB页、文本文件、图形图象文件、音频视频文件等等)。 建立URL对象后就可使用通用的格式取得URL的各个部分的信息和获取URL内容。,URL网络编程,2.2.3 四种URL构造方法 (1) URL(String spec) 简单地用一个字符串生成URL对象,例如: URL url0= new URL( (2) URL(

24、String protocol,String host,String file) 由用户分开指定URL各个部分、但采用缺省端口构成URL对象,例如: URL url1=new URL( http , ,/YFjava/java7.html); (3) URL(String protocol,String host,int port,String file); 由用户分开指定URL各个部分构成URL对象,如: URL url2=new URL(http,80, /YFjava/java7.html); 注意:2、3构造方法不能构造含有“参考点”的URL地址。,URL网络编程,(4) URL(UR

25、L context,String spec) 构造相对URL对象,如: URL base1=new URL(http:/:80/ YFjava/); URL url3=new URL( base1, java7.html); 再如: URL base2=new URL(http:/:80/ YFjava/java7.html); URL url4=new URL( base2, #bookmark); 注:这种方法常用于Java Applet,如: URL url1=new URL(getDocumentBase(),file1.txt); 或 URL url2=new URL(getCode

26、Base(),file2.txt); 在类Applet中提供了方法getCodeBase()和getDocumentBase(),它们分别返回嵌有Applet的HTML文件和Applet字节码文件的URL地址,多数情况下,这两个返回值是相同的,但是如果在HTML的APPLET单元中由属性CODEBASE指定的Applet字节码文件的URL地址与HTML文件不同,则二者的返回值将会不同。,URL网络编程,/ Methods public boolean equals(Object obj); / 将该URL对象与给定的URL对象比较 public final Object getContent(

27、); / 用于从打开的连接中获取信息 public String getFile();/ 返回网络资源的文件名public String getHost();/ 返回主机名public int getPort();/ 返回通信端口号public String getProtocol(); / 返回通信协议public String getRef(); / 返回参考点,URL网络编程,public int hashCode();/ 生成一个与散列表索引相对的整数值 public URLConnection openConnection();/ 生成URLConnection对象 public f

28、inal InputStream openStream();/ 打开数据流 public boolean sameFile(URL other); /将该URL的数据与给定的URL的数据比较,其中不包括参考点的比较 public static void setURLStreamHandlerFactory(URLStreamHandlerFactory fac); / 用于设置URLStreamHandler制造工厂 public String toExternalForm();/将该URL对象以字符串的形式表示 public String toString();/将将该URL对象的内容转换成

29、字符串的形式,URL网络编程,2.2.4 异常处理 URL类的构造方法都可能发生MalformedURLException非运行时异常,因此生成URL对象时,必须对这一异常进行处理。 try URL myURL=new URL(http:/java, catch (MalformedURLException e) System.out.println(MalformedURLException:+e); ,URL网络编程,(II) URL的双向通信-URLConnection URLConnection类提供访问网络资源时更多、更好的方法。 URLConnection类 1Connect()

30、2GetRUL /返回连接的URL 3GetContentLength() 4GetContentType() 5GetContentEncoding() 6GetExpiration() /返回该对象的终止期 7GetDate() 8GetLastModified() 9GetHanderField(string name)/根据给定的名称返回标题域;name:标题域的名称 10 GetHanderFieldInt(string name,int default) /根据给定的名称返回标题域;name:标题域的名称;default:如果出错,则返回该缺省值,URL的双向通信,11 GetHa

31、nderFieldDate(string name,long default) /根据给定的名称返回标题域日期;name:标题域的名称;default:如果出错,则返回该缺省值 12GetHanderFieldKey(int n)/返回第n个标题域的关键字 13 GetHanderField(int n) /返回第n个标题域的值 14 GetContent()/获取由该URL指定的对象 15GetInputStream() /获取一个从对象读取数据的输入流 16 GetOutputStream()/获取一个向对象写数据的输出流 17 ToString() /返回该URL连接的字符串表示形式 1

32、8SetDoInput(Boolean doinput) /URL可以用于输入 19 GetDoInput() 20 SetDoOutput(Boolean doouput) /URL可以用于输出 21 GetDoOutput() 22 SetAllowUserInteraction(Boolean allowuserinteracton) /允许用户交互 23 GetAllowUserInteraction(),URL的双向通信,24 SetDefaultAllowUserInteraction (Boolean defaultuserinteraction) 25 GetDefaultAl

33、lowUserInteraction() 26 SetUseCaches(Boolean usecaches) 27 GetUseCaches() 28 SetModifiedSince(long ifmodifiedsince) 29 GetIfModifiedSince() 30 SetDefaultUseCaches(Boolean defaultusecaches) 31 GetDefaultUseCaches() 32 SetRequestProperty(string key,string value) 33 GetRequestProperty() 34 SetDefaultRe

34、questProperty(string key,string value) 35 GetDefaultRequestProperty(),用URLConnection类实现页面的访问,使用URLConnection类来访问Web页面的步骤如下: (1) 调用URL类的openConnection()方法得到一个URLConnection类的实例:URLConnection conn = url.openConnection(); (2) 调用以下方法,设置所有相关属性: setAllowUserInteraction() setDoInput() setDoOutput() setIfMod

35、ifiedSince() setUseCaches() setRequestProperty(),(3) 调用connect()方法连接远程资源: conn.connect(); connect()方法除了创建一个连接指定服务器的套接字连接外,还可以查询服务器以获取相应头信息(header information)。,URL的双向通信,(4) 连接服务器以后,使用getHeaderFieldKey()和getHeaderField()方法来枚举出头信息的所有域。此外,也可以使用如下的方法来查询标准域的内容: getContentEncoding() getContentLength() get

36、ContentType() getDate() getExpiration() getLastModified(),URL的双向通信,(5) 使用getInputStream()方法访问资源数据。用getInputStream()方法将返回一个输入流,此输入流和URL类的openStream()方法返回的输入流是相同的。,URL的双向通信,2.2.3 SOCKET通信,3.Socket通信,3.1JAVA socket类 ServerSocket类(服务器socket类) Socket类 SocketInputStream类 SocketOutputStream类,3.1JAVA socket

37、类,ServerSocket类(服务器端) 1 ServerSocket(int port) 在指定端口上生成一个服务器套接字 2ServerSocket(int port,int count) 在指定端口上生成一个服务器套接字,并且指定与端口间的连接进行监听的次数。 3GetInetAddress() 返回该套接字所连接的IP地址值 4GetLocalPort() 返回该套接字所连接的端口号 5Access() 以阻塞方式接受一个连接 6Close() 关闭套接口,3.1JAVA socket类,7ToString() 返回该serverSocket实体对象值的字符串表示形式(包括该对象的执

38、行地址、端口等信息) 8SetSocketFactary(socketInplFactory fac) 这是一个synchronized的类方法,用于设置系统的服务器socketImplFactory接口(该接口为socketImpl实体对象(即SOCKET的实现类)定义一个制造工厂),3.1JAVA socket类,socket类(客户端) 1Socket(string host,int prot) 2Socket(string host,int port,Boolean stream) 3Socket(InetAddress address,int port) 4Socket(InetAd

39、dress address,int port,Boolean stream) 5GetInetAddress() 返回该套接字所连接的地址 6Getport() 7GetLocalPort() 8GetInputStream() 返回该套接字的输入流 9GetOutputStream() 返回该套接字的输出流 10 Close() 11 ToString() 以字符串的形式返回该SOCKET地址和端口信息 12. SetSocketImplFactory(SocketImplFactory fac),3.1JAVA socket类,SocketInputStream类 1.read() 从套接

40、口读取一个字节的数据。如果发生IO错误,则会导致IOException例外。 2.read(byte b) 从套接口读取一个字节数组的数据。如果发生IO错误,则会导致IOException例外。 3. read(byte b,int off,int length) 从套接口中的偏移值为off出读取length长度的数据,存放在字节数组b中。如果发生IO错误,则会导致IOException例外。 4. skip(int numbytes) 跳过输入数据流的numbytes个字节。如果发生IO错误,则会导致IOException例外。 5. available() 返回无阻塞情况下可以读入的字节数

41、。 返回值:int 如果发生IO错误,则会导致IOException例外。 6. close() 关闭数据流。,3.1JAVA socket类,SocketOutputStream类 1. write (int b) 向套接口写一个字节的数据。如果发生IO错误,则会导致IOException例外。 2. write (byte b) 将给定缓冲区b的(字节数组)的内容写到套接口。如果发生IO错误,则会导致IOException例外。 3. write (byte b,int off,int length) 将给定字节数组b中的偏移值为off,长度为length的数据写入套接口中。如果发生IO错

42、误,则会导致IOException例外。 4. close() 关闭数据流。,32 socket通信的实现步骤,无论一个socket通信的功能多么齐全,程序多么复杂,其基本结构都是一样的,都包括以下五个基本的步骤。 以服务器端为例,服务器程序编写步骤如下 : (1 )打开SOCKET,创建serverSocket对象 ServerSockets s=newServerSocket(端口号) ; (2 )等待客户机的连接 Sockets= s.accept(); 通过ServerSocket 对象的accept()方法可以接收客户机程序的连接请求,其返回值是一个socket类型的对象。程序运行到

43、这里将处于等待状态。,32 socket通信的实现步骤,(3 )生成输入输出流 通过serverSocket对象的getOutputStream()和getInputStream() 方法可以分别获得输出、输入流。 PrintStreamOut=newPrintStream(s.getOutStream(); BufferedReaderin=newBufferedReader(newInputStreamReader(s.getInputStream(); (4)处理输入输出流 通过输入流可以读取客户机程序发来的信息;通过输出流可以向客户机程序发信息。这里所要考虑的是何时读取信息以及何时发送

44、信息。 (5) 关闭socket 在采用线程编程时,(1 )(2 )可以放在主程序的循环中,反复接收各个用户的连接请求。接收到客户机的连接请求后,(3 )(4)可以交给线程处理,客户/服务器套接字交互: TCP,服务器(在主机id上运行),客户,import java.io.*; import .*; class TCPServer public static void main(String argv) throws Exception String clientSentence; String capitalizedSentence; ServerSocket welcomeSocket

45、= new ServerSocket(6789); while(true) Socket connectionSocket = welcomeSocket.accept(); BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream();,示例: Java 服务器 (TCP),DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream();

46、 clientSentence = inFromClient.readLine(); capitalizedSentence = clientSentence.toUpperCase() + n; outToClient.writeBytes(capitalizedSentence); ,示例: Java 服务器 (TCP), 续,import java.io.*; import .*; class TCPClient public static void main(String argv) throws Exception String sentence; String modifiedSe

47、ntence; BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in); Socket clientSocket = new Socket(hostname, 6789); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream();,示例: Java 客户 (TCP),BufferedReader inFromServer = new BufferedReader(new InputS

48、treamReader(clientSocket.getInputStream(); sentence = inFromUser.readLine(); outToServer.writeBytes(sentence + n); modifiedSentence = inFromServer.readLine(); System.out.println(FROM SERVER: + modifiedSentence); clientSocket.close(); ,示例: Java 客户 (TCP), 续.,2.2.4 数据报通信,4.数据报通信,JAVA网络类库中有关数据报通信的方法在数据报

49、通信中,客户和服务端都只涉及了两个主要的类:DatagramSocket和DatagramPacket类。DatagramPacket类可以看为是信息的载体,必须为它建立数据缓冲区,从而容纳发送或接受的具体信息;DatagramSocket可以看成是DatagramPacket的发送或接收装置,发送一个Packet必须知道发送的主机地址和端口,接收则只需有一个Packet对象作为容器即可(参见图3)。,4.数据报通信,Datagrampacket类 该类对数据报分组进行了描述,其中包括分组的数据、分组的长度、网络地址及端口号等信息。 1 DatagramPacket(byte ibuf, in

50、t ilength) 为接收数据报而构造一个datagrampacket对象。 参数:ibuf:用于存放接收到的分组数据; ilength:要接收的字节数。 2DatagramPacket(byte ibuf, int ilength,InetAddress iaddr,int iport) 构造一个用于发送的datagramPacket对象。 参数:ibuf:用于存放分组数据; ilength:分组的字节数。 iaddr:目标IP地址 iport:目标端口号 3.getAddress() 返回该datagramPacket对象的网络地址。 返回值:类型为 InetAddress,4.数据报通

51、信,4. getPort() 返回该datagramPacket对象的端口号。 返回值:类型为 int 5. getdata() 返回该datagramPacket对象的分组数据。 返回值:类型为 byte,即字节数组。 6. getLength () 返回该datagramPacket对象的分组长度。 返回值:类型为 int,4.数据报通信,DatagramSocket类 1 DatagramSocket () 生成一个DatagramSocket对象,可能产生的例外是SocketException 2 DatagramSocket(int port) 构造一个DatagramSocket对

52、象,可能产生的例外是SocketException 参数:port 所要用到的当地端口号 3 Send(DatagramSocket p) 向目标地址处发送数据报分组,如果发生IO错误,则会导致IOException 参数:P 要发送的DatagramSocket对象,其内容包括字节缓冲区、长度、目标地址及端口号 参见DatagramSocket类,4.数据报通信,4 Receive(DatagramSocket p) 接收数据报分组,如果发生IO错误,则会导致IOException,仅当获得了某些输入信息时,阻塞才会解除。 参数:P 要接收的DatagramSocket对象,其内容包括字节缓

53、冲区、长度、发送者地址及端口号 参见DatagramSocket类 5 GetLocalPort() 返回该DatagramSocket对象的当地端口号。 返回值:类型为 int 6 Close() 这是一个synchronized方法,用于关闭该DatagramSocket对象,客户/服务器套接字交互: UDP,服务器 (在主机id上运行),import java.io.*; import .*; class UDPClient public static void main(String args) throws Exception BufferedReader inFromUser =

54、new BufferedReader(new InputStreamReader(System.in); DatagramSocket clientSocket = new DatagramSocket(); InetAddress IPAddress = InetAddress.getByName(hostname); byte sendData = new byte1024; byte receiveData = new byte1024; String sentence = inFromUser.readLine(); sendData = sentence.getBytes();,示例

55、: Java客户(UDP),DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876); clientSocket.send(sendPacket); DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); clientSocket.receive(receivePacket); String modifiedSentence = new String(recei

56、vePacket.getData(); System.out.println(FROM SERVER: + modifiedSentence); clientSocket.close(); ,示例: Java 客户 (UDP), 续.,import java.io.*; import .*; class UDPServer public static void main(String args) throws Exception DatagramSocket serverSocket = new DatagramSocket(9876); byte receiveData = new byte

57、1024; byte sendData = new byte1024; while(true) DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket);,示例: Java 服务器 (UDP),String sentence = new String(receivePacket.getData(); InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); String capitalizedSentence = sentence.toUpperCase(); sendData = capitalizedSentence.getBytes(); Data

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论