- 在线时间
- 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 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。 ! Y8 V- R5 Q3 K1 N7 x5 w
3 Z. l$ u7 C( c, Q- Q
---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。 - Y p) }( C% x9 E8 ]
' ^2 f4 `% ]6 v---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而 ) |4 w9 K% A$ Z& U
Applet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。 ( \) u9 ]9 R! M8 \- e' C" [4 ?. x
, e" p& y( S3 p! ~4 t4 n2 j0 m
---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过 程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。 ) G+ C( [* g7 @4 x. n( v
: r: ?7 m3 d5 x% u* ^' K/ a$ i% ?3 E! _1 k
---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方 法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。 3 ~; j# H8 N& R+ Q9 T
! e3 P1 C3 O& w$ h8 W9 o+ c
---- 例 程 如 下:
, A! `, O; g' z7 x/ Q% E! d) P& q1 X K$ M2 M
import java.applet.*;
2 g) v' K4 q e% ] import java.awt.*; 3 L% O8 r- E' k# T0 |* c
import java.awt.event.*;
4 \4 {/ c( t1 V# S1 |# P ( V# q2 _; W: Y' y* {6 P7 f4 h
6 o! U0 t% |" e public class Example extends Applet implements : ~8 x/ B0 D; N1 C2 J
ActionListener{ // public static void main(String[] args){ ( H8 b' x" @% o
Frame win=new Frame("Example");
. N% k7 f7 D1 H% ?2 U9 w Example example=new Example(); 7 i& ^6 r7 H9 t4 N' P" |% H# a
win.add("enter", example);
P h3 @- ?7 I" X example.init(); // win.setSize(600,360);
( X6 p5 D& Z8 N D1 ?, D1 g X& @. p! l# h win.setVisible(true); 3 R) |! n6 o3 _8 ]: R
}
2 l2 o/ C- p8 ]8 g! X7 _5 y public void init(){ // Button button;
! f. O1 D9 x, Q Label label;
( X7 u+ \/ i* w* q& W$ t2 u button=new Button(" OK "): $ o/ V8 U( a) u$ s( ^3 p. j+ g4 x
button.setBounds(280,200,100,20); % q3 g/ \; Z/ S
button.addActionListener(this); 2 d& S- ?6 B4 M0 o. ]. l6 [ R2 B
label=new Label(); ! ?# i) D' R( ^; X" J) O) U
label.setBounds(260,100,200,20);
' }3 O' R a' t; |+ t! A* z9 i add(button);
{& \( ]- ?: I, [& d& d0 p add(label);
7 S9 |3 v- i" F, H: ?. g7 u$ L) B. J } 2 n/ G4 T6 u( n) H
public void actionPerformed(ActionEvent e){ : A9 Q6 S/ G) n+ m
Object source=e.getSource(); . y- F1 p, |# k$ b5 H
if(source==button){ 1 M2 J& [. g! M! R3 K
label.setText(" It is a example !"); 3 z# _" j; E( o& l9 }' {- Q1 u2 A' `
} 9 o$ T# E1 ?" |: ~4 G
} + {. a+ V, f' K6 O
} 2 Z8 n1 c3 h1 k4 r
3 h6 U y$ T% P5 ~& I1 k) E- l
---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。
0 C; _: A4 k" C* S/ h) E" k, d, \# c2 Q0 e2 r
---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作 为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。
/ H" O0 \* Z0 t6 W3 B; b, ?( ` Y: [2 S
---- 2. Java 中 的 发 声 提 示
% v* U4 H0 }/ n+ ~! \4 W# s+ {' a. N4 r* s5 l* C
---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。 8 z% L. h# P8 h/ f
' \4 J' h- ?6 R---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下: , n( [- J* u- ]7 Q, N4 t' K
/ E' [: X& |% N* A4 O% X5 p AudioClip audio; 8 T; [8 L( k$ X( y& k
audio=getAudioClip(getCodeBase(),"Hi.au"); 5 M; P1 T8 ^/ Z1 ]& o& A
audio.play(); ) l0 ^* K1 W/ d
V. l, t c2 ]# M
---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取 得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能 在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能
5 x3 m: W" t/ a$ v+ Y2 c% E够 被 调 用 的 。
8 C( V: j0 \- r9 c$ u( T t
3 |5 r/ W0 c: n3 f) ?7 @; C* t---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ? % ^% h: p \, K4 M! }
]0 r& ?1 D/ L, Y$ [8 C
---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。 9 b- b) e3 _. P: n( O
# |& h( F' W7 R" ^) l& \9 j& Z---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实 现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。
9 v7 h/ @7 ~# l8 z( C; P- B& ]) ]( M" b1 o( a+ G
---- 程 序 如 下: ! x" G3 ] n+ Z9 p; ?4 E
, i+ ]# j3 S9 Y m" ]& b8 i 服 务 器: 5 C. M- F1 q" X1 P' \2 h
import java.util.*;
8 Y) g B E# Dimport java.io.*; # a+ @4 D& f* m J- {" w* \) L/ _
import java.net.*;
/ u8 Y2 O; u5 k( D/ K! }import java.awt.*; ' n9 s, d ]4 q: r0 P( k- I1 m* K8 }
3 |; l( t5 Y- n8 o1 u
public class ServerT{ 7 m* d$ H8 R9 }! a3 b
public static void main(String[] args){
# y3 d0 V9 w* k2 p# h/ |; I+ o5 `4 X Server server; 6 U" k$ T2 O% h: t
String clientRequest;
# ]2 u, J4 l8 l9 |- b boolean quit=false;
- G3 {% W' u) Q2 V server=new Server(8001); $ |8 v; @( i r+ x7 P, V
while(!quit){ - q7 c) T! n- f0 Z7 | Q" X
DataInputStream keyboard=new DataInputStream(System.in); 4 C' I* D2 c% p$ a+ N* }
try{
' c) ?( A1 P7 {( t2 F1 y clientRequest=server.in.readLine(); . X& x' B: S5 Y) X- L/ f" v/ N
if(clientRequest.trim().equals("CLOSE")){ ! i5 Q" o9 D/ i# m
System.out.println("Client says: "+clientRequest);
% U4 k' [. X% ^ System.exit(1); " F/ F) b+ {) L: {) z. |
} ' h& S% a# U- h5 F
System.out.println("Client says: "+clientRequest); % H) w9 ` C# m: [7 A# s' c
server.out.println(keyboard.readLine());
! H& U6 C# n7 i/ G. m- I2 m7 @" H }catch(IOException e){ & f, d* J1 f f8 u
System.out.println("IOException in server.in.readLine()"+e);
. b4 s" n/ v2 M$ q System.exit(1);
2 K B. p- o0 z2 c7 k& b }
$ G. U) e$ C1 h4 Y5 W% K }
- h) W: C. t {% B9 u- ] } % p. f5 e- C7 T; a5 v2 X2 \ z
}
( H" o7 b0 [. Bclass Server{
" C2 w- [& q* Z2 n. @ private ServerSocket server;
8 j6 B o2 L; S) ` private Socket socket; 6 s! ~2 k5 o- R5 [" t- T
public DataInputStream in;
+ C' j1 O) [6 j( B3 M public PrintStream out;
: X8 |& n1 o" ?* k public Server(int port){ ' q6 H/ x& R+ {9 S4 Z
try{ . f/ e6 n0 X% N! Q$ X- z/ J
server=new ServerSocket(port);
8 l, {7 J/ d. B: W* c, i System.out.println("\n ' ] o4 i7 ^) f8 [
*************************************************");
E, O3 T3 X( u* g/ P System.out.println("\n @( Version 1.00 97/12/30 ");
' k# v$ X3 D: S6 r System.out.println(" Copyright (c) 1997
5 {+ f `& `% h5 _& K7 F (Lui DongBing) All Rights Reserved."); k' o1 A! l: _8 K3 [1 X
System.out.println("\n - ~- T$ T/ L# _" M6 U0 u% g
***************************************************"); 6 x9 I \- b0 m% @# o
System.out.println("\n Server is: \n "+server); , o3 h! H* r C0 l% ?' _
socket=server.accept(); 4 v5 U0 G! D! a5 V) G( y
for(int i=0;I < 260;i++){ // 发 声 提 示 ! |4 [0 x+ y" l: X; z- U' N
Toolkit.getDefaultToolkit().beep(); 8 P% u" \3 u5 x, J& j9 F9 d
} 9 H0 \' c+ O. ?8 [+ d! g$ M7 L0 Q
System.out.println("\n Server is ready ! \n");
% N) B, Y. o1 J8 i; H5 i in=new DataInputStream(socket.getInputStream()); . t' k) u/ L' s- I6 \7 S
out=new PrintStream(socket.getOutputStream());
8 u" u- W1 a8 ~! t5 e$ Y n out.println("We connect in "+new Date());
1 i/ f. X% e% s/ p7 y }catch(IOException e){ ( d1 A4 Z' }* W- u/ q; u
System.out.println("Server is failied !");
- g5 d1 }4 D% q) Y' K9 @ } , l6 N% y6 @/ \
}
d* r8 Y7 L( A, j# E: a9 ]2 G} + J# H6 E0 v% Z$ [
H) o9 t# ^: ]' H7 d% q
# B6 i) Y; I9 o. A: n8 J& [6 @6 `
客 户 机 : 7 }; ?0 t- R6 h) H% ~: S3 ]
import java.util.*;
- `* o9 N" }$ n! M( }' B# K1 d; Yimport java.io.*; 6 N; y) d: G6 \* t9 S% ~5 ^3 g3 P# l( ~- G
import java.net.*;
5 R1 X& v% C0 W( B' j' w+ L+ ~2 J& {' \) Q* @# M- H
public class ClientT{
8 b- z M) h$ y) m" i( n, N, S; e public static void main(String[] args){
0 L2 y% a& Y9 I" l3 a String welcome,response;
4 s: B) @/ Q9 M9 `) K6 t P9 N Client client;
1 b' |0 A* T: n( X client=new Client("202.120.80.20",8001); // DataInputStream keyboard=new DataInputStream(System.in); , l( h2 z& m8 E3 p' Y+ r( n
boolean Bye=false; $ h U; B1 m4 P. V3 b' B7 a
while(!Bye){
+ ]+ M0 q6 t; s( A, n& S" |' B try{
/ A6 \, j* H2 f+ z welcome=client.in.readLine();
# E# y, F0 K. R m! y: ? System.out.println(" Server says: "+welcome);
0 t! s5 ~( N( ^/ a3 K2 ?% ] client.out.println(keyboard.readLine()); 2 d- c6 `# G. g8 j( S
}catch(IOException e){
4 n) D: \0 r, i# N4 Y1 U: W3 u System.out.println("\n The talk is CLOSED !"); / A) c" O& V0 T! f: }
System.exit(1);
4 H; m1 e* P0 L+ a; v8 S, j5 W- Y } 5 q8 n3 N6 M9 j7 ~, n& y5 J
} B& ]$ u. [: N5 c* u
try{
" j* ~! }) M6 ~7 Y& N. C8 b- f Thread.sleep(200); 5 V- l4 K% P7 m! Z
}catch(Exception e){
; @6 \. f+ {- `9 _6 j/ e3 I System.out.println("It is a bug !"); 7 e/ f& X% w+ T. C& a k5 L
}
. Z. w, \$ X# v* I } / B1 p% D, [2 c# F1 t; P( c
} 0 S4 B, `0 ?% W) x6 ?" q
class Client{ - N+ C; n- F$ `& r! w% ?
public DataInputStream in;
0 h4 b3 b7 x$ @. l4 W4 K public PrintStream out; 9 E0 F# ` G: G" V
private Socket client; ; b' J/ L' L/ C g
public Client(String host,int port){ ( j4 A4 \7 j2 ]5 ?# H* j9 ]
try{ 7 s! U9 T, z s
client=new Socket(host,port); * H" J* n4 k p, B0 ~( v+ J
System.out.println("\n . \$ O/ h8 v" E! B, }9 N
***************************************************");
9 L7 {* o' p: |5 _ System.out.println("\n @( Version 1.00 97/12/30 "); ( T. q: i, U, W, h, y' o5 W7 v. M
System.out.println(" Copyright (c) 1997 - h, g' W5 K) [
(Lui DongBing) All Rights Reserved."); ( g& O j* K$ K7 J# P( f' u
System.out.println("\n
) _" j8 L, [1 P# ?0 h" e# q**************************************************");
5 L% u; m7 z+ M% e System.out.println("\n Client socket:"+client); 8 N, r3 m9 M" D+ z- E! G
System.out.println("\n Client is ready ! \n"); , Q: R/ O( p/ c
out=new PrintStream(client.getOutputStream()); ( M" H: x+ V+ P) D0 b* F7 @
in=new DataInputStream(client.getInputStream()); Y4 q/ k% Z+ B1 K* I
}catch(IOException e){
" w- Q& J: u5 h% |" M# `3 G System.out.println("\n IOException !\n"+e); ' u, c+ j, ~& b2 d& L6 Q
System.exit(1); A( p+ R) z6 p
}
0 ^+ B9 B* q2 T$ y! y" M9 k }
" p2 w, K2 f9 X0 a; _} |
zan
|