- 在线时间
- 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 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。
$ K8 G# Y$ r7 x4 e0 w+ H/ |, \# V
% {7 ^ `5 Z+ X7 W. M% t F---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。
# }/ X) @6 `; Z; J- F8 a6 X" Q
---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而 0 u7 r, z0 O; j% m* E
Applet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。
& d4 Q# p4 U$ s* n& K" S1 `; `% H
3 a+ y! h! |! C---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过 程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。
" V, G# z T! e8 M' R6 m7 t0 r) U1 K, E5 t4 i) ?
---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方 法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。 ! l: V$ p( e5 X) X M! N( Y2 C
1 Z8 y2 i& c/ ~# ^0 H---- 例 程 如 下:
0 _5 h$ R2 S8 Q, k5 G3 o7 d. k) j) y+ J
import java.applet.*; : E( a0 B1 I1 B) e( f3 d+ [( H
import java.awt.*; # n" i" J& Z/ }8 e% n
import java.awt.event.*; 3 O& k3 o; G2 v' k
. x7 h {& l+ z! h
% i1 b5 Q& ?, u" _6 U
public class Example extends Applet implements
* ^+ O# b. t& j8 } ActionListener{ // public static void main(String[] args){ % I9 @7 e( a8 k8 s. Q5 I% X J1 C
Frame win=new Frame("Example"); 9 D6 v0 t" A% {) C
Example example=new Example();
4 |: ^% s1 B$ Y- l win.add("enter", example); $ Z1 c( w" q6 x4 ~3 l+ m
example.init(); // win.setSize(600,360);
; i4 s! N! m& f win.setVisible(true); + q; Z5 F. m5 H# F% o9 b
} ( {0 @) S% x- L8 w2 {( V
public void init(){ // Button button;
& G0 X4 R& N- H# n/ v7 F8 y Label label; * ^7 T' q4 N! ^; ?6 O* v6 @( N
button=new Button(" OK "): " C" h% ?, Y$ W4 o4 b0 T- Y& k
button.setBounds(280,200,100,20); ! P/ u" Q2 `+ r- k' @" P1 _
button.addActionListener(this); 0 P9 Z: A- o4 p' e0 b9 @
label=new Label(); / X6 x& e/ _! ]& g. x
label.setBounds(260,100,200,20);
1 h$ G' ~1 J! E0 C4 R. ]7 ? add(button);
! J4 D" D$ U2 X! [9 A4 |; J2 n add(label);
1 L5 N/ j# |: M( l! f' r \. [! j( B } " N6 a3 t; _$ `2 q
public void actionPerformed(ActionEvent e){ 1 j0 p* [+ r! C+ a$ p
Object source=e.getSource();
0 `4 ^/ U" b! k. u; }) s. C if(source==button){ 9 Y/ c2 ?8 j2 S, Y/ ]( l4 e, Z
label.setText(" It is a example !"); . z1 D; p: O: C5 H! r5 h- i
} ' q4 O9 z- S5 j' ~0 z
} 3 \! h' \) x6 {1 U
} ) C* @9 Y. | ^6 a5 z$ r9 J" r r4 v
z, k1 S- a& G# u/ P---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。 7 | j M+ K' f0 \! \- g
/ { z$ V& M) `+ O! G7 q* U7 G8 P---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作 为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。
4 v3 K% y- L) H1 c: Z
/ E3 c/ x3 K, p" x' P. Z---- 2. Java 中 的 发 声 提 示
$ n) {" c! E( ]& d) D
+ @, j+ d0 L! F, G1 t& Z---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。
! |( j) X, W. F) Y! v
1 p/ i [: A1 ~3 U" E1 @---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下:
, o! O8 s$ h$ K, I! K5 [3 }0 I2 D4 W+ V$ R, J7 y! g3 f* b# r
AudioClip audio; 2 g! W( g" N2 I, Y
audio=getAudioClip(getCodeBase(),"Hi.au"); $ ]3 j( [: p- O9 V
audio.play();
# N! l. k+ {' {8 p2 l9 F! y, S5 `9 k) e9 u8 C8 |
---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取 得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能 在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能
# S: L- ~0 O# l' a, X9 b* U: K. N够 被 调 用 的 。 6 H7 R7 t. ~5 y; K
$ R( c5 k4 t) f1 z9 u. ]
---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ? + F: g) G$ l" [5 y) l# W1 e
. Z, M* V8 u6 k
---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。 0 J+ h7 E) [1 V& Z9 H/ x6 k
( |) t* t7 \" `2 A---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实 现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。
) o8 C( g, }- M8 J: ^5 Q$ q# U1 @4 E- Y4 V. Y5 l, A' F) }( p
---- 程 序 如 下: 1 N( G" z' h+ O/ \, V
! Z8 A) C; k6 Z5 _& @+ |) v! m8 V
服 务 器:
7 `6 r$ q$ W: Uimport java.util.*; ! R% i# h2 r3 D7 f/ H9 ?+ C' n
import java.io.*; 8 Z$ a7 e9 @( A% m: f4 R* r
import java.net.*; . _- ~4 `9 X9 c1 r: A/ Z) E9 |0 a) _
import java.awt.*;
9 Q/ G5 }5 c m# [
' ^: y6 _% d+ c. @public class ServerT{
* u g7 ~1 n7 a `$ ~; g- ` public static void main(String[] args){ I' M' ?! x o$ }1 h( \* {) m
Server server; $ m$ D# f. M$ m+ ^; B, X( y0 f, p
String clientRequest;
X4 u& Z7 B/ R6 R+ o$ e) ^ boolean quit=false; # H0 w7 M* H: S0 }5 x
server=new Server(8001); 9 K# L) `2 |( @9 M4 n
while(!quit){ % _+ P# S |0 y$ J7 S% o) n
DataInputStream keyboard=new DataInputStream(System.in); / w( V8 V/ j" U" T) V8 W! l$ Z2 U
try{ j0 Z* U W' e `+ ~
clientRequest=server.in.readLine(); 2 s( M( P8 Y) Q8 m, G2 p1 A! ^( E
if(clientRequest.trim().equals("CLOSE")){ 6 K8 a* X& O; k0 Y# _3 g9 [
System.out.println("Client says: "+clientRequest); : y, L9 G$ D; [: }: i2 z$ u
System.exit(1); . z: w3 [5 k* ]/ e. N5 o1 g& m! Z
}
7 Q( ?! o- J! ?6 l* I System.out.println("Client says: "+clientRequest); 9 }% Q5 R% O0 x3 ^' r& S% C5 p
server.out.println(keyboard.readLine());
! ^7 e0 }# s4 x4 C6 }& \ }catch(IOException e){ , Z! |; p- s: h7 e( z9 L+ x
System.out.println("IOException in server.in.readLine()"+e); L2 q1 {+ N: E+ f- i
System.exit(1);
* h+ v: B0 s7 B0 I/ h- ~ } 9 D2 P: E* y! }# c/ a. }4 y
} 8 }, J! E9 P/ m! Z( M
}
7 ?+ T. c4 f# J; q0 _6 \}
/ }- }* D g( }; c# Uclass Server{ ! B! w2 m7 G' }, y7 l+ r
private ServerSocket server;
- E5 I/ E: o% h! H private Socket socket;
7 G" |) s' }) ], F( O5 n+ B public DataInputStream in; . d) ~2 {$ X; B6 @3 o! ?( P, J
public PrintStream out; + _" ^3 [- [# H1 N
public Server(int port){
% N. m7 N7 U" X2 B/ P try{
4 E, `0 G2 y( \5 k server=new ServerSocket(port);
! l% p" M3 p. v. f/ \; ~" A& u System.out.println("\n 6 q! L0 @, w) i9 [- B$ P9 H
*************************************************"); 5 H" c2 ]# n! [. e
System.out.println("\n @( Version 1.00 97/12/30 ");
/ h g: W h2 L% E. d: a4 O System.out.println(" Copyright (c) 1997
5 K+ z0 H, X; Y+ O8 J (Lui DongBing) All Rights Reserved.");
, b7 x& D3 K- Y System.out.println("\n ) w9 N" i* ~ R" |: T7 C
***************************************************");
+ Z- e9 H- _6 u& c( R$ T. g) L' h System.out.println("\n Server is: \n "+server);
4 i, r( K9 ]6 r, P7 a6 s+ o socket=server.accept(); , M" H7 p! M& R- X9 h5 c9 o8 \0 X2 N
for(int i=0;I < 260;i++){ // 发 声 提 示
* L0 z; w. e0 I Toolkit.getDefaultToolkit().beep(); / ^: ^( q! U1 J8 a1 y
}
8 L- @5 a1 W- E System.out.println("\n Server is ready ! \n");
& O& l/ p* V' ]) Q x in=new DataInputStream(socket.getInputStream());
) Y: i3 K ], P9 n) X o out=new PrintStream(socket.getOutputStream()); 3 Y9 q) a3 V8 J( ^0 v, u# S
out.println("We connect in "+new Date()); & l2 p4 [4 v' P$ s: F, ~
}catch(IOException e){ ) Q9 z' B* }$ @- j$ @8 `" h' ]
System.out.println("Server is failied !"); + M g1 Y1 l& J* V4 e
} # n% v/ V8 C# ~- @0 @, z- c
} % w7 N* g+ ?. i# j
} 1 P% u+ I. C+ |6 @- u, h
?8 T; u4 h% K
, |& A! d! s8 N 客 户 机 :
; F& K( X2 x4 h R; ~: himport java.util.*; + b# h4 ]6 P. u) M! w+ F
import java.io.*;
3 S5 J3 ?2 I. Q* R$ N6 yimport java.net.*;
; E+ X C: W$ ^6 o. i
. V! I# v) m2 e3 ^ qpublic class ClientT{ # v$ ~1 w9 P; h. x: ^
public static void main(String[] args){
( j( C7 _# ^: l3 e B- M String welcome,response; % @- K% s$ |6 y' }0 G
Client client;
/ }# r% ]- H: {1 E client=new Client("202.120.80.20",8001); // DataInputStream keyboard=new DataInputStream(System.in);
' `2 n/ z B2 ]* f' U+ O$ H boolean Bye=false;
/ k+ g% N2 Y. R while(!Bye){ & [1 i7 P0 w2 j6 Y4 ?( t; h
try{ : u8 d* x/ ?$ ^5 o1 n1 b+ Q
welcome=client.in.readLine();
# W% G8 ^# A' j& b6 e: J2 O1 g System.out.println(" Server says: "+welcome);
6 F3 S7 L# ^. }/ S# t$ T client.out.println(keyboard.readLine());
' S2 f, ?# s/ _! s' M }catch(IOException e){
& q$ b: }5 k$ l% f) m# A) V System.out.println("\n The talk is CLOSED !");
9 V3 @, l8 {3 N F6 I+ y2 H System.exit(1); - \, i3 B4 C* n% Q$ K) o
} ( w6 z7 @8 z8 d0 C$ ^! i- W: r
} " o, F% X( \& Z6 s( m' D
try{ # @) P1 n) V* o, _8 `" Q- C& v
Thread.sleep(200);
% I9 Z2 Q( i+ @. g$ T( W0 G }catch(Exception e){
6 g. l/ K! m6 W5 ] _) @5 i E System.out.println("It is a bug !"); 5 p. d& E5 T; z
}
" q- [ A* P' W! X% f' N }
$ c b" ?# a$ ?}
7 H1 w+ G" b' l0 o5 q- Y2 [class Client{ : a0 l9 _8 V+ Z. V; T5 Z
public DataInputStream in; S% y9 t* p! [% g' Q# u( I
public PrintStream out; ; o" }/ T* I9 B4 M) i3 U
private Socket client;
4 b+ s, w& H5 l# ]& {+ e public Client(String host,int port){
8 H' r5 w5 F8 R1 v; M try{
% m8 p N8 V2 b- L client=new Socket(host,port);
2 V, b) m2 y: n; R' O: a System.out.println("\n
6 k" j! a; C! d- ~' `* _" k" N' q***************************************************");
$ p3 A; Z" {# j6 g. _5 D! n System.out.println("\n @( Version 1.00 97/12/30 ");
, ]; V3 I) u( s- j- U6 z1 [6 Y6 ~ System.out.println(" Copyright (c) 1997 " D7 n7 A& h) c& q. ]& H
(Lui DongBing) All Rights Reserved."); : O. N0 K" D: B7 F
System.out.println("\n
9 c1 J7 Y! S& W/ k**************************************************"); ) k" ~1 d5 C, N* o u
System.out.println("\n Client socket:"+client); ( E5 _+ t. I" E% A, |# w) ^+ A1 I
System.out.println("\n Client is ready ! \n");
% |4 M( u# Q& z6 d" [ out=new PrintStream(client.getOutputStream());
, H! B; h5 ]( j) J: H5 W in=new DataInputStream(client.getInputStream()); % ?# H6 r! p7 O- I. f) t& E) C
}catch(IOException e){ : k7 ?/ |9 f; H/ S- K: S, t
System.out.println("\n IOException !\n"+e); ; a7 \: g: B5 c
System.exit(1);
- i: X& S- g; D }
% k( v+ ~6 l2 ]: P c9 O }
9 d W! x3 u _$ o" D7 ]* x} |
zan
|