Java开发教程–qyjohn版 [5]

By , April 26, 2004 5:18 pm

发信人: qyjohn (Sweet Potato – 清扬婉兮,适我愿兮), 信区: JavaTutorial
标  题: Java开发教程–qyjohn版 [5]
发信站: BBS 水木清华站 (Mon Apr 26 16:05:55 2004), 站内

作业5:网络基础

上周的作业,至今没有交上来的,不知道是不是作业的第二部
分稍微难了一点。麻烦正在做这个作业的网友给个面子,赶紧
把作业交上来,不然的话这个学堂就维持不下去啦。

1   堕入情网

Java语言的一个显著优点就是它从语言的高度上提供了对网络
的支持,使得程序员能够很容易的构建基于网络的应用程序。
在J2SE中提供了多个网络相关的接口和类库,使得程序员能够
轻易的实现几乎是所有的常见网络应用。ServerSocket能够用
来构建基于TCP/IP的服务器程序,Socket能够用来构建基于
TCP/IP的客户端程序,而DatagramPacket以及DatagramSocket
能够用来构建基于UDP 的数据广播程序。在java.net中的其他
Java库还能够被用来实现域名解析、身份认证、安全许可等一
系列功能。不过,在各位能够充分发挥Java语言的如上优势之
前,有必要先介绍一些与TCP/IP相关的基本概念。

IP (Internet Protocol)是一种在多台互相连接的计算机中使
用的基于数据包的通讯协议。在初步学习阶段我们只需要了解
在网络中可以用IP来标志一台计算机,例如说202.112.58.200
就是水木,除非发生重大变革不会变成其他的网站。

TCP (Transmission Control Protocol,传输控制协议) 是一
种基于连接的通讯协议。当两台计算机之间需要进行可靠的数
据传输时,它们通过网络建立起一个稳定的连接,这种连接通
常也被称为数据链。与电话网络相类似,这种数据链是点对点
的,通讯的双方则通过这条数据链来回传输数据。在这条稳定
的数据链的基础上,TCP 协议通过信息校验能够保证接收方所
接收到的数据和发送方所发送的数据在内容和顺序上是完全一
致的,从而实现了数据的可靠传输。

UDP (User Datagram Protocol,用户数据包协议)与TCP 协议
之间的不同在于 UDP 不是一种基于稳定连接的通讯协议。UDP
协议将独立的数据包从一台计算机传输到另外一台计算机,但
是并不保证接受方能够接收到该数据包,也不保证接收方所接
收到的数据和发送方所发送的数据在内容和顺序上是完全一致
的。因此,UDP 协议更类似于普通邮政服务,寄信人不能够保
证所寄出去的信能够被收信人及时收到,后发出的信也许会比
先发出的信更早到达。

对于很多应用程序来说,在互相通讯的两台计算机之间保证一
个可靠与稳定的数据链是至关重要的。在这种情况下,就应该
首先考虑使用TCP 协议在凉台计算机之间建立起TCP/IP连接。
在HTTP (HyperText Transfer Protocol,超级文本传输协议)、
FTP (File Transfer Protocol, 文件传输协议)以及TELNET
应用程序中,均要求在通讯的双方之间建立起稳定可靠的数据
链,因此它们都使用了TCP 协议来进行数据传输。

在TCP 协议中,发送方和接收方必须交换额外的信息以保证接
收方已经接收到所发送的数据包并且所接收到的数据和发送方
所发送的数据在内容和顺序上是完全一致的。这些额外的信息
交换提高了数据传输的可靠度,但是也给网络带来了额外的负
担,导致数据交换的延迟,从而降低了整个网络的数据交换能
力。对于某些对实时性要求较高的应用程序来说,这样的延迟
有可能是不可接受的。例如一个毫秒级的时钟服务器按照一定
的频率向客户机提供当时的时间数据,如果这些时间数据在传
输过程中受到了较大的延迟,这些过时的时间数据是完全没有
意义的,即使客户机准确无误的接收到了这些数据。相反,如
果客户机所接收到的每一个数据包都是实时的,那么即使客户
机错过了一两个数据包也是可以接受的,因为他总是可以根据
后面所接收到的数据包来对自己进行校正。因此,对于对实时
性要求比较高但是对传输可靠度要求比较低的应用程序来说,
UDP 协议显然是一个合适的选择。

在通用的以太网(Ehternet)构架下,数据包是通过广播方式发
送给同一子网中的所有机器(网卡)的。也就是说,当机器A
给同一子网中的机器B 发送一个数据包的时候,在同一子网中
的机器C 同时也能够接收到这个数据包,只是在网卡的驱动里
面的某些设置使得这个数据包没有被交给上层的应用罢了。对
网络比较熟悉的网友一定知道,对某些网卡进行某些简单设置
之后就可以监听同一子网里面的所有数据包。在这个教程里面
我并不打算深入地讨论网络监听的技术,不过了解一下以太网
中数据传输的方式会有助于各位在应用程序中更好的利用有限
的网络资源。例如说,如果同样一份数据需要被传送给多个接
收者,在使用TCP/IP连接的情况下,数据发送者需要向网络发
送N 个同样的拷贝,在使用UDP 数据广播的情况下,数据发送
者只需要向网络发送一个拷贝。在这种情况下,使用TCP/IP连
接会大大的增加网络的负担。在一个普通的局域网络中,可以
认为由于网络状况较差而造成数据丢失的可能性比较小,而利
用UDP 数据广播进行数据交换能够大幅度减轻网络的负担。

通常来说,一台计算机只有一个物理界面与网络相连接(也就
是一个网卡),所有的应用程序均通过该物理界面从网络接收
数据或者将数据发送到网络。由于一个网络上同时存在多台计
算机,并且一台计算机上有可能同时存在多个应用程序需要与
网络进行数据交换,我们通常使用IP和端口号来识别需要进行
数据交换的计算机和应用程序。每台计算机由一个32位的IP地
址来识别,在一个网络中,每台计算机的IP地址都是唯一的,
因此应用程序能够根据IP地址来将数据发送到正确的计算机。
每个需要与网络进行数据交换的应用程序均被系统分配一个16
位的端口号,系统根据这个端口号将从网络接收到的数据转发
给相对应的应用程序。端口号的范围是从0 到65535 ,其中从
0 到1023被系统所保留,主要是用来提供HTTP, FTP以及TELNET
等系统服务,因此用户自己的应用程序不应该试图去使用小于
1023的端口。

需要说明的是,以上介绍仅仅适用于IPv4网络。未来的IPv6网
络和IPv4有较大的不同,需要进一步了解该部分内容的网友请
自行阅读有关资料。

2   阅读与作业

阅读Java Tutorial 里面的如下章节,手工输入并编译运行里
面的所有例程,在读书报告里面详细记录你在学习过程中遇到
的问题、解决方法,以及其他感想。

1) Custom Networking

作业:

写一个服务器程序,其功能是维护一个名言列表。该服务器运
行在8008端口,当有一个客户连接到服务器上的时候,服务器
从名言列表中随机选取一句名言发送给客户,然后切断与客户
机的连接。这个服务器程序必须能够同时为多个客户服务。

名言列表被保存在一个文本文件里面,服务器程序启动的时候
从这个文件里面读入所有的名言并且保存在一个LinkedList里
面。所有的客户访问这个LinkedList获得一个名言而不需要重
新读取文件。

各位在做这个作业的时候请尽量重复利用前面作业3 里面写好
的代码。


(“`-”-/”).___..–””`-._                         云与清风常拥有,
`6_ 6  )   `-.  (     ).`-.__.`)                 冰雪知音世难求。
(_Y_.)’  ._   )  `._ `. “-..-                  击节纵歌相对笑,
_..`–’_..-_/  /–’_.’ ,’                        案上诗书杯中酒。
(il),-”  (li),’  ((!.-’                              2000.12.31
______________________________________________________________________

※ 来源:·BBS 水木清华站 smth.org·[FROM: 219.238.203.*]

Java开发教程–qyjohn版 [4]

By , April 14, 2004 5:17 pm

发信人: qyjohn (Sweet Potato – 清扬婉兮,适我愿兮), 信区: JavaTutorial
标  题: Java开发教程–qyjohn版 [4]
发信站: BBS 水木清华站 (Wed Apr 14 16:11:44 2004), 转信

作业4:图形用户界面基础

1.  一些题外话

到目前为止我们已经全面了讲述了一个优秀的程序员所需要具
备的三个要素:开发环境,生存技巧,语言基础。不过从交上
来的作业看,大多数网友都没有能够领会我试图通过这一系列
教程传递出来的一些观点,而是直奔主题完成作业中与Java语
言相关的部分。然而还是有部分网友交上了关于Google,天网
以及提问的智慧的作业,使我于失落当中能够感受到些许的慰
籍。

星期一我在内部版面做了一个关于本站Java技术系列板块访问
统计,出人意料的发现新生的JavaTutorial版已经以5057人次
的访问量在所有Java技术系列板块里名列第二。然而在版面上
交作业的网友还是不多,想来一定还有很多人在暗地里自己努
力着。我深切的希望在以后的日子里能够在版面上看见更多的
新面孔,因为这里是专门为新手开辟的空间,活跃在版面上的
都是正在学习Java的朋友,我相信你们能够通过这个版面来互
相帮助和提高。

2.  图形用户界面

某日重读郑振铎先生所著<<插图本中国文学史>>,在<<魏与西
晋的诗人>>这一章读到如下几句,思考良久。” 论者平潘岳,
潘尼,每以岳为高出于尼远甚。实则岳唯哀悼之诗最为杰出耳。
岳字安仁,荥阳中牟人。美姿仪。少时每出,妇人掷果满车。
善属文,清绮绝世。举秀才为郎。后迁给事黄门侍郎。” 在这
里我们看到潘岳虽然在文学成就上比不上潘尼,但是由于潘岳
长的比较帅,所以后人在评价这两个人的时候通常都会偏袒于
他。事实上在我们程序设计这个行当也是一样,在用户的眼光
里,一个吸引人的图形用户界面远远要比一些强大的功能要受
欢迎得多。

说起Java语言的的跨平台优势,一般的开发人员都会想到在两
个方面:一个是网络,另一个就是图形界面。针对一个特定的
平台写一个网络程序或者图形界面并不是一件难事,难得是要
让这程序在不同的平台上都能够运行 – 请注意,这里我说的
是运行,至于运行的效果如何,那就是另外一回事了。很多人
对Java语言的图形界面颇有非议,说这个东西又慢又难看。我
想虽然这个东西又慢又难看,然而它毕竟跑了起来,至少也该
比那些跑不起来的东西要强那么一点点吧。

在Java语言标准版中有两套图形界面系统,一个是AWT ,另外
一个是SWING 。在我以前的文章中,有一些关于AWT和SWING的
简单介绍,抄录如下:

AWT 是Abstract Window ToolKit (抽象窗口工具包)的缩写,
这个工具包提供了一套与本地图形界面进行交互的接口。AWT
中的图形函数与操作系统所提供的图形函数之间有着一一对应
的关系,我们把它称为peers。 也就是说,当我们利用AWT 来
构件图形用户界面的时候,我们实际上是在利用操作系统所提
供的图形库。由于不同操作系统的图形库所提供的功能是不一
样的,在一个平台上存在的功能在另外一个平台上则可能不存
在。为了实现Java语言所宣称的”一次编译,到处运行”的概念,
AWT不得不通过牺牲功能来实现其平台无关性,也就是说,AWT
所提供的图形功能是各种通用型操作系统所提供的图形功能的
交集。由于AWT 是依靠本地方法来实现其功能的,我们通常把
AWT控件称为重量级控件。

Swing是在AWT的基础上构建的一套新的图形界面系统,它提供
了AWT 所能够提供的所有功能,并且用纯粹的Java代码对AWT
的功能进行了大幅度的扩充。例如说并不是所有的操作系统都
提供了对树形控件的支持, Swing利用了AWT中所提供的基本作
图方法对树形控件进行模拟。由于 Swing控件是用100%的Java
代码来实现的,因此在一个平台上设计的树形控件可以在其他
平台上使用。由于在Swing 中没有使用本地方法来实现图形功
能,我们通常把Swing控件称为轻量级控件。

说到这里我想各位读者应该明白了AWT和Swing之间的基本区别:
AWT 是基于本地方法的C/C++程序,其运行速度比较快;Swing
是基于AWT 的Java程序,其运行速度比较慢。在一般的基于PC
或者是工作站的标准Java应用中,硬件资源对应用程序所造成
的限制往往不是项目中的关键因素,所以在标准版的Java中提
倡使用Swing, 也就是通过牺牲速度来实现应用程序的功能。
因此在Sun公司提供的Java Tutorial里面,已经删除了关于AWT
的章节,需要的网友要从Sun 的网站将其单独下载到本地硬盘
才可以阅读这部分的内容。

熟悉嵌入式系统的网友知道,目前在嵌入式系统上的Java虚拟
机通常都提供了对AWT的支持,但是不提供对SWING的支持。这
是因为对于一个嵌入式应用来说,目标平台的硬件资源往往非
常有限,而应用程序的运行速度又是项目中至关重要的因素。
在这种矛盾的情况下,简单而高效的AWT 当然成了嵌入式Java
的第一选择。

除了AWT和SWING之外,还有被称为SWT 的一套图形界面系统。
由于SWT 不是Java语言的一部分,在这个教程中我们不会涉及
到。在J2ME中也有独立于AWT和SWING的图形界面系统,这些内
容我们会在本教程的J2ME部分详细讲述。

3   阅读与作业

阅读Java Tutorial 里面的如下章节,手工输入兵变已运行里
面的所有例程,在读书报告里面详细记录你在学习过程中遇到
的问题、解决方法,以及其他感想。

1) User Interfaces that Swing: A Quick Start Guide

2) Creating a GUI with JFC/Swing

3) Creating a User Interface (AWT Only)

第三部分的内容,需要单独从Sun的网站下载,地址为:

http://java.sun.com/docs/books/tutorial/information/download.html

作业:

1)  用AWT和SWING分别构建一个带有一个窗口,十个按钮,十
五个其他控间的应用程序,比较其启动时间和反应速度。
在作业中详细描述你的机器配置,操作系统,Java虚拟机
的版本,以及你对这两个应用程序的个人感觉。

2)  在AWT和SWING两种方案里面选用一种方案完成下面的应用
程序,详细说明你选用AWT或者SWING的理由。

在本地机器上有一个文本文件passwd,每一行包含一个用
户名和密码,用户名和密码之间用空格分开。应用程序启
动的时候跳出一个对话框要求用户输入用户名和密码,接
受输入后到passwd文件里面验证用户名和密码是否正确。
如果用户名和密码正确,进入下一步的内容;如果用户名
和密码不正确,给出恰当的提示。

通过用户身份认证后,进入主用户界面。主用户界面包括
四个小按钮以及一个大的显示区域,其中一个按钮用来退
出程序,另外三个按钮的功能自行定义。在显示区域里面
显示一个圆形,开始的时候在屏幕的中间。当用户按下上
下左右箭头的时候,该圆形向相应的方向移动。每次按键
导致的移动量自行决定。

以上两个作业,在提交的时候都要附上运行时刻的截图。
如果你不会在本BBS 贴图,最好在交作业的时候使用本站
的WWW 界面,那里贴图比较方便一些。

由于这次阅读的内容比较多,第5 次教程我会等到下下周再贴
出,这样各位有一个半星期的时间来完成这次阅读和作业。


(“`-”-/”).___..–””`-._                         云与清风常拥有,
`6_ 6  )   `-.  (     ).`-.__.`)                 冰雪知音世难求。
(_Y_.)’  ._   )  `._ `. “-..-                  击节纵歌相对笑,
_..`–’_..-_/  /–’_.’ ,’                        案上诗书杯中酒。
(il),-”  (li),’  ((!.-’                              2000.12.31
______________________________________________________________________

※ 来源:·BBS 水木清华站 smth.org·[FROM: 219.238.203.*]

Java开发教程–qyjohn版 [3]

By , April 5, 2004 5:16 pm

发信人: qyjohn (Sweet Potato – 清扬婉兮,适我愿兮), 信区: JavaTutorial
标  题: Java开发教程–qyjohn版 [3]
发信站: BBS 水木清华站 (Mon Apr  5 18:10:05 2004), 转信

作业3:在网络社区中生存

1.  网络礼仪

上回我们说到一个程序员的基本素质不是写代码,而是不写代
码。早在三国时期,著名网友诸葛亮草船借箭的故事想必各位
都不陌生。如果你刚好没有经历过三国时代,只需要晚上到女
生楼前面数一数提着暖水瓶的男生的数目也会有深刻的体会。
可惜的是我们现在面对的是网络,是美女帅哥等等词语早已失
去往日暧昧含义的网络。如果打算凭着“小女子弱弱的问”这
样的标题来吸引眼球的话,结果估计只能够是被骗财骗色了。

经常有网友这么问:qyjohn其实长得并不是很帅,为什么会有
这么多女孩子喜欢他?我问的问题跟他的一模一样,为什么别
人回他的帖子不回我的帖子?说句不怕伤你自尊的话,不是因
为你长得不够帅或者不够漂亮,而是你看起来不够惹人喜欢。

在网络上变得更加惹人喜欢其实很容易,那就是稍稍改变一下
你的形象。我相信改变一个人的性格是一件不容易的事情,但
是改变形象就不一样了。对于程序员来说,我个人的建议是阅
读一下那片叫做《提问的智慧》的文章,如果你在提问的时候
合理的利用一下里面提到的几个技巧,将会大大的缩短你得到
答案或者帮助的时间。对于更加有追求的网友,我建议你阅读
一下本站SYSOP 办精华区里面的《网络礼仪》系列文章。这些
文章是我在好几年专门为水木翻译的,不过想来应该还没有过
时。

提问的智慧 – JavaExpress 版精华区,新手必读,在水木
Java板提问的技巧
网络礼仪   – SYSOP 版精华区,帮助与答疑

作业:阅读以上两篇推荐的文章,结合自己的情况写一点心得
体会。

2.  水木宝典

掌握如下绝技,可以使你在水木技术板块里的生存更加容易。

(1) 新进入一个技术版面的时候,最好事先看一下进版画面上
的备忘录,制定的文章,还有精华区第一层目录。

(2) 在版面文章列表处按h 可以获得使用帮助。

(3) 在版面文章列表处按a或者A可以顺序或者逆序查找某个作
者发表的文章。

(4) 在版面文章列表处按?或者/可以顺序或者逆序查找包含有
某个关键词的文章。

(5) 在版面文章列表处按ctrl+g然后选7 可以进入超级文章选
择功能,具体的使用方法清参考Announce版编号为4812的
文章。

(6) 在水木主菜单的系统信息及服务子菜单下有一个叫做令狐
冲搜索的东西,可以在全站范围之内进行精华去搜索。

作业:分别练习以上功能,结合自己的情况写一点心得体会,
谈谈这些功能对于程序员或者工程人员会有什么帮助。

3.  Java Tutorial 4

阅读Java Tutorial的Essential Java Classes。手工录入
并编译运行该章节中的所有源代码。这一章内容涉及到了很多
Java语言的特性,估计会比较难以理解。在作业中详细列出你
所碰到的问题,我和其他版主会尽力为你解答。

作业:假设你有一个文本文件,里面每一行是一句名言。编写
一个Java应用程序,每次运行的时候随即的从文件里面取出一
句名言然后打印在屏幕上。

作业:假设你有两个文本文件,里面每一行是一句名言。编写
一个Java应用程序,每次运行的时候启动两个线程分别从每个
文件里面取出一句名言然后打印在屏幕上。渡区和打印的工作
必须在线程里面完成,不管每个文件的大小有多大和访问文件
的时间花费如何,必须使得来自第一个文件的内容被首先打印
在屏幕上。


(“`-”-/”).___..–””`-._                         云与清风常拥有,
`6_ 6  )   `-.  (     ).`-.__.`)                 冰雪知音世难求。
(_Y_.)’  ._   )  `._ `. “-..-                  击节纵歌相对笑,
_..`–’_..-_/  /–’_.’ ,’                        案上诗书杯中酒。
(il),-”  (li),’  ((!.-’                              2000.12.31
______________________________________________________________________ 

Panorama Theme by Themocracy