- 在线时间
- 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 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。
5 \! V: a6 i( M2 A" ~) _7 c$ ^7 @4 M4 d
9 M8 {9 d, u$ }8 X2 W) O---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。
. u6 }, P0 R0 E( A
J5 M2 U3 i" h, k( v7 S% e; Q5 G---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而 8 Y. ?3 T* R; D1 N) C
Applet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。 W9 o/ j+ B6 Z1 T" @
0 P" d0 T" A, y! r
---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过 程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。 4 C, P1 N0 m* q u0 V6 l
4 [ B3 d9 L' C8 z2 t& Z0 f---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方 法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。
4 c% k; J" A& |& W: C/ Q& F( M# p* @: s* T" h8 \' S
---- 例 程 如 下:
. I4 }0 J i) A5 U/ R _4 E! ?4 m8 w9 f' f+ d8 `
import java.applet.*;
- G6 g( U, y! ^9 ]( T8 H# e& N import java.awt.*;
# k3 _7 q3 z0 i" |( b import java.awt.event.*; . c, W7 N! w% Q% b
# Q" h' |6 e# D4 X. T/ g
, c8 t: ]. b% Z- E3 n1 ^8 k public class Example extends Applet implements
! A/ ?% G, t7 A8 k U ActionListener{ // public static void main(String[] args){
3 R6 l0 F, ^9 Q7 Z' K$ a) a9 f Frame win=new Frame("Example");
( V6 {5 @0 q# i8 r6 I Example example=new Example();
~) c: [$ s. n* r win.add("enter", example);
?2 ^. B( F1 l4 @, L example.init(); // win.setSize(600,360);
: f3 K L; w% s, t8 @- e# P4 @3 ~9 Z win.setVisible(true);
8 d t! c* O" [" v" Q* \ }
! R" v" j, k$ F6 \! J' f; r4 E public void init(){ // Button button;
8 h7 C( x9 R5 E; h- U Label label;
$ u' A# x# W, x4 I: z: K, N# Q0 i button=new Button(" OK "):
; b. ^* u/ K$ R5 K9 f7 r% i button.setBounds(280,200,100,20);
6 d& a4 d5 |$ y button.addActionListener(this); : p5 [& v- M8 i
label=new Label(); ; R) i) v& [3 w. T1 T
label.setBounds(260,100,200,20);
# L9 g* u* x( e! K3 [: @* x add(button); / U+ h( l; Y7 G, t/ ]4 r- p! a
add(label); - Z+ H0 j J1 z8 P5 n- a
} ! v3 j% N; g1 x3 ~- s
public void actionPerformed(ActionEvent e){ * w: L5 w: S& g" T3 ~- m
Object source=e.getSource(); 3 ^: x, e9 i& D/ l( g
if(source==button){ ; M' n1 N4 h9 F2 L; }" G; c
label.setText(" It is a example !"); 4 V5 v: K2 ~1 V
}
' ?) F1 U, ^0 h, M! [0 h }
0 \, j8 V+ f& ~' L, M7 p4 t }
/ ~: C3 f% U; M' a0 a' Q& N7 Y, X5 v1 r+ X, q9 ~
---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。
$ a z9 x+ ]! p" r1 w" M3 v( f; r4 d. B) J& _$ X2 L; e& w
---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作 为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。
, `0 y' X7 M2 H6 a: k8 d; R: N" c) H: j3 [( K0 T$ m5 j
---- 2. Java 中 的 发 声 提 示
2 L* z6 t! J/ ]4 i7 M; M7 [: Q
, ~: g& J; Q0 g0 w4 j---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。
5 W' ?5 r; D6 N: ?7 d
9 [) Z- Q3 M& m3 F" E1 @+ T! G---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下: 8 l7 w# q( _& q' D3 q
9 T+ t& y- w$ f4 l' m. ]
AudioClip audio; 6 J3 t; V4 j6 W8 v: R& N1 Y
audio=getAudioClip(getCodeBase(),"Hi.au");
' u. R1 C- y9 d1 a audio.play(); $ x0 A5 D) ?6 n/ j p
( K: o V0 Z& ^5 A! i) D
---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取 得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能 在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能 ) F0 K m5 t5 |- k! x! n* W
够 被 调 用 的 。 9 ]8 _8 L1 H0 o7 j. Y
3 a3 a5 U7 s' B% v. ^0 S: n: q3 W
---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ? * C+ X3 T0 Z5 n. V
5 U. [# b+ N/ q3 k( v
---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。
! d" |" q( c5 n0 I/ ~' _/ [/ ?; x/ O- t7 J) |' K- n% O
---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实 现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。
7 F" O7 U5 u; u5 v# P2 e- M o) G) \% B) E& O
---- 程 序 如 下: ! W' z+ e; |! w" w2 n" c. ` |
- S9 O1 o k: Q. p- }( m9 K) s 服 务 器:
& Z; a- A1 I! Wimport java.util.*;
( F" C* W& b( u( T! F, N/ i+ \ Eimport java.io.*; - E4 t) R: h1 s( Z' W" }
import java.net.*;
: n: a0 c3 B: `import java.awt.*; ! j5 S! y* M2 {$ i, ?, j5 |0 w
. h4 H/ ]3 g$ jpublic class ServerT{ ' g5 ?% A1 f) B* ~
public static void main(String[] args){ 8 t% D/ K! `$ |
Server server;
( k& ?5 H" z" i: W1 p3 K String clientRequest; 5 | m, y# K, M& U
boolean quit=false;
$ ~3 t4 ?+ ~, { server=new Server(8001); - h' U5 a. h7 t/ ~8 F0 A( r
while(!quit){ ' @8 {2 w1 M+ h7 e1 } n/ _0 h
DataInputStream keyboard=new DataInputStream(System.in); 0 v2 ?: k! h/ K9 P4 [
try{
* T6 {0 [4 L8 ` clientRequest=server.in.readLine(); 0 S- p$ _. r& s/ b) p
if(clientRequest.trim().equals("CLOSE")){
! v: L6 a N7 z S/ P System.out.println("Client says: "+clientRequest); & w& H: A/ F& Y; q3 q2 c0 o: ?& ]) O
System.exit(1); ; O7 R8 i. O q7 @% }* t( M' f
}
1 T: d+ c! X# ~, D1 p# G System.out.println("Client says: "+clientRequest);
2 E0 ]* Q$ _7 N server.out.println(keyboard.readLine()); 6 h) o# r7 m$ W) {6 K. p2 D
}catch(IOException e){
! r4 }8 Y: C+ u' {" J6 B System.out.println("IOException in server.in.readLine()"+e); 1 o$ e9 p; q' I# f7 i& s
System.exit(1);
4 }* P4 K0 N( k# @ G. W }
+ e' b) k, Z& X5 [% Q: E } 7 {% H( O7 A' X
}
; R. r7 M1 N6 U0 a. l! Z0 k; b) F}
! t' \& q8 s* F( z3 Qclass Server{ 4 F1 P8 c! u1 W! k+ S5 F2 l, w+ G
private ServerSocket server;
# {: R9 R E( V! H0 c# f private Socket socket;
5 A+ ~% K8 [: L4 j! ` public DataInputStream in; 6 ]( T$ A# W* X' _" h
public PrintStream out; 2 j v9 l' Q9 n7 b# H3 ^
public Server(int port){
, K+ @& d( R' P4 X% T, S1 N try{ 4 n6 S- e: u$ c1 Q* Q/ |
server=new ServerSocket(port);
+ I4 ]0 E, m' y* w( l0 q, s8 s System.out.println("\n
) V+ D( V* ]% ~, }*************************************************");
% U; M; ]6 C1 d5 H, J: d System.out.println("\n @( Version 1.00 97/12/30 ");
3 c6 w4 }1 g$ e, O# M System.out.println(" Copyright (c) 1997
+ r- N) k9 b7 d" N2 R& ]( R0 [ (Lui DongBing) All Rights Reserved.");
" | N3 E& F( G; d7 H8 r System.out.println("\n
1 E- g% p! F% c***************************************************");
- x6 d, h: O2 I System.out.println("\n Server is: \n "+server); $ W" W3 t6 A0 q1 s7 R
socket=server.accept();
5 }) K. ]* ]: V8 ~3 _% W( b, T2 | for(int i=0;I < 260;i++){ // 发 声 提 示 + d$ G+ c0 \/ f4 d6 y5 ~
Toolkit.getDefaultToolkit().beep();
) a. r; E7 n9 `8 R }
$ c* [8 H/ @; k. `; k System.out.println("\n Server is ready ! \n");
* g, \% _" r. f3 G( H in=new DataInputStream(socket.getInputStream());
% b0 N) H) f5 d$ N! g out=new PrintStream(socket.getOutputStream());
8 J/ p* ~2 Q% n* ]) e8 q1 ] out.println("We connect in "+new Date()); 9 L1 P! @4 }( x* p% i
}catch(IOException e){
: J$ \) n9 g$ Q; _& ]% A! a! W+ ?" J System.out.println("Server is failied !"); 9 ? J+ [5 @3 [# L- z
}
@- V8 G3 d4 \0 i O% V }
" n( l+ o- K9 ~} 1 ]* X% V' D! m, N$ q! c
: G: p. \+ n# G3 e& K6 @% G6 ^
) p5 ?6 @/ B9 k) m# D8 p
客 户 机 : % O% \" r* P% E/ n- o) M9 S
import java.util.*; . k, @6 E( I& ~
import java.io.*;
& C a. U. ^1 Uimport java.net.*;
- |2 v2 J6 j6 ?& P- b. M$ U8 {# t+ H; x2 O6 t7 B6 n' @
public class ClientT{
) S! `% X# ~0 G7 f7 W# Y: @ public static void main(String[] args){ . A% n% u; l" B
String welcome,response; + P& Z3 y: A" Z! B
Client client;
- e- s3 A' c7 Y( T+ w) D- G1 | client=new Client("202.120.80.20",8001); // DataInputStream keyboard=new DataInputStream(System.in);
& r& [: K. S+ Z" k boolean Bye=false; # q/ U' [1 ]0 D; C8 ]
while(!Bye){
$ Q0 t: |5 B# I9 }$ L1 C try{ 9 G/ d" I/ f1 C
welcome=client.in.readLine();
4 T; x5 u3 V* ~( V System.out.println(" Server says: "+welcome);
3 _1 P+ m1 Q$ \1 N0 z client.out.println(keyboard.readLine()); ' j- V+ O* V8 S, w o
}catch(IOException e){
& S( |- E9 V- X( u( L System.out.println("\n The talk is CLOSED !"); 5 G. D: M' H4 \- Z/ [
System.exit(1); + T: K( w' r4 H- o
}
9 o" l& g& L$ a+ t% R }
, Z( x% I1 ]/ f A: g0 y E& t9 v try{ 1 e( A* i' ~6 Y! h
Thread.sleep(200); 4 E, H5 m/ G0 R' a
}catch(Exception e){
8 p/ L) Z( d5 O. T# `. c3 N, N' S System.out.println("It is a bug !"); ; P' T2 ?7 c8 H
} 6 |* X1 n2 S( _! B/ B0 ^
} , i7 ]& P' p d9 d
}
) h) D9 I1 {1 ?' s m" \8 Tclass Client{
9 A( R6 L- r' l6 {9 Y public DataInputStream in;
4 G4 R4 p( M( {( H* k public PrintStream out;
# K+ J- t Z8 V' u private Socket client; ! D2 p0 v3 p* _4 ~; i8 g
public Client(String host,int port){
7 U* ^! R$ y, I9 O( R2 H try{
( M* ]- w$ d8 I client=new Socket(host,port); * U! V( X* ? p+ C
System.out.println("\n + m$ d: Y2 A& y( G5 ?* g. |
***************************************************"); ' E7 Y% ]( x! s! t0 U8 x
System.out.println("\n @( Version 1.00 97/12/30 "); % f7 f D: d8 n- Z# r- E L/ }. k
System.out.println(" Copyright (c) 1997
* @4 d* k2 l0 i (Lui DongBing) All Rights Reserved."); & M4 W* b9 u- ^/ b! }4 W
System.out.println("\n
9 ^ K6 K0 R. G# l7 l. J+ H**************************************************");
4 I. _3 b% ~7 M* I System.out.println("\n Client socket:"+client); ; M/ a! x8 p3 }8 `$ v8 G; J( }
System.out.println("\n Client is ready ! \n");
( [1 b+ t- w) g# l' T6 D* ^ out=new PrintStream(client.getOutputStream()); 1 L/ e0 c8 o E2 \; E @
in=new DataInputStream(client.getInputStream()); ' k$ G" F8 B0 h6 {
}catch(IOException e){ ' x6 L9 M8 I7 h1 m3 P) p8 Y- v
System.out.println("\n IOException !\n"+e); 5 B" {$ e/ g: |, B) I3 _: Z
System.exit(1);
! d* i7 |' H* k1 S4 A: d& H- A& Y }
; X& l7 O# {8 [; E2 }* s' ]. V, J }
% h3 \1 k4 Y# q6 Y/ L7 I} |
zan
|