JAVA程序设计各章习题及其答案.DOC.pdf_第1页
JAVA程序设计各章习题及其答案.DOC.pdf_第2页
JAVA程序设计各章习题及其答案.DOC.pdf_第3页
JAVA程序设计各章习题及其答案.DOC.pdf_第4页
JAVA程序设计各章习题及其答案.DOC.pdf_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

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

文档简介

Java 程序设计 第一章 Java 程序是由什么组成的?一个程序中必须有 public 类吗?Java 源文件的命名规则是怎样 的? 答:一个 Java 源程序是由若干个类组成。一个 Java 程序不一定需要有 public 类:如果 源文件中有多个类时,则只能有一个类是 public 类;如果源文件中只有一个类,则不将该类 写成 public 也将默认它为主类。 源文件命名时要求源文件主名应与主类 (即用 public 修饰的 类) 的类名相同, 扩展名为.java。 如果没有定义 public 类, 则可以任何一个类名为主文件名, 当然这是不主张的,因为它将无法进行被继承使用。另外,对 Applet 小应用程序来说,其 主类必须为 public,否则虽然在一些编译编译平台下可以通过(在 BlueJ 下无法通过)但运 行时无法显示结果。 2、怎样区分应用程序和小应用程序?应用程序的主类和小应用程序的主类必须用 public 修 饰吗? 答:Java Application 是完整的程序,需要独立的解释器来解释运行;而 Java Applet 则是 嵌在 HTML 编写的 Web 页面中的非独立运行程序,由 Web 浏览器内部包含的 Java 解释器 来解释运行。 在源程序代码中两者的主要区别是:任何一个 Java Application 应用程序必须有且只有 一个 main 方法,它是整个程序的入口方法;任何一个 Applet 小应用程序要求程序中有且必 须有一个类是系统类 Applet 的子类,即该类头部分以 extendsApplet 结尾。 应用程序的主类当源文件中只有一个类时不必用 public 修饰, 但当有多于一个类时则主 类必须用 public 修饰。小应用程序的主类在任何时候都需要用 public 来修饰。 3、开发与运行 Java 程序需要经过哪些主要步骤和过程? 答:主要有三个步骤 (1) 、用文字编辑器 notepad(或在 Jcreator,Gel, BuleJ,Eclipse, Jbuilder 等)编写源文件; (2)、使用 Java 编译器(如 Javac.exe)将.java 源文件编译成字节码文件.class; (3)、运行 Java 程序:对应用程序应通过 Java 解释器(如 java.exe)来运行,而对小应用程 序应通过支持 Java 标准的浏览器(如 Microsoft Explorer)来解释运行。 4、安装 JDK 之后如何设置 JDK 系统的 PATH,CLASSPATH?他们的作用是什么? 答、更新系统 PATH 的方法随 Windows 版本不同而不同。对于 Windows 95/98,可以将 下列项目作为 C:autoexec.bat 文件的最后一行: SET PATH = C:j2sdk1.4.2bin;%PATH% 当程序需要第三方的类库支持, 而且比较常用, 就可以采用此种方法.比如常用的数据 库驱动程序, 写servlet 需要的servlet 包等等. 设置方法就是在环境变量中加入 CLASSPATH. 然后就可以直接编译运行了.Java 运行环境从 CLASSPATH 环境变量中寻找要 执行的用户项目(三方的类库) 。可以按如下的方式设置 SET CLASSPATH=.;C:J2SDK1.4.2jrelibjaws.jar;%CLASSPATH% 通常我们要从当前目录中寻找用户类,因为开发的程序相关的类放在这里,. 表示当前 工作目录. 5、Java 语言特点是什么? 答:Java 是一种简单的面象对象的分布式的解释的健壮的安全的结构中立的可移植的 性能很优异的多线程的动态的语言。 6、简述面向过程问题求解和面向对象问题求解的异同。试列举出面向对象和面向过程的编 程语言各两种。 解: 面向过程问题求解利用计算机能够理解的离散逻辑来描述和表达所求解的问题本身 以及具体问题解决的过程, 它的核心是算法和数据结构, 面向对象的问题求解则利用符合人 们日常思维习惯的方式去模拟所求解的问题,模拟它的构成、特征和各种动态行为,从而得 到问题的解答。它的核心是类、对象和设计模式。 常见的面向过程的编程语言有 BASIC,FORTRAN,Pascal, C 等。常见的面向对象的编 程语言有 Smalltalk-80,Object Pascal, C+, Java 等。 第一章 习题及思考题 1. 试分析基本数据类型和引用数据类型的基本特点? 答:Java的基本数据类型都有固定的数据位,不随运行平台的变化而变化。 引用类型都是用类或对象实现的 2.请使用异或运算符, 实现两个整数的交换。 答:int x=5,y=19; x=xy; y=yx; x=xy; 3.下列哪个是合法的标识符:( )。 A、a=bB、_HelloC、2ndD、Chong qing 答:B 4.下列哪些是合法的标识符() 。 A、newB、classC、intD、const2 答:D 5.如果定义有变量double d1, d2=4.0则下列说法正确的是: A、变量d1,d2均初始化为4.0 B、变量d1没有初始化,d2初始化为4.0 C、变量d1,d2均未初始化 D、变量d2没有初始化,d1初始化为4.0 答:B 6.判断题:所有的变量在使用前都必须进行初始化。 () 答:正确。 7.内部数据类型byte的取值范围是:() A、065, 535 B、(-128)127 C、(-32,768)32,767 D、(-256)255 答:B 8.下列哪些是不能通过编译的语句: () A、int i = 32; B、float f = 45.0; C、double d = 45.0; D、char a=c; 答:B 9.判断题:Java中数据类型的长度与具体使用的机器相关。 () 答:错误。 10. 如果定义有double x;float y;int m,则表达式x*y-m的类型为( ) : A、doubleB、floatC、intD、short 答:A 11. 如果定义有short s;byte b;char c,则表达式s*b+c的类型为( ) : A、charB、shortC、intD、byte 答:C 12. 已知int i= 2147483647; +i; 则i的值等于多少() A-2147483648B2147483647C 2147483648 答:A 13. 已知byte i= 127; +i; 则i的值等于多少() A-128B127C 128 答:A 14. 已知byte i= 127; i=i+1;这两行语句能否编译成功?() 答:编译不成功。 15. 执行以下程序段int a=5,b;b=+a*3后b的值为: ( ) A、17B、18C、16D、15 答: B 16. 如果x=3,y=5,则表达式x|y的值为: () A、15B、8C、1D、7 答:D 17. 如果int a=3,b=2,则执行a*=b+8后a的值为: () A、20B、14C、30D、16 答:C 18. 若所用变量都已正确定义,以下选项中,非法的表达式是: () A、a!=4|b=1B、a%3C、a=1/2D、A+32 答:C 19. 设有定义语句int a=1,1,2; 则以下对此语句的叙述错误的是()。 A、定义了一个名为a的一维数组B、a数组有3个元素 C、a数组的下标为13D、数组中的每个元素是整型 答:C 20. 以下数组初始化形式正确的是:() A、int t1=1,2,3,4,5,6B、int t2=1,2,3,4,5,6 C、int t332=1,2,3,4,5,6D、int t4;t4=1,2,3,4,5,6 答:A 第二章 习题及思考题 1、编写一个程序,用选择法对数组a=20,10,55,40,30,70,60,80,90,100进行从大到小 的排序 解: public class ArraySort public static void main(String args) int array=20,10,55,40,30,70,60,80,90,100; int i,j,k,t; int m=array.length; for(i=0;ijava Example5_5 “123.78” 23324.9“ “213214“ (回车) 这时,程序中的 args0,arg1,arg2分别得到字符串“123.78“,“23324.9“ 和“213214“. 在源程序中我们再将这些字符串转化为数值进行运算,得到所需的结果. 4、将一个字符串数组按字典序重新排列. class Example5_4 public static void main(String args) String a=“boy“,“apple“,“Applet“,“girl“,“Hat“; for(int i=0;i=3) c=f(n-1)+f(n-2); return c; 3、 利用 Vector 类,实现一个先进先出队列。 解: import java.util.*; import java.io.*; public classQueue public static void main(Stringargs) Vector theVector = newVector(); /创建一空向量实例 theVector byte bytebuffer = new byte10; try System.out.print(“please input the length of the Queue:“); /确定队长 size,即向量实例 theVector 的大小 System.in.read(bytebuffer); String c = new String(bytebuffer); int size = Integer.parseInt(c.trim() ); System.out.println(“please input the element of the Queue:“); /往向量中插入对象,即入队 for(int i = 0; i 0 nn“ + “x1=“ + x1 +“n“+ “x2=“ + x2); else /计算复根 float d; d = (float) (Math.sqrt( -check); x3 = -b / (2 * a); x4 =d / (2 * a); jTextArea1.setText(“b*b-4*a*c0 nn“+“x1=“ + x3+“+“ + x4 + “i“+“n“ + “x2=“ + x3 +“-“+ x4 + “i“); void jButton1_actionPerformed(ActionEvent e) if(Integer.parseInt(jTextField1.getText()=0) Abandon(); return; result(); class Fangcheng_jButton1_actionAdapter implements java.awt.event.ActionListener Fangcheng adaptee; Fangcheng_jButton1_actionAdapter(Fangcheng adaptee) this.adaptee = adaptee; public void actionPerformed(ActionEvent e) adaptee.jButton1_actionPerformed(e); 第十二章习题及思考题 1以在屏幕上显示“您好! ”为例,简述 Java 小应用程序 Applet 的开发的步骤。 源程序: import java.awt.*; import java.awt.event.*; import java.applet.*; public class hello extends Applet/继承 Appelet 类,这是 Applet 程序的特点。 public void paint(Graphics g ) g.drawString(“你好!“,60,60);/显示 运行结果: Java 小应用程序 Applet 程序开发主要步骤如下: (1)利用 EDIT 或 Windows Notepad 作为编辑器建立 Java Applet 源程序。Java 源程序文 件的扩展名为 java,例如 JavaWorld.java。 (2)把 Applet 的源程序转换为字节码文件。 (3)编制使用 JavaWorld.class 的 HTML 文件。在 HTML 文件内放入必要的 语句。利用 Jbuild 开发 Applet 是非常方便的,详情见第 12 章例,它可以自动生成 Applet 的 HTML 文件。 2、浏览器采取哪些办法,保证 Applet 安全运行。 答:远程浏览 Applet,服务器必须安装了个人 Web 服务器(windows98 为 PWS,widows NT 为S) 。由于 Applet 从远程服务器上下载而在本地机上运行的特殊性,安全问题显得十分 重要,为此,Applet 在运行时要受到更多的限制,诸如: 1) Applet 永远无法运行本地机上的可执行程序; 2) Applet 除了与所在的服务器联系以外,无法再同任何其他的服务器取得联系; 3) Applet 无法对本地机上的文件系统进行读写操作。 (目前 Netscape 是这样的,以后也许 会有其他的浏览器减少这方面的限制,因为 Sun 公司并没有把这一点作为 Java 规范的一部 分。 ) ; 4) Applet 无法获得除了本地机使用的 Java 版本号、操作系统名称及版本号、文件名分隔 符(/或)和路径以外有关本地机的其他信息。Applet 也无法获得使用者的名字 和 E-mail 地址等。 3、 实现一个 Applet, 使其可以用用三个按钮控制: (1)从服务器下载音乐播放 (2)不停地运行一个动画; 使上述动画和音乐协调播放。 package sound; import java.awt.*; import java.awt.event.*; import java.applet.*; import .*; import java.util.*; import java.io.*; public class SoundImage extends Applet implements Runnable Button button1 = new Button();/初始化 3 个按钮 Button button2 = new Button(); Button button3 = new Button(); RandomRandomNumber=new Random( );/初始化随机数 RandomNumber ThreadShapeThread=null; Color ImageColor;/初始化颜色对象 AudioClip audioclip1;/初始化声音对象 public void start( ) if (ShapeThread=null) ShapeThread=newThread(this); ShapeThread.start( ); public void run() while (true) switch (RandomNumber.nextInt(6) /把随机数转换为 04 之间的值 case 0: ImageColor = Color.black; break; case 1: ImageColor = Color.blue; break; case 2: ImageColor = Color.cyan; break; case 3: ImageColor = Color.magenta; break; case 4: ImageColor = Color.orange; break; case 5: ImageColor = Color.white; break; case 6: ImageColor = Color.green; break; default: ImageColor = Color.red; try ShapeThread.sleep(100); /线程睡眠 repaint(); catch (InterruptedException e) /忽略异常 repaint(); public void init() this.setSize(new Dimension(400, 300);/设置大小 this.setBackground(Color.yellow); /设定背景颜色 button1.setLabel(“打开音乐“);/设置按钮的名字 button2.setLabel(“播放音乐“);/设置按钮的名字 button3.setLabel(“停止播放“);/设置按钮的名字 this.add(button1); /将按钮 button1 加到 Applet 中 this.add(button2); /将按钮 button2 加到 Appelt 中 this.add(button3); /将按钮 button3 加到 Appelt 中 button1.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(ActionEvent e) audioclip1 = getAudioClip(getCodeBase(), “music2.au“);/当按钮 button1 触发时加载音乐文件 showStatus(“音乐文件已下载,请按“播放音乐”按钮!“);/提示 ); button2.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(ActionEvent e) audioclip1.loop();/循环播放音乐 showStatus(“声音播放中“);/提示 ); button3.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(ActionEvent e) audioclip1.stop();/停止播放音乐 showStatus(“停止播放“);/提示 ); public void paint(Graphics g) g.setColor(ImageColor); switch (RandomNumber.nextInt(3) /获取随机数与 2 整除的余数 case 0:g.fillRect(120,60, 150, 200); /添充一个矩形 break; case 1:g.fillOval(140,80, 100, 100); /添充一个矩形 break; case 2:g.fillRect(120,60, 150, 180); /添充一个矩形 break; default:g.fillOval(120,60, 160, 200); /添充一个椭圆 break; 第十三章 习题及思考题 1如何建立数据库的连接? 答: 通过 JDBC 访问数据库, 首先是与数据库建立连接, 用户得到一个 java.sql.Connection 类的对象。对这个数据库的所有操作都是基于这个对象。为了与数据库建立连接,JDBC 必 须加载驱动程序。驱动程序可以是 JDBC-ODBC 桥驱动程序,或由数据库厂商提供的驱动程 序, 或通过设置 Java 属性中的 sql.driver 来指定驱动程序。DriverManager 类的 getConnection方法用于建立与某个数据源的连接。 若与由URL指定的数据源建立连接成功, 则返回一个 Connection 类的对象。以后对于这个数据源的操作都是基于这个对象。 getConnection 方法是 DriverManager 类中的静态方法。所以使用时不构造 DriverManager 类的对象,直接使用类名 DriverManager 调用就可以了。 2、有哪写方法可以发送访问、操作数据库的 SQL 语句? 答 : JDBC 中 查 询 语 句 执 行 方 法 可 分 为 三 类 : Statement , PreparedStatement 和 CallableStatement 对象。 在 Statement 对象上, 可以使用 execQuery 方法来执行一查询语 句。 execQuery的参数是一个String对象, 即一个SELECT语句。 他的返回值是一个ResultSet 类的对象。 PreparedStatement 对象也使用 execQuery 方法来执行语句。 CallableStatement 类使用父类 PreparedStatement 类的 execQuery 方法或 execute 方法来执行存储过程的。 3如何处理对数据库访问操作的结果? 答:ResultSet 对象包括一个由查询语句返回的一个表,这个表中包含所有的查询结果。对 ResultSet 对象的处理必须逐行进行,而对每一行中的各个列,可以按任何顺序处理。 ResultSet 对象维持一个指向当前记录的指针。第一次使用 next 方法将指针指向结果集的 第一个记录,这时可以对第一个记录数据项进行处理。处理完毕后,使用 next 方法,使这 个指针指向下一记录,继续处理该记录的数据。next 方法返回的是一个 boolean 值,若为 true,则说明指针成功地移向下一记录,可以对该记录的数据进行处理,相反若为 false, 则说明没有下一记录,即结果集处理完毕。 4、如何获得关于数据库的信息? 答:在对数据库进行连接以后,得到一个 Connection 类的对象,可以从这个对象获得有关 数据源的各种信息,包括关于数据库中的各种表,表中的各个列,数据类型和存储过程等各 方面的信息.根据这些信息,JDBC 程序可以访问一个事先并不了解的数据库。获取这些信息 的方法都是在 DatabaseMetaData 类的对象上实现的。下面的语句可以在一个联接的基础上 创建一个对象:DatabaseMetaDatadbma=con.getMetaData();DatabaseMetaData类中提 供了许多方法用于获得数据源的各个方面的连系,通过这些可以非常方便地了解数据库结 构。 第十四章习题及思考题 1 组建模型提供哪些服务? 2简单回答 JavaBean 的 5 个特性? 3JavaBean 属性类型? 4编写一个表示银行账户的 JavaBean,名称叫 AccountBean,分别设计一个绑 定属性和限制属性;取款时,如果账户余额不足,不能取款;存款时,自动 通知用户现在新的存款余额。 解答: (略) 第十五章习题及思考题 1套接口作用是什么?端口有什么意义? 答:套接口(Socket) ,是传送层提供的网络进程通信接口。通讯的主动方是顾客,它 利用 Socket,向服务器(接收方)发送请求,服务器接收顾客请求,返回服务结果。进程 之间想通信首先要建立各自的套接口。 端口同一台网络计算机的一个特定进程关联, 与进程 建立的套接口绑定在一起。客户程序必须事先知道自己要求的那个服务进程的壹 IP 地址和 端口号。 程序员在创建自己的应用服务程序时一般自己指定一个端口号, 也可以由系统分配 一个端口号。客户通过这个端口号连接该服务进程。客户端应用进程象服务进程一样,也有 自己的端口号,通过该端口客户端应用进程与服务进程通信。 2.什么是 URL?一个 URL 由哪此部分组成? 答:URL(Uniform Resource Locator)是 WWW 资源统一资源定位器的简写。它规范了 WWW 资源网络定位地址的表示方法。 一个 URL 的组成部分有: WWW 资源的特征及读其内容的方法。 URL 的基本表示格式是: protocol:/hostname:/resourcename#anchor; 其中: protocol (使 用的协议) :它可以是 http、ftp、news、telnet 等;hostname(主机名) :指定域名服务器 (DNS)能访问到的 WWW 服务的计算机;port(端口号) :是可选的,表示所连的端口号,如 缺省,将连接到协议缺省的端口;Resourcename(资源名) :是主机上能访问到的目录或文 件;anchor(标记) :也是可选的,它指定文件中的有特定标记的位置。 3.编程读出中国矿业大学主页的 html 文件,判断主页的 html 文件有无关于“教学改 革”的内容。 上面的程序中用到了哪些有关 URL 操作的方法?各起什么作用?中国矿业大学 URL 为: . 答:源程序: import .*; import java.io.*; public class ReadURLConnection static public void main(String args) try /根据绝对 URL 地址构造 URL 对象 URL cumtURL=new URL(“ “);/蓝色标示的是 URL /利用 cumtURL 建立一个 URLConnection 对象 URLConnection cumtConnection=cumtURL.openConnection(); /获取 cumtConnection 对象的数据输入流 DataInputStream din=new DataInputStream(cumtConnection .getInputStream(); String inputLine; /从输入流 din 读入一行数据 while(inputLine=din.readLine()!=null) /将数据信息显示到系统标准输出上 System.out.println(inputLine); /关闭输入流 din.close(); catch(MalformedURLException me) catch(IOException ioe) 生成的结果文件比较长,有兴趣请下载查看,查看中国矿业大学主页的 html 文件后, 没有看到“教学改革”的内容,有的超链接现在用的是图片,所以有些目录的名不能直接看 到。 本程序中用到的方法有: (1)URL cumtURL=new URL(“http:/ “); 作用:根据绝对 URL 地址构造 URL 对象 (2)URLConnection cumtConnection=cumtURL.openConnection(); 作用:利用 cumtURL 建立一个 URLConnection 对象 (3)DataInputStreamdin=new DataInputStream(cumtConnection .getInputStream(); 作用:获取 cumtConnection 对象的数据输入流 4、顾客和服务者通过套接口通讯,描述基于有连接和无连接通讯时的流程图。 答:TCP(Transport Control Protocol)传输控制协议是面向连接的、可靠的点对点 的连接的协议。 TCP 是一种可靠的、基于连接的网络传输协议,当两个网络进程准备进行通信时,都必 须首先建立各自的一个套接口,其中服务器建立套接口后,侦听来自网络的客户连接请求, 客户通过套接口,指定服务器的 IP 地址和端口号,便可与服务器通信。 服务程序运行在服务器主机的某个端口上,一旦启动服务,它将在这个端口上倾听,等 待客户程序发来的请求。服务器的套接口用服务器套接口类(ServerSocket)来建立。方法 accept() 使服务者等待,直到有客户连接到该端口。一旦有客户送来正确请求,连接至该 端口, accept()方法就返回一个新的套接口对象 soc,表示已建立好连接。服务者使用它 们从客户接受输入信息和向客户程序发送信息所用, 同样, 在客户端也应该建立这两个对象, 用来与服务程序进行双向通信。 服务者向输出流发送的所有信息都成为客户的输入信息, 而 客户程序的输出都送入服务者的输入流。 UDP(User Datagram Protocol)用户数据报协议是无连接的传输不可靠的协议。 UDP 协议把要发送的数据及对方的 IP 地址、对方端口号构成报文,不与对方连接就把 报文一个个独立地地发送出去。UDP 协议本身不能保证数据报一定到达目的地,不能保证数 据报到达目的地顺序。但是,这种服务的可靠性可以有应用层来实现。 服务器利用 UDP 协议实现客户和服务器之间通信, 首先建立数据报套接口对象, 自己指 定一个端口号,也可以由系统自动确定端口号。利用无参的构造方法 DatagramSocket() 系统自动确定端口号,这时必须利用 getLocalPort()方法获取该数据报端口号。这个端口 号及服务器的 IP 地址对客户方发送报文来说是必须知道的。否则,客户方无法发送报文。 客户方利用 UDP 协议实现客户和服务器之间通信,首先也要建立数据报套接口对 象,一般使用无参的构造方法 DatagramSocket(),这时,系统自动确定一个端口号,然后 利用发送报文缓冲区、服务器的 IP 地址及服务器的端口号建立发送数据包 DatagramPacket 对象。利用建立的数据报套接口发送该 DatagramPacket 对象。 5、利用 Java 网络包 java.io 中套接口类 Socket 和服务者套接口类(ServerSocket) 分别实现有连接和无连接的通讯。 答:TCP 协议实现有连接的通讯 服务器端程序: import java.io.*; import .*; public class Tcpserver static public void main(String args) throws IOException ServerSocket svrsoc=null; Socket soc=null; DataInputStream in=null; PrintStream out=null; InetAddress clientIP=null; String str=null; try svrsoc=new ServerSocket(8000);/ 构造 rverSockets 对象,端口为 8000 soc=svrsoc.accept();/服务者等待一个连接,返回新套接口 soc in=new DataInputStream(soc.getInputStream();/在新套接口 soc 上构造 /DataInputStream 对象 in out=new PrintStream(soc.getOutputStream();/ 在 新 套 接 口 soc 上 构 造 / /PrintStream 对象 out clientIP=soc.getInetAddress();/得到顾客方 IP 地址 System.out.println(“客户端的 IP 地址为:“+clientIP); out.println(“欢迎你访问服务器!“); str=in.readLine(); /在 in 上读一行 while(!str.equals(“quit“)/如读出的不是“quit”,继续读 System.out.println(“客户端:“+str); str=in.readLine(); System.out.println(“客户端想要下线.“); catch(Exception e) System.out.println(“Error:“+e); 客户端程序: import .*; import java.io.*; public class tcpclient static public void main(String args)throws IOException Socket soc=null; BufferedReader in=null; PrintWriter out=null; String strin=null; String strout=null; try soc=new Socket(“localhost“,8000); System.out.println(“已成功连接到服务器“); in=new BufferedReader( new InputStreamReader( soc.getInputStream(); out=new PrintWriter( new BufferedWriter( new OutputStreamWriter( soc.getOutputStream(),true); strin=in.readLine(); System.out.println(“服务器:“+strin); byte bmsg = new byte100; System.in.read(bmsg); String msg=new String(bmsg,0); msg=msg.trim(); while(!msg.equals(“quit“) out.println(msg); System.in.read(bmsg); msg=new String(bmsg,0); msg=msg.trim(); out.println(msg); out.println(strout); catch (Exception e) System.out.println(“Error: “+e); finally in.close(); out.close(); soc.close(); System.exit(0); 运行结果: 服务器进程窗口中显示: 客户端的 IP 地址为:/ 客户端:Hello!We love Java! 客户端想要下线. 客户端进程窗口中: 已成功连接到服务器 服务器:欢迎你访问服务器! Hello!We love Java! Quit UDP 协议实现无连接通讯 服务器端程序: import .*; import java.io.*; public class UDPServer public static void main(String args) byte buf = new byte1024; /报文缓冲区 try /构造 DatagramSocket 类对象,端口号 6789 DatagramSocket serversocket = new DatagramSocket(6789); /建立数据报套 接口 System.out.println(“服务器在等待中“); while (true) /构造 DatagramPacket 类对象,用来从数据报套接字接收数据 报 DatagramPacket serverpacket = new DatagramPacket(buf, 1024);/等待接 收数据报 serversocket.receive(serverpacket);/字节数组转换成字符串 String data = new String(buf, 0, serverpacket.getLength(); if (data.equals(“) continue; if (data.equals(“quit“) break; System.out.println(“客户端:“ + data);/接收的字符串转换成大写 String strToSend = data.toUpperCase(); InetAddress clientIP = serverpacket.getAddress(); /获得客户地址 int clientPort = serverpacket.getPort(); /获得客户端口 byte msg = strToSend.getBytes(); / DatagramPacketclientpacket=newDatagramPacket(msg, strToSend.length(), clientIP, clientPort);/将数据打包发送给客户 serversocket.send(clientpacket); serversocket.close(); System.out.println(“服务器已关闭!“); catch (Exception e) e.printStackTrace(); 客户端程序: import .*; import java.io.*; public class UDPClient public static void main(String args) try String strToSend; byte bufsend;/发送报文缓冲区 byte bufrec;/接收报文缓冲区 DatagramPacket clientPacket; /构造 DatagramSocket 类对象 clientSocket DatagramSocketclientSocket=newDatagramSocket();/构造 DataInputStream 类对象/sysin ,与 System.in 绑定 DataInputStream sysin=new DataInputStream(System.in ); while(true) System.out.print(“等待输入:“);/从 sysin 输入一行 strToSend=sysin.readLine();/把字符串转换为字节数组 bufsend=strToSend.getBytes();/构造DatagramPacket类对象 clientpacket ,服务器端口号约定为 6789 DatagramPacketclientpacket=new DatagramPacket(bufsend,strToSend.length() ,InetAddress.getLocalHost(),6789); /输入一行后打包发送给服务器 clientSocket.send(clientpacket) ; /如输入字符串是

温馨提示

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

最新文档

评论

0/150

提交评论