- 在线时间
- 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 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。 # L3 W$ y* J# q- \# p
+ W. A2 X s2 t
---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。 9 M: y0 e* Z7 R
! {1 z$ a1 B' d+ L---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而
8 b# V% _& f% l! O1 E! x9 ZApplet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。 1 j4 ~: z1 P+ j! ]/ h
0 Q) R" Z Q5 m% c# R9 r ~
---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过 程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。
) O- J; X. g4 T- K' o* |2 ~! y& r$ M3 j3 u. v6 A( F: J: y
---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方 法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。 ' \, g7 J5 e7 Y8 {2 ~0 T& y' C
9 a3 J/ F$ c0 P, h( L8 r% O0 w
---- 例 程 如 下: 0 W& C& I* W& w. M
& u' x7 d! Y' E3 h2 w& _8 g7 ]
import java.applet.*;
2 ?. E; w1 b/ q$ U import java.awt.*;
2 \8 @( R8 N6 L. l3 S! X3 l: o0 W import java.awt.event.*; 6 Y0 m* {0 h+ a5 r! k8 P
0 a. K. `; d! |3 |5 h8 j
5 U& j" P) |* O. [4 h! @$ B public class Example extends Applet implements - _+ a3 ]# N6 e, [( F
ActionListener{ // public static void main(String[] args){ 8 n& P. D f! w. M" r0 V0 Z
Frame win=new Frame("Example");
9 y9 P+ A4 e; @. S; N Example example=new Example();
0 {* ~, ]( K/ a( T' X6 W% P1 t' V- Q win.add("enter", example); 5 }. ?, H. m0 K, r
example.init(); // win.setSize(600,360); 5 s0 i" z9 i" Z; }( X- l
win.setVisible(true); ( x# x# H1 ~( s D3 ^* w9 C
}
1 U5 K) H8 L7 E6 W0 ]% J! J public void init(){ // Button button;
% y/ m; B9 {3 }1 E Label label;
$ ~- `4 y& i- a+ M! _- v) O' v" d+ ` button=new Button(" OK "): , L9 k" }, Y9 X# q4 C
button.setBounds(280,200,100,20); 1 g9 B/ i4 a' l4 t$ M
button.addActionListener(this);
; N1 P5 _4 A; u% S& x8 c% Y label=new Label(); . P) U1 ^! R5 }+ K1 E( e3 G
label.setBounds(260,100,200,20); . c+ H+ \) l( r5 e7 C& B
add(button);
- ?4 C1 c' J; W) \! z add(label);
2 |' I6 {$ \! @* x# m1 F! Q. n1 [ }
0 j* K/ U# z7 \! Z6 Z; x public void actionPerformed(ActionEvent e){
. R2 E1 ?9 r" ]( k9 C Object source=e.getSource();
! e9 u! q; k3 z! T if(source==button){ + ]1 U' ]- |6 x2 T9 I: `! o% ?9 k) P; f
label.setText(" It is a example !");
6 e1 \0 M' E3 | } , Z2 A! \/ j! j8 [" M- U+ S; h. R1 E
}
. {. S& t- ?) ^" m* d } , r9 m: A! u" T- `2 j: r
+ z7 e% P8 _; M, o2 A& S
---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。
3 j, \8 k6 u% t
2 e3 B; O n7 q: m$ G( b---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作 为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。 , ?3 n& a0 U3 @
1 Y! `4 F6 [+ F i' a5 D* H* x$ G---- 2. Java 中 的 发 声 提 示
3 k0 l; o6 y ^) L4 Y) U# z% [( A- _9 ]% l( J. U6 K: d' Z! j
---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。
6 ^! L5 t+ e! J5 C b7 t* W& r$ X# j/ ]( p
---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下: 2 Y) G0 ~, i9 s
' \6 _; V5 \9 ? AudioClip audio;
* a$ g Y6 ~$ }: g audio=getAudioClip(getCodeBase(),"Hi.au"); $ @! _1 ?7 E: U2 m# E( V- T. r
audio.play(); 2 k% q# {# y& w
( \; L9 ~# E, v0 ^- d---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取 得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能 在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能 4 ^0 P# V2 p& O
够 被 调 用 的 。 $ z& n, R, N( V0 _# j
% C0 F: U. K$ `---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ?
3 c9 J+ b8 @# A4 }8 Y: D+ n! J4 R3 m0 Z) [
---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。 $ X) J+ m0 G! W5 H) U! y; [
8 [: C. b } c; X. m& c" R' ]# O- B$ u---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实 现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。
- ]' f: m2 D1 N0 R
5 ^% p- U- U- M& ]---- 程 序 如 下: 2 Y l$ `& t7 [+ h7 w
+ O7 U- F/ M) a
服 务 器:
5 q$ w7 |! |8 b2 ~7 t# Z1 M$ X5 X% rimport java.util.*; 9 V3 b0 I% |4 b- I! t
import java.io.*;
5 H' Y, A5 E. \. q" a- z, e' vimport java.net.*;
9 E' a! H2 y4 r7 x$ f$ Yimport java.awt.*; , l6 Q$ {, a6 f7 O+ M, v. C4 S# P
# c! t( O6 v8 e0 A- npublic class ServerT{
0 G% J; |- X6 [5 V' S3 v- f public static void main(String[] args){ 0 j" A/ y: |( P# d
Server server;
X* R3 h# G/ ~3 T8 t5 l String clientRequest;
7 f/ a N O- e2 x' ^* w$ z( o boolean quit=false; - b" ~6 Q* d2 c
server=new Server(8001); 7 i$ h# d/ P0 z$ q) |$ a
while(!quit){ 4 z) P y6 y* y! F: [+ W
DataInputStream keyboard=new DataInputStream(System.in); & G0 ] i; ?* W
try{
# z: b& x. \3 o+ }( H% j1 W clientRequest=server.in.readLine(); 3 ^3 d) a, @! {
if(clientRequest.trim().equals("CLOSE")){ / p: |5 |4 S1 X9 H7 E2 s
System.out.println("Client says: "+clientRequest); ! B/ W0 j8 S I, H6 y
System.exit(1);
! d; ? P7 V' V+ p; e9 |2 Y. F/ ` } 1 Z: y3 o$ ?/ M; k; x" S; c8 c
System.out.println("Client says: "+clientRequest); ' E) r8 V' N2 n
server.out.println(keyboard.readLine());
$ p/ f% r: w7 R D }catch(IOException e){
- h/ p' @& G) _% S! c, } System.out.println("IOException in server.in.readLine()"+e);
5 G, \/ m% H7 c& r( a System.exit(1);
2 J- V0 v3 W( d4 f- E# ?. Q; g }
' }, y4 `0 \9 N. ?- ~+ f! v } 2 R4 ]9 \" S6 H0 @) X# [ `
}
* ~( |& H) r: c+ A}
0 p. J# `' g6 ]+ A) n5 i; wclass Server{
) ~# i- y: A/ m$ K @- R" C private ServerSocket server; - \* F4 ~ t, t) H' [" s
private Socket socket;
) `9 U* e9 E+ K3 l8 N: j, C9 w& V public DataInputStream in; , Y6 t9 ~& m( d, s
public PrintStream out;
' R4 I1 q) k1 n y' U public Server(int port){
' u/ K$ B" @, p6 n) B, R7 ] try{ - R% _/ v3 j* [& e: u& z3 f
server=new ServerSocket(port);
i7 F- N; v# m3 N/ c( f! d6 Q System.out.println("\n 4 k8 r& i4 h: \) `4 W# L1 ]6 {
*************************************************"); 8 a; O9 q8 F! {* @, H% v5 O
System.out.println("\n @( Version 1.00 97/12/30 ");
1 o5 V9 u R' Y$ `( _2 n System.out.println(" Copyright (c) 1997 % P% d* X* }( Y3 f$ G. O/ n! e
(Lui DongBing) All Rights Reserved."); 1 H4 D3 w0 u0 \. H& q
System.out.println("\n
% i2 o4 i3 e) O) V3 z7 k+ _9 w***************************************************"); 9 Q0 Q5 u/ R* k% K9 I
System.out.println("\n Server is: \n "+server); 8 z% q& b9 f8 B( n2 ^. r1 K) Y8 w
socket=server.accept();
: ^0 m/ l( [! \ for(int i=0;I < 260;i++){ // 发 声 提 示 " I5 G9 A$ L7 p' ^( ?- M1 D- {
Toolkit.getDefaultToolkit().beep(); # F2 I7 g4 u$ M3 B
} $ h% C8 g9 n- \1 X: b
System.out.println("\n Server is ready ! \n"); U8 c# {$ P, \! }0 N% l
in=new DataInputStream(socket.getInputStream());
; O$ ^( S3 g; K+ F; P out=new PrintStream(socket.getOutputStream()); 3 l* i* I7 M3 N' ~3 \- n$ W
out.println("We connect in "+new Date()); . U5 R9 @7 L/ y3 e5 {0 y# O
}catch(IOException e){
- f- [& a, B+ d System.out.println("Server is failied !"); 1 d T X% `, g& Z2 }! ]
}
; R, [ M- H! N6 ^* F+ w, ~) Z }
& l% n d, y2 f$ z5 d3 \% [}
- w0 g3 v+ X. n1 W6 g2 d6 Q
: l- Z$ D- U, M8 O8 E' v: V W7 o: r! C
客 户 机 :
( V: w; O- {1 ?import java.util.*;
' C6 T. ? m& P+ `2 \; iimport java.io.*; 7 Q- J- s/ M7 i( S9 F5 a
import java.net.*; & r: x1 U# Y; [& E4 B
; s) H! E( r r/ @6 L+ Xpublic class ClientT{
D/ v7 Z J: g0 q( D public static void main(String[] args){ ) w! A* Z2 A) Z- A: ^
String welcome,response;
% e; ?; p. l/ D& s( \6 E( J/ p Client client;
, U2 q9 l& S3 P' F) M; j2 H client=new Client("202.120.80.20",8001); // DataInputStream keyboard=new DataInputStream(System.in); % k9 D- n9 k7 O
boolean Bye=false;
# G* G6 b9 i/ i4 |( M4 i while(!Bye){
2 N0 b+ G* o6 z' w! a" ?: ~+ | try{
& i) \. W& I5 Q" o. O4 ]3 t- F, x welcome=client.in.readLine(); ; J; D; r. {/ D
System.out.println(" Server says: "+welcome); % d% Y" g+ a3 _0 ^' R8 }% C
client.out.println(keyboard.readLine());
, c- ~+ e }- t. j N' o/ q( z) T }catch(IOException e){
8 I: _% ]! G) f C; f( Y System.out.println("\n The talk is CLOSED !"); + Q0 f; X- I# c! `# Q; q: T F3 w
System.exit(1); : E2 i( ? e6 ~* H$ i0 H
} - |8 Q% M' K7 X3 ?
} . [# y: M6 t( a/ y4 e( W2 L8 z
try{
4 D& n% B# {: Y* ]8 D/ u Thread.sleep(200); " f' O1 y/ v6 ]8 T
}catch(Exception e){
$ R8 ?! U0 K7 i5 R$ u j System.out.println("It is a bug !");
/ }+ \/ @' E$ }! O7 ^ } 5 u G8 P$ K5 x
} : R& ^6 f1 A7 l% H
} - {% n/ v. n6 Y; [5 s7 ?" B' a
class Client{ 7 a$ @9 F+ ^9 Q B! u/ Y+ h# c' ?
public DataInputStream in;
( k5 ]) J, w0 T" j public PrintStream out; % z/ h+ o5 ?( r0 Z
private Socket client;
: j. U! P1 c9 X; }' C* T, M7 N public Client(String host,int port){ 1 c: N0 R$ `: b! R
try{ & T. w+ A- {) ?; G- }
client=new Socket(host,port); ) R" O" g9 @, L+ C
System.out.println("\n
( Y: U. U+ e, \. ?1 [' t***************************************************");
6 ^1 n4 ^, p" ]4 r' P; \& n9 [ System.out.println("\n @( Version 1.00 97/12/30 ");
5 f! `, | E. F/ x' `) w! [" c% K+ F System.out.println(" Copyright (c) 1997 2 K8 k7 S: m$ i
(Lui DongBing) All Rights Reserved."); # T9 P2 k0 i4 ?$ D9 U% Q6 K
System.out.println("\n s5 m2 X) D$ n7 u
**************************************************");
5 K# z7 e" _1 X1 d Y System.out.println("\n Client socket:"+client); # Q/ s* t% f& K0 X; @
System.out.println("\n Client is ready ! \n");
6 ?) q K& M0 S( G# r out=new PrintStream(client.getOutputStream());
& @) d) z; a, p( L/ \ in=new DataInputStream(client.getInputStream()); / T" D) [" v I$ D$ t
}catch(IOException e){ - N0 M/ Y" x- }% g' F9 D0 a
System.out.println("\n IOException !\n"+e);
/ C, T/ y- P. j System.exit(1);
, I% b, M0 ~" r* e0 E9 p: Q } 2 X0 d; @ J) V
}
2 j1 i3 o2 _1 [- h; m% E( F7 t} |
zan
|