- 在线时间
- 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 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。
. @/ Z; U% ^8 O4 [7 y! u2 l+ g3 N
$ s7 i8 \# F: a---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。
) ^% [0 \2 q; X9 W y
) y6 B" u# u" F% H2 }---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而 , c) S* S( Z; ]7 F) \9 l, o( L
Applet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。 8 G) `8 ]% s+ Z- w+ b) G# k' s
3 c2 G% R' V T0 h# g% {
---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过 程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。 0 W" v8 X0 ^' z2 O) b
* R4 h/ i3 E5 o- v: ]
---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方 法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。
% d# P& K5 `; ^ g8 l6 T! c
* C' e5 Q" Z. m( ~---- 例 程 如 下: * ]: P8 w7 A; ~% \3 s$ t: Z1 h2 y
" f P7 c2 S1 K- ~) |% l
import java.applet.*;
- C. I2 P) d3 P4 J5 ?+ `7 K import java.awt.*;
" l: f$ M6 {6 a9 G% d import java.awt.event.*;
2 A1 m3 `, [" \ 0 O0 [/ q+ l6 g9 H7 ?4 J& l% c2 q
, L+ j, e, ?5 U& A public class Example extends Applet implements
! m; `* `( G q$ T! M" Z ActionListener{ // public static void main(String[] args){
4 ?2 y, j4 s" R+ ^ Frame win=new Frame("Example"); % M, R' L- x% {6 O* z
Example example=new Example();
% b/ E, ~: ]' W( @9 v win.add("enter", example);
* j& e/ z) T0 P$ ?0 }: V example.init(); // win.setSize(600,360); 3 `1 Y2 `8 Y5 h5 l4 g
win.setVisible(true);
6 m: x% `, [7 T( Z$ ?; L8 s }
5 B! w% |5 F' D- X2 m6 ` public void init(){ // Button button; 1 J9 ^2 G a1 p/ ?8 H/ r
Label label;
1 _, D) z+ N: Q# q/ x( o. O2 M button=new Button(" OK "):
1 K# q N9 j4 f' M5 A5 a5 ] button.setBounds(280,200,100,20);
( B9 z9 _/ }# B- [! T t* W button.addActionListener(this);
; {6 t/ k0 m% w5 w label=new Label();
2 P5 ~9 ^2 V: ~ { label.setBounds(260,100,200,20); . Z2 A4 N3 E+ ~* n2 Y1 X
add(button);
" b8 Z0 j- B8 p8 H! E1 z5 @0 W3 R [/ m add(label); # s9 j' w. P5 A2 T! k& b6 R4 X8 ^
}
" U9 k; Z) v3 {( S: S3 Z public void actionPerformed(ActionEvent e){ 2 n9 K6 k+ _, h7 X2 E/ E* v& f8 S4 U2 U
Object source=e.getSource(); / q4 J: P! t# y4 k- Q" \. a
if(source==button){ 3 f$ P3 h6 O# F4 R
label.setText(" It is a example !"); . j. F3 [$ C E
} 5 X' I2 j# n; n% a
}
; y7 Q% i p# @ }
1 _" \- [# ?7 |( C/ M* ~$ G% p$ l% k+ r
---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。
2 X5 e- b. O, H' U& l- S
) k/ [' H0 V5 l4 A% u) ~/ l---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作 为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。 & e4 b i; q$ u! ~
9 B7 v2 |! ~+ n---- 2. Java 中 的 发 声 提 示 6 B: o p# p; `! L, P! v2 r* c
; o. J% r0 e6 U
---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。
6 m$ p G" Y9 c3 B4 w3 [, Z1 o4 Y7 u% O5 @& x
---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下: ! v/ L" d0 b( n
& d! |6 S5 O. a! [ AudioClip audio;
4 I+ n7 S4 O0 q4 Q9 C( d audio=getAudioClip(getCodeBase(),"Hi.au"); ' B" c& x- l9 E% c* c: ]
audio.play();
/ y7 w9 j1 a) `5 D! N0 K4 r* w! F3 [* X+ o2 n s: s
---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取 得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能 在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能
# ~" V) `9 W% w& T2 O8 _' T够 被 调 用 的 。
! u1 t7 S. U4 X; H3 r
, a, w& M( s- m \& o- L1 L1 A---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ? . L/ ?) t( w+ W3 v
& \0 i1 i2 n. n# u g9 \8 R# W
---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。 ( h- \9 c) G- y, r! c2 i
3 R3 v; K% [/ G; d9 j5 J. u( E6 d
---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实 现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。 * g5 t8 Z' \+ C8 y1 H: }( \
6 Y4 O5 D9 i/ f0 W- Q
---- 程 序 如 下:
. }% r0 E( Y; \- r: g+ A8 Y5 A3 e4 @. P; X0 h
服 务 器:
( D% \: B6 F ^" o5 |) H9 Simport java.util.*; 1 O1 q! U1 N; f
import java.io.*; / ^) g& S2 x- [ v& E3 k+ {( B' ]
import java.net.*;
' O2 W* r0 T) l6 V) ?import java.awt.*;
+ E% w4 }' W" H5 B3 k
l% s0 X) k8 d' Apublic class ServerT{ % l5 ^1 [0 w- [4 {1 o
public static void main(String[] args){
. n) E0 Y8 e m, u% a; U8 z Server server;
% i! Q. M* M+ N String clientRequest; # E# {6 ~4 r6 a$ T* e" b$ }
boolean quit=false; 3 f2 z* E9 ]3 S+ }7 U
server=new Server(8001); 0 U7 k6 U: c7 @5 p0 \0 K
while(!quit){
$ I5 ~+ u( h9 j1 {+ Y- W DataInputStream keyboard=new DataInputStream(System.in);
1 E, c' p0 \, D/ p/ | try{
/ ]. K& I! _ Y& F8 _5 U clientRequest=server.in.readLine();
, t+ ^$ ^$ \3 H3 Z: h if(clientRequest.trim().equals("CLOSE")){
" x8 T9 V E, N* }3 D/ \/ G/ g System.out.println("Client says: "+clientRequest);
/ d# ^* _% ?* l6 s0 C System.exit(1);
% s- M" P+ C$ a' Q }
. ~$ ^) \4 V3 t5 |) _: Q9 T System.out.println("Client says: "+clientRequest);
, V$ h" v! d( ~5 m! o0 K* G1 X server.out.println(keyboard.readLine());
; I8 y: j# ^- |; r* ] }catch(IOException e){
; M5 F" y, b) H2 o, s- X System.out.println("IOException in server.in.readLine()"+e); . u2 a3 z I* e3 ^, |
System.exit(1); ; R7 H* A4 ^$ k, E4 ], N0 A3 K% \
} / H/ F1 Z9 ~) \, ]5 S: I. V# U
} $ a4 ]* }. c) @- |1 g/ U; E
} 9 f* z! k! D) Q$ J" C
}
$ T2 t! A0 k7 p6 o: {; w: Hclass Server{
4 ]% w7 i; }/ i+ Y+ N a) f; w private ServerSocket server;
6 U1 b2 t7 E* w4 G* O2 X2 J private Socket socket; & H' v9 K$ L7 O$ v* t
public DataInputStream in; ( P8 I3 P2 k9 X+ s; j
public PrintStream out; 0 p" |) R8 w( l8 B2 [, q& H
public Server(int port){ + }% Q" g4 w4 X
try{ : H# ]6 t2 g- H( l3 q% P
server=new ServerSocket(port); 5 Q' g( o4 r) ]4 S4 V
System.out.println("\n
' ?* s0 s- T* R*************************************************");
7 O4 o4 X. D% @# E @0 f System.out.println("\n @( Version 1.00 97/12/30 ");
, E6 B) Z+ s+ D% @7 z) N) e System.out.println(" Copyright (c) 1997
9 E# R' Z$ V( e$ L5 ?$ H1 L9 X (Lui DongBing) All Rights Reserved.");
' o- K5 x! k- Y+ P6 _1 O. o1 V System.out.println("\n
, V* W* v# u5 P; C, |6 c***************************************************");
. }( x( o) E$ F* I/ z3 V System.out.println("\n Server is: \n "+server); ! t; h$ {8 l8 [- e
socket=server.accept(); ; q( U4 Q, O+ z8 N" h
for(int i=0;I < 260;i++){ // 发 声 提 示
! q# x! }/ m1 e, K- `) {5 f' @ Toolkit.getDefaultToolkit().beep(); 5 X: l9 H* _: ^6 [
} ' H- F4 Q* B, `1 A: Z; w9 c Q, l
System.out.println("\n Server is ready ! \n");
; T g) s6 E" \1 U in=new DataInputStream(socket.getInputStream()); 4 D. m. l& A. G" E1 c0 B& n5 M9 C7 {
out=new PrintStream(socket.getOutputStream());
4 k7 Z! m$ [) s) ? out.println("We connect in "+new Date());
" @) {/ y G/ V0 x* D8 h }catch(IOException e){
: S e5 h A/ [! R% q7 b, x System.out.println("Server is failied !"); 7 g1 j5 b. W) u% h# u! v
}
8 v. y/ I! S8 k, z } ! }# @5 L6 \6 }8 s4 x% d) J
} , ]' }0 y0 q6 a V) \
) P, ~, u1 O% ~+ d6 M5 g/ c, z& A; i3 t+ k2 C j3 h
客 户 机 : : g- ]# T' q( G: q! Q$ T
import java.util.*; ' I9 I# N9 r* @# j
import java.io.*; 5 B; r& ~" r }
import java.net.*;
1 @. }' l, W# s2 O. R" C! s2 J6 }
) X2 m' A7 I/ jpublic class ClientT{ 6 |/ `& U. U& P0 V0 |% O; u
public static void main(String[] args){ 8 q) b# J) x/ ?
String welcome,response; , @5 U2 U o% \
Client client; 1 f4 }% }* a K0 e
client=new Client("202.120.80.20",8001); // DataInputStream keyboard=new DataInputStream(System.in);
: Q8 W% _: p# x boolean Bye=false;
8 W$ @. O- D' L* n: Z while(!Bye){
+ r4 ~& N4 T5 G4 o, g; q try{
& z7 X9 [, Z9 Z2 n; w2 Y welcome=client.in.readLine(); 0 U; r$ v9 e8 _/ ]/ }5 f
System.out.println(" Server says: "+welcome);
" U6 o+ U" {$ y! I J& c* y, ~ client.out.println(keyboard.readLine()); * J- P' N) u' S: }
}catch(IOException e){ ! K4 v( a) U1 G) V
System.out.println("\n The talk is CLOSED !"); / Y0 A( ?: g# {" |' ~/ q5 B" j
System.exit(1);
1 T' t: b* R6 Q }
1 J! p4 p2 D4 z. V4 @4 ]" I } 3 C/ L/ d6 Z0 E# h
try{ 4 s* Y8 T0 {% Z h* I
Thread.sleep(200);
3 e. ?) b, q# k" z( O: a0 z2 p }catch(Exception e){ 1 D1 H2 p, S3 B5 D/ t9 O. h
System.out.println("It is a bug !");
7 ^! h: X8 M2 w( v* y4 P }
0 ?& O# L+ ~9 ]! @ } $ o: H! Z( i& O) x7 w
} + V3 O K" w( D: |
class Client{
: Y+ Y: O& C/ K9 x public DataInputStream in; 1 z, {8 N! d: I( o8 o' a
public PrintStream out; ) T/ c# z, N- G- c3 u$ u
private Socket client;
2 }% H7 D" e2 C5 V5 @) j public Client(String host,int port){ . h& F4 a3 _$ j+ K4 s8 _( l
try{
: `& e; t$ ~, D4 ] client=new Socket(host,port);
& }9 l: q) ]% k" e System.out.println("\n 2 z3 Z- W: _8 R0 Y( }
***************************************************");
0 p; V. ?3 | N5 F System.out.println("\n @( Version 1.00 97/12/30 "); |! Q# v/ K% e$ [; [+ l/ [
System.out.println(" Copyright (c) 1997
5 |* L4 {7 c- z3 Q( B (Lui DongBing) All Rights Reserved."); . L) s p; r+ S% d; c
System.out.println("\n ) b, U4 x; R% Y6 A0 u# { i
**************************************************");
- y- {/ F- Q. c; z4 @6 l System.out.println("\n Client socket:"+client);
8 J+ r& R0 r& k7 U, Y System.out.println("\n Client is ready ! \n");
# s" A+ Z" Z; ~: `8 v8 O7 { out=new PrintStream(client.getOutputStream());
5 p: m, l: U* }5 M+ G) ]/ P in=new DataInputStream(client.getInputStream()); / ?( k% r6 W4 F4 G# }; E
}catch(IOException e){
. O: ~) p/ Q/ V1 E System.out.println("\n IOException !\n"+e);
5 i4 C, m" }2 j- t- y7 R- w System.exit(1); # T5 x+ J& J9 i" [
} 6 i3 M* |! k2 a; d0 N; s+ V
}
8 S: O. v- j/ g/ |0 y4 n} |
zan
|