- 在线时间
- 0 小时
- 最后登录
- 2007-11-12
- 注册时间
- 2004-12-24
- 听众数
- 2
- 收听数
- 0
- 能力
- 0 分
- 体力
- 2467 点
- 威望
- 0 点
- 阅读权限
- 50
- 积分
- 882
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 205
- 主题
- 206
- 精华
- 2
- 分享
- 0
- 好友
- 0
升级   70.5% 该用户从未签到
 |
---- Java 是 一 种 建 立 分 布 应 用 程 序 的技 术 。 它 是 网 络 编 程 的 最 优 秀 工 具 。 使 Internet 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。 - W8 J, w& O t+ r) \6 E7 c g7 ^
# A, l8 Z' @. F' ^; U. C---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。 : F8 x& W, C% x u; e) F
3 B" f, Z% M. }, Z0 i$ `---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而
9 }! F( C% B6 ^) b' P& ~3 tApplet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。
; z8 y" E5 h# J) P# ~) {) I8 @5 Y" L1 q& a
---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过 程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。 $ [; U |. k3 L/ z3 l$ o
6 Q7 _( \- m G9 r/ w---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方 法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。 - y" g' O. r. f4 P
$ r/ \9 k' l& Z" c( F/ B: |/ |4 R---- 例 程 如 下: ) ^: D! O: }+ a8 n3 K3 P
1 `1 k+ \( t$ p d' c- O
import java.applet.*; " V+ A/ e. Z8 L, D% d; g
import java.awt.*;
+ g: Z+ l0 y4 i* K2 R/ d import java.awt.event.*; 4 g! ]1 @: o4 J2 F; c8 M7 k" M
) F* d7 }( a, d- W( v% f! J
' G" m) V2 A6 e/ T* ^3 Y" j public class Example extends Applet implements
( }" v7 Z; Q8 O5 w! u ActionListener{ // public static void main(String[] args){ , N$ {) x: B. V
Frame win=new Frame("Example");
3 A' l* G* [) C6 r; o( f( _$ } Example example=new Example(); & V/ q1 B* m+ @7 L
win.add("enter", example);
3 Z/ ]$ m1 o2 `9 | example.init(); // win.setSize(600,360);
. o' q) S4 U( f4 f, N win.setVisible(true); 0 q: f$ r) K( d$ D, J1 O
} - X: C" E/ q2 c x/ O8 O
public void init(){ // Button button;
2 x# R& R8 I( q. e Label label;
3 ^# \3 o# W% `5 J+ X button=new Button(" OK "): 0 B/ g0 j4 I4 n7 c( L
button.setBounds(280,200,100,20); . t1 ~7 \# I$ O) B
button.addActionListener(this);
4 O& a! a% T' P4 O' M label=new Label(); , g4 X$ K. K% h+ v0 s6 x d
label.setBounds(260,100,200,20);
8 f+ _! f0 _# f8 M5 l6 i add(button); 4 P$ @: s$ ]7 a7 d# c! Z* q
add(label);
8 v8 o& d* f* i0 r- q: K } / w! i" S2 i s3 f$ a5 H1 ^
public void actionPerformed(ActionEvent e){ % g _: p+ y+ s4 G3 e" t0 n, }
Object source=e.getSource(); 5 P* O) F9 a" J- T
if(source==button){
4 J& J3 T4 T6 L, z label.setText(" It is a example !"); & ~3 H8 T0 n) ^! m
}
$ g" G. m% V, q. w: T } 3 {+ U2 C* V) ]
}
/ K# a# n! _6 {' s7 ?- p" T
5 |* W$ D5 W' ?3 f2 }---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。 + q% W; |1 q9 _7 y
) j2 Z* ?$ H: h E4 y9 o---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作 为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。
4 m7 d# P* j* w e5 Q
9 R6 H, l1 C1 K) F---- 2. Java 中 的 发 声 提 示 ; D* S! L- }0 ^2 }8 [
( O7 t( l; r, g; ]' z
---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。 1 H% E- u: N* Z: O7 ?: P+ @# \' O
3 w M* y! s8 v0 M$ r e---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下:
& I+ t ^: K/ B- d3 L9 X
: u) p- b6 v7 I$ T AudioClip audio;
% e/ O7 e. `6 L) r2 } audio=getAudioClip(getCodeBase(),"Hi.au"); . Z9 g2 t4 X8 w, [- P* K" |9 `
audio.play();
5 }. l+ p+ B$ I0 q9 B, z5 h; ^! G
) _2 k* @; c' S9 M l7 x---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取 得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能 在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能
# n1 _- X* |7 Z0 ]够 被 调 用 的 。
8 W: P% D5 d" v# J8 U3 [0 A0 m' P a/ E' \
---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ? ; l" W% z' G! ?' C
& j1 `, S- t% {) U/ A' b' p---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。
" W. j' l4 `1 Y. ^5 S8 o
1 y6 Z& F$ q6 s1 C7 |& t---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实 现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。 ) w$ K; n9 I9 t2 m7 j
$ Z4 o, T8 _7 B# Z
---- 程 序 如 下: 5 L. b. ?9 M4 a
9 l" d9 p m" |4 {! } c
服 务 器: 1 I3 q2 y- |, _5 Y3 w$ B
import java.util.*;
5 U! X8 y) c/ g" i" }import java.io.*;
o2 F% I9 s$ ?9 u/ _. _0 jimport java.net.*;
8 m& [( t- f; Q( Zimport java.awt.*; 3 {# r" W/ B, O/ E0 z6 N
1 j, A; L( t# i* [$ Apublic class ServerT{
* o$ E6 I) K8 I- N8 [ public static void main(String[] args){ : o H* E9 d. F% \) a: n
Server server; . k; x. I# b0 Q5 q* a/ F
String clientRequest; / J: u5 z+ ]; C5 r( B3 K/ s
boolean quit=false;
4 z. R. r4 h( p! B server=new Server(8001); : a" o" a9 {, R
while(!quit){ 1 p, d# q& i* n# x$ H- T* P
DataInputStream keyboard=new DataInputStream(System.in);
* v7 j, ^) b0 m) {5 g7 z try{
; z3 f! t* a! |+ U( J clientRequest=server.in.readLine();
% W! j9 s% ?0 ]' z$ B if(clientRequest.trim().equals("CLOSE")){
) E: l6 s% ` ^, W# u' F System.out.println("Client says: "+clientRequest);
+ c( J+ T% [. \6 L8 g6 U System.exit(1); ) l* t1 F" g$ ]' p7 k
}
5 a8 |- F% A" e. z& u System.out.println("Client says: "+clientRequest);
/ p6 S, m1 C: f, b( C+ N! `/ A server.out.println(keyboard.readLine()); + B2 I1 J# i# ]* p7 `
}catch(IOException e){ * n3 C( m: t0 @* |
System.out.println("IOException in server.in.readLine()"+e);
) D9 n) G4 f8 ]# f System.exit(1); : {& O( t/ j0 ~, @7 O: i- y/ f2 A
}
8 L- E. F9 O3 D' m4 @7 q* R, _$ m4 E) a } " @. [4 n1 S2 _
}
, T" m* y# d- I% j} " V" s3 q! Z6 N' k7 k) ]
class Server{
: B4 l. g/ I) [1 g( k! c3 w private ServerSocket server;
0 d/ D" U5 j7 {4 G/ ?: T private Socket socket;
" y( C" T* J$ e p public DataInputStream in; 9 ]/ e* C- L% k& t' {" \% q
public PrintStream out;
8 H% B0 z2 b9 c9 q public Server(int port){ 7 g4 T1 `" f& R; `: Q
try{
. \4 g$ a: x" N) V, ?; [ server=new ServerSocket(port); 4 l/ H* t: I. {
System.out.println("\n & ?" Y8 N m4 l
*************************************************");
1 j0 B& D4 \9 {1 P* o2 j System.out.println("\n @( Version 1.00 97/12/30 "); 0 M& {& T) n1 |+ u+ E( c
System.out.println(" Copyright (c) 1997 6 F7 B% Y7 J' d, q" j) R; Q% y
(Lui DongBing) All Rights Reserved."); a- Q% t" P3 Z9 r, I7 V' S4 o
System.out.println("\n % B* h* N) l% f! k# ~4 f3 l7 H
***************************************************"); / v' k$ e o5 }& X, j- K* |, [
System.out.println("\n Server is: \n "+server);
6 t* `+ b# J9 U4 Y# w, B$ i) `0 h socket=server.accept(); 7 m4 q$ I. R8 y6 u) }. M. A0 d9 k, m& r
for(int i=0;I < 260;i++){ // 发 声 提 示 & n2 |3 a" A" u) d; E3 E
Toolkit.getDefaultToolkit().beep();
' x8 }7 A, ~! t/ \ } 5 ?# n" V# T0 H. _" \
System.out.println("\n Server is ready ! \n"); % E' h" N' k. A0 N2 i* L
in=new DataInputStream(socket.getInputStream());
, `% I/ y3 S2 I. }( a- } out=new PrintStream(socket.getOutputStream()); * z9 e, u7 u; M ?. v8 [7 h
out.println("We connect in "+new Date()); - Z3 D" V$ h2 K7 G; S# ?
}catch(IOException e){
2 p, p- v# D0 i( T. U# }" b3 G) y System.out.println("Server is failied !");
2 k$ x( ]* T" J X' ]( y: O }
" @1 _9 R, P$ E0 [: i+ h }
4 W+ ?5 w9 B$ z" g$ C8 z2 t# N+ j}
- r8 Z8 N( o/ c3 [
1 Q$ K4 A' c4 z! C2 ? Q
+ V3 @0 T$ B- M2 }1 i 客 户 机 : ) b0 V% z$ p' g0 M
import java.util.*; % G. T7 u- z& G, E- v' z- H" @
import java.io.*;
) i/ u5 ?- _! k- R$ @& G$ Eimport java.net.*; * S8 `1 g- F0 ]
9 U4 Q2 e" f+ `0 lpublic class ClientT{
, i9 }9 d; i$ i# | T public static void main(String[] args){ & s. o. w4 i' x1 K
String welcome,response;
" b1 N9 d: r1 y Client client;
% ^, @+ \+ y$ k; @3 Q' O4 j client=new Client("202.120.80.20",8001); // DataInputStream keyboard=new DataInputStream(System.in); 6 @" p; |7 _0 l; ~% F/ o
boolean Bye=false;
8 K6 U4 g* Z: o4 N0 S while(!Bye){ : }2 }( c1 C* k5 L1 k
try{
. p5 @: q/ }# _' ^* H1 w9 m @ welcome=client.in.readLine();
0 F- G# v6 W) l V& `) G System.out.println(" Server says: "+welcome); 5 Q0 g. [( T: Q1 d8 B8 o& ^2 ~
client.out.println(keyboard.readLine()); ; e! J: v2 m9 n: w
}catch(IOException e){ 4 a/ ~5 A# C: O. \
System.out.println("\n The talk is CLOSED !");
( ~+ Y0 O2 u* {# c6 x1 x* ] System.exit(1); * o ?7 p3 G6 g/ F$ ?$ e
} 2 Y$ h# G- l6 F1 F [" K' i+ a9 r
} 9 i6 ]) O5 \2 ~0 `3 v# ] I
try{
9 p& S( H l/ i4 k# o/ ~3 z0 J Thread.sleep(200);
) |6 ~. T0 _9 ~/ ? }catch(Exception e){
: S2 V+ n2 U& i0 t System.out.println("It is a bug !"); . v/ D, | b8 O6 e$ m7 H
}
4 P0 i/ f# g- p0 `- O7 a' i }
7 w/ ~: f% I h. e" ~3 U} # Z$ l9 R) F8 z6 _# ^
class Client{ $ Y& e) O. V9 W4 b! y. P- t
public DataInputStream in;
- q8 J H! [& V: ? public PrintStream out; ; G1 r6 R- p" w
private Socket client; - g# D) R5 D* c( [
public Client(String host,int port){ : r" ^9 ]) y2 I
try{
6 @; f% C/ ]1 P7 X) V" u& z& z client=new Socket(host,port); ; V4 @! c$ X: K6 B- Q$ W1 s& k
System.out.println("\n 0 ~% f9 e; P" t
***************************************************"); # h# e1 P q" P5 v& k' q
System.out.println("\n @( Version 1.00 97/12/30 ");
: G6 S. q; H4 X* A* y: \ System.out.println(" Copyright (c) 1997 3 y4 b/ E' Y. N& r
(Lui DongBing) All Rights Reserved.");
0 e) X2 D6 g! B& t3 a4 ` System.out.println("\n & F6 y% a- T: B2 @4 a* |
**************************************************"); . l2 o0 n' h2 s7 |4 V5 k0 \4 L) g- \
System.out.println("\n Client socket:"+client);
) u R# H7 a8 r! t$ W System.out.println("\n Client is ready ! \n");
4 @, {$ } f# z" k9 L y out=new PrintStream(client.getOutputStream()); 6 Y2 \* ]) s7 O. s8 {
in=new DataInputStream(client.getInputStream());
. t$ i3 z0 l: L }catch(IOException e){
F% l: K2 b3 F% T8 Y% X; O0 y9 @% `) ~, R System.out.println("\n IOException !\n"+e);
* g% b+ W4 O2 D6 w* F System.exit(1);
$ C' ^( S2 Z. O) X2 Q$ J }
% W7 t, L4 _) v( G% M( v. R }
7 } m" T- [' l0 V0 A% M9 z V} |
zan
|