- 在线时间
- 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 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。
; ?% Q+ X7 _! \# b ^# f \" I4 A4 }) ?$ l* ?1 {- Z' ^
---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。
2 _; P: u# f3 {7 a$ C B
+ l% H/ O' I. a" A---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而 ! c5 E% S2 Q+ c6 K
Applet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。 : I, F3 F% l0 ~. _
6 [) Y4 I1 _1 Z' P
---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过 程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。
( T8 q4 u, a F9 R
2 d) C$ k! K+ E5 `. ?$ }---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方 法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。 3 b5 i8 ?3 ?) O8 F: a* T
) ?- I8 I3 P+ o2 {; h! S$ ~" I---- 例 程 如 下: & Y; q- T* B( W$ C
! n) G0 `4 s$ s: r* ?( f
import java.applet.*;
1 F- c. \, U: y$ }( v6 u" j import java.awt.*;
+ V$ ?" C3 k/ I2 a9 }; C" C import java.awt.event.*;
7 {' o3 `" K3 I* R2 |
7 b2 _" j( Z% f( L. c8 Z) F9 f* T( Q- {( v9 A
public class Example extends Applet implements ) z# ?8 ]- R3 F
ActionListener{ // public static void main(String[] args){
. r% J$ n( _; f/ G# Z6 Z Frame win=new Frame("Example");
* A% p/ D1 L3 O+ a Example example=new Example();
7 J1 I5 ~. ^$ c( ]7 E win.add("enter", example);
* l5 U1 v5 W. j$ t4 C example.init(); // win.setSize(600,360);
( i2 w7 m2 d% w* z/ e X win.setVisible(true);
9 G, N8 a4 {9 e& R1 j5 V } 5 F! a, `. u2 E$ M& d; g
public void init(){ // Button button;
$ G: L( z* r O6 }. i0 Y Label label; * M& G/ Y$ `$ r. Z, }
button=new Button(" OK "):
- m+ z+ Y/ O( o, }; B button.setBounds(280,200,100,20); 9 v. n% Q. m) r. D
button.addActionListener(this); 9 H! \+ Y H8 s% x% j* K7 K. g
label=new Label();
- B" V0 D& o8 i, ^6 d& n4 f label.setBounds(260,100,200,20); 7 E% N; I$ n9 z6 D5 T
add(button); % `# U/ v. m" h, ?8 B
add(label); 0 a9 c! \. S: ?
} - s7 y( G9 I/ d$ L. m
public void actionPerformed(ActionEvent e){ V3 [# U7 F; R/ @( h/ \- q1 F- e/ O
Object source=e.getSource();
" p$ \4 Q( _2 c7 ]: @ if(source==button){
1 B% D: C4 H8 L0 B [: J& M, r label.setText(" It is a example !");
& e7 p% E( _8 I+ | }
& K) b& u: |0 J1 O: I \: ^ } ! P |5 a8 S% p$ n; Y5 ]+ D
} # \: `3 ~% W9 N: y
0 P I+ r' ~( E2 x. F) k+ I
---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。
. ]* n& U$ z7 f7 O5 ~3 D. G/ B
9 [5 G' F- e3 p1 Q, C/ s Z6 o5 w---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作 为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。 2 c' }+ @6 w+ A) @' d j
, i! K0 Y; W4 O& L8 D2 ]. j---- 2. Java 中 的 发 声 提 示
" L# B1 h+ [& X3 i/ L
( C; _6 U7 r) ~3 w---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。 / {: M. n* y3 X! p; h
4 u% |2 K& u$ y$ F% }
---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下:
/ `) Q2 Y, B0 o/ S. t$ M5 w8 i. L. \6 |' F) U# I6 T
AudioClip audio;
- `! W5 L" y7 o3 i# w; X" B- g$ O audio=getAudioClip(getCodeBase(),"Hi.au");
% O" _# q; i( O( `0 T audio.play();
7 S8 M: R( {4 ]/ W. ]$ B- K6 E
/ o1 H$ t+ H( a3 v. N---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取 得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能 在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能 _6 q7 D1 T9 d$ ?! j$ R$ K3 ~) v
够 被 调 用 的 。
. N2 E. U& L$ \+ e7 h+ V+ o9 Y% d& y; ]3 h3 S. l0 }
---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ? $ E% ?' m5 J! s; U/ v
1 F8 {, g* m$ v
---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。 # x' L' G9 E" m h# u
0 S9 ?0 H- T8 ?8 N, C
---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实 现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。
7 y" Y8 q9 O5 W* | m1 I; Q% ]% E$ `! G9 B2 w- N$ _
---- 程 序 如 下: ' F# w! R% f/ e4 Y T' ^: A
' V: B# G7 H5 c8 R/ N 服 务 器: 5 `# U* @# @( C8 Q$ ~# W
import java.util.*; # ^( g7 U7 q' G5 C4 q, ~2 g7 S6 t
import java.io.*;
$ e. f. j8 }! n, i0 L$ Mimport java.net.*;
8 S; P& R3 t6 ~' bimport java.awt.*; 7 r- T, r- m( c! o; c' @. y
0 O p0 d0 ^$ N. L6 j5 [public class ServerT{ 2 E- z5 L% g/ I+ d% d/ K
public static void main(String[] args){
0 K' ^: k/ ~, p7 R C Server server; 9 d9 E' j8 G+ }2 \, O- m0 @
String clientRequest;
5 P9 y, m4 n5 Y2 u boolean quit=false;
! ~* a; N9 }: K" A server=new Server(8001);
% `1 y' _+ [5 G% ~/ Y/ W: k# O/ i j8 Z while(!quit){
. e7 h' f2 P0 j# A" W3 V$ f! ? DataInputStream keyboard=new DataInputStream(System.in);
3 k: `, Q6 v# u' K) B" p try{
7 l* z' G" C1 G* R clientRequest=server.in.readLine(); $ b I0 f ]" N
if(clientRequest.trim().equals("CLOSE")){
) }+ s2 |5 f/ V2 W0 d& H System.out.println("Client says: "+clientRequest);
) q/ M' Z* u) I System.exit(1); 8 C" n: @/ c6 J
}
4 n. u2 m) l: f) F2 O: n: ^ System.out.println("Client says: "+clientRequest);
. y$ u4 U/ x$ v6 F$ B$ z! R server.out.println(keyboard.readLine()); : M* W9 i" o4 u3 ?' H
}catch(IOException e){ - `; H$ V" F: o' w, j# O4 ^
System.out.println("IOException in server.in.readLine()"+e); " V7 ?1 m$ o1 k, |6 x4 e
System.exit(1); 1 {& c% W8 Z5 q
}
$ w) _. w: g, r5 ?* M6 m } 0 C3 i# _+ C9 h* j- }% @6 M
} 6 m6 h) S* |& U% B( P
} ) Q# W% N% \& E) C
class Server{ M5 n& s( S: q
private ServerSocket server;
8 w( U# M# A, g2 R \3 G private Socket socket;
9 |7 P5 w- j) _( }3 _, e+ B public DataInputStream in; # A# R1 y; R# Q0 |4 l p
public PrintStream out;
4 `1 s5 [2 S2 v# E/ v# ^; E! }" o public Server(int port){
; Y2 ?# E8 q: Q. Z( u' |: E: ] try{ * Q: g" V4 v) l2 ?" a
server=new ServerSocket(port); v. }; x' ~: f6 }: ?/ r! h# j+ z
System.out.println("\n
8 f0 ~7 P1 r! e7 z ^4 v$ k*************************************************"); 4 x" J+ I2 k% [" W. _$ g( s
System.out.println("\n @( Version 1.00 97/12/30 ");
: v0 m3 A, U' z! ]7 p+ h System.out.println(" Copyright (c) 1997
& X. l7 ^8 V5 I' p! N (Lui DongBing) All Rights Reserved.");
8 c' x+ X/ K, s: m System.out.println("\n . b4 C( C$ o6 o H( d7 s+ T
***************************************************"); " H: i) q p2 |, R0 g" |6 F
System.out.println("\n Server is: \n "+server); 6 G* R" o1 f5 b0 D# _$ E1 X
socket=server.accept(); & u" ?1 u0 X6 a; t; F1 d5 F0 u9 b
for(int i=0;I < 260;i++){ // 发 声 提 示 . b$ M8 ?! ^+ H. Z: O/ m0 g# r
Toolkit.getDefaultToolkit().beep(); & S$ v4 K& A7 I7 e5 [' C
}
7 h: O' A. M" Y- ?1 X0 I, K: H System.out.println("\n Server is ready ! \n"); ( F3 m& w& Q2 G
in=new DataInputStream(socket.getInputStream());
: N# v$ B8 r/ ^7 A out=new PrintStream(socket.getOutputStream()); + f. Q3 G: b9 ]( A% J
out.println("We connect in "+new Date());
8 C; R4 O( C, \2 K( s1 Y0 P8 C6 }2 j }catch(IOException e){ $ ]$ [( ? r0 _8 E' n& L
System.out.println("Server is failied !");
# B3 V5 s; ]8 P- B1 s3 z } 2 C* ^0 j3 ~ ]/ h! e9 n' _9 h
}
" F5 v7 i9 Y2 u2 R+ j- G}
t" z2 Z6 x$ L6 w& Q( n6 ~- o% i
+ U k1 Z1 c0 S6 Q# q" }8 P# T$ C1 S2 z
客 户 机 : " [+ p2 {+ Q. G, u
import java.util.*; & \/ F3 F" K/ I
import java.io.*; ' |9 @% s8 d, @3 ?; l: y: D& a
import java.net.*;
: S- d, k! g( h0 ?$ L
9 z: y9 X4 T/ @# F; Qpublic class ClientT{ 7 }4 y& V( n+ @# v* x
public static void main(String[] args){ , R5 S3 T) @. m. T6 }
String welcome,response;
0 {: B! W( C$ Z; c8 B Client client; 4 u( j3 |1 _9 X! h' x
client=new Client("202.120.80.20",8001); // DataInputStream keyboard=new DataInputStream(System.in); * u# }7 {5 ]$ o1 g
boolean Bye=false; ( z0 q& X% l6 t) B- `8 z7 t# s4 }$ B
while(!Bye){ # u0 L, ~6 N- P% |: s' @# |" L4 K
try{ : S; a1 A! J6 | G! E$ v
welcome=client.in.readLine(); 2 O ]) I/ G$ X+ H; n) p) `
System.out.println(" Server says: "+welcome);
; B& b) o& S8 Y6 |$ \7 ^/ r client.out.println(keyboard.readLine());
) C0 L4 x7 v( g% u) ~4 ] }catch(IOException e){ 3 N3 Z" [% {0 B' W/ ?$ w
System.out.println("\n The talk is CLOSED !");
# @2 I9 j7 K' c! T1 X' @ System.exit(1); 6 z: n d& b/ q0 B' }6 ~
}
6 s3 a Z7 @% Z7 s } 0 w: o* K, P$ ?7 o9 J2 k
try{
6 W1 x8 f9 W, R Thread.sleep(200);
' i) |4 m* u2 K, U- ]2 A$ w$ i }catch(Exception e){ + n# i7 Y1 e% g) ?" w
System.out.println("It is a bug !");
6 u1 B2 G! N( ^ j2 _ x( I } 3 m0 g: v7 j5 e& G+ S
} 6 W3 q. Q# |4 y, c7 P( ~
}
. @" G+ E* H9 b* X* R$ o' |. z# O Sclass Client{
: B* P( b: s! B9 t2 H+ V* |% _! X public DataInputStream in; 6 m, [- o; K6 w) G+ ~
public PrintStream out; 8 Y+ L! J! F1 [, ]! l
private Socket client; @+ w7 E) j9 V
public Client(String host,int port){ 0 S, h% o' _( k1 ~, R* i/ E
try{
' k3 S" h$ Q8 G: ~ client=new Socket(host,port);
8 U& Q; L, Y4 k9 P/ F System.out.println("\n 8 m1 P* L* q. N& Z/ e& D. |9 B
***************************************************");
; Q6 y, n8 F" L, r/ h e System.out.println("\n @( Version 1.00 97/12/30 ");
2 X( k' O- a! }5 {: b0 A System.out.println(" Copyright (c) 1997
@; m7 R) `0 }5 c (Lui DongBing) All Rights Reserved.");
( t; U6 R- Y6 ~4 z3 @ System.out.println("\n
9 J6 ~& N; a( ]6 n**************************************************");
7 e$ W& _2 y( K- k' i System.out.println("\n Client socket:"+client); 2 m* Z3 q; u$ ?2 ]3 n" W7 u/ y$ s
System.out.println("\n Client is ready ! \n"); 2 W v- k2 T9 A) E5 d5 l( B4 N
out=new PrintStream(client.getOutputStream());
! l( r$ \5 Q% V) e in=new DataInputStream(client.getInputStream());
: Z0 ]6 J& g( o0 X }catch(IOException e){
: z3 G% a$ z% N' Z8 P3 u& H+ ^ System.out.println("\n IOException !\n"+e);
1 r2 F0 }9 w1 `0 @ System.exit(1); 5 E; L9 x! v1 L: ^& ^% _! c9 @* e
}
6 H3 u ?1 z N } / v! s0 k, [) X
} |
zan
|