- 在线时间
- 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 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。
' h3 ]9 z# e! c. { p* i: P
/ L8 n6 i7 k5 Z* K" B( a6 T---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。 ( c$ c- `7 z: z$ L4 z% C
& j/ F% Y/ }4 s
---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而
$ ^9 Z* Q& v+ u% }6 S x3 o$ eApplet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。
/ t2 c: R+ b# |9 X8 p8 S, z2 a0 } V+ @% n! V
---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过 程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。
$ L( A6 j1 Q3 V. Q( C k9 q$ Y- V7 I6 s' h6 w7 x
---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方 法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。 9 g4 O2 e0 E& I$ B0 q
6 n: U$ g" n$ n* U0 m$ j---- 例 程 如 下: ! I9 ~; \: J3 |) r8 c/ n
m% p9 I: `3 ? E% v* w
import java.applet.*;
. G! R. Y8 E# ?5 _$ k5 m import java.awt.*;
' U( X5 g( d @4 h# f! @7 c import java.awt.event.*; " B$ S( U* \* B, n3 X: l, G
* x: P8 R# ^# d- r7 ^& n% ~
0 b* t, Z% m- D4 r) w public class Example extends Applet implements
+ A; u! @" w1 ^/ } ActionListener{ // public static void main(String[] args){ 5 F1 o* Z5 N7 `: K
Frame win=new Frame("Example");
0 r& w' G1 T. M Example example=new Example(); 8 ^9 f1 s1 n# V2 c8 c! }8 t
win.add("enter", example);
' W, U, c @5 S8 G: ^! b; F example.init(); // win.setSize(600,360); # e7 R1 _. N" M& i! A
win.setVisible(true);
# F3 h( b7 M4 Z5 I } 4 F6 t$ i; w% U1 v
public void init(){ // Button button; 0 V$ Z v7 Q( d C/ @! u" f2 Y2 m
Label label; 5 E1 a4 {( { w4 N, r+ ?1 K7 y
button=new Button(" OK "): - A0 u# W- m. V8 z. v/ w. g4 T" I W
button.setBounds(280,200,100,20); " `. l! }/ C# @* C
button.addActionListener(this);
) P/ [% k" x* Y( G1 f label=new Label(); 2 J. B/ {7 C5 z0 v
label.setBounds(260,100,200,20); & }" [. }+ S+ t* \) D4 G% e
add(button);
) G- B! g {3 Q$ ^' ~$ P add(label);
6 C4 {& P8 G3 F" ?: ?/ k# r } 5 g. a1 E6 w" h* P3 r, [6 b1 Q
public void actionPerformed(ActionEvent e){
# W2 \$ s4 Q; v( c! k6 y, G Object source=e.getSource(); 4 F. x$ s% D" J$ Q
if(source==button){ Q! X( @6 R9 e6 ~% A; K$ L8 J
label.setText(" It is a example !");
" Q5 {9 z$ O" ?# n3 f6 R } 5 ?7 T! [& h/ `3 R
}
' H9 i# z6 K; ^ } 0 E( R6 T/ X+ W% E
! f- `5 R: k- [6 n% ?& a---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。
/ C" n& ?" ^ E% l) ^
5 {8 ]. ?% I# D/ a4 f---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作 为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。 % n4 ^/ [. _+ N$ ~0 X$ a. Q; F
$ z% a5 x0 }+ ?7 O/ n& K
---- 2. Java 中 的 发 声 提 示
( e- B& r3 I9 V6 o/ f6 E
4 o) m) R7 A8 j0 ~: Z2 B* f---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。 1 l& G$ T0 p8 t9 Z3 I
, O' C# Z0 p$ |0 `---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下:
7 m1 V+ Z1 S) h& p
7 @+ E+ S, f6 G" ~0 ~ AudioClip audio; & \, D: \; A, v
audio=getAudioClip(getCodeBase(),"Hi.au");
6 k- }0 y+ o C3 N$ p' p( S audio.play(); 2 t8 y' q# X8 d) i/ C
" j" Q2 P- U# e' n; i0 `. S
---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取 得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能 在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能 1 w0 P! b2 d7 O3 Z! R6 Z( P, n
够 被 调 用 的 。
D+ s( S( f9 T
7 h. ]$ }5 Q/ b% `---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ?
5 y `0 U% M6 N9 ~( ]) f# a8 E; c# S; Q$ [9 Y
---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。 ) q) W# D5 v/ c4 R6 ^/ B& T
$ C2 Q% L, ~9 C6 u& y. s* B---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实 现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。 0 T* G( N5 u4 m, M* |
" `) Z. @! D9 i( g---- 程 序 如 下: J" K. Y* W+ m( z8 ^* ?, ^
7 ?& _# s% ?) _# R 服 务 器:
5 `: m0 L- Y! W5 [) B7 A6 |import java.util.*;
9 H1 R; k7 Z- h0 V0 t" P# mimport java.io.*;
$ c7 I! z% S z, dimport java.net.*; 6 @& ^3 ~7 r# W
import java.awt.*;
; c. B; d0 A k1 V2 O8 W1 a. a# R+ d6 r( ?
public class ServerT{ / F4 C8 J1 e, e+ Z3 H6 C
public static void main(String[] args){ ; t; h2 ?+ B- x+ N
Server server;
; J+ d3 |/ ^& h+ f# w String clientRequest; + E1 v/ j2 z! T" [% X
boolean quit=false;
0 F: w8 h" e' ? server=new Server(8001);
8 j# q4 j5 p5 h/ ^" m% p6 Y S while(!quit){ 6 k9 ~: W/ X6 g
DataInputStream keyboard=new DataInputStream(System.in);
- u+ v7 k) b; q! A9 k" M try{ % f$ o* Y( [7 y Y1 r- a1 `& ~3 j4 ~; k4 E
clientRequest=server.in.readLine();
/ u6 b: l+ T) @: E if(clientRequest.trim().equals("CLOSE")){ 1 _" T% D0 u1 H, h i
System.out.println("Client says: "+clientRequest); : P1 @& l6 |; H7 h4 H
System.exit(1); 8 s/ a9 g Z( b. B0 h# L( k! J7 Q
}
1 e8 T+ V3 Y, s System.out.println("Client says: "+clientRequest); : O( {+ H& x7 o, M O1 S$ d \
server.out.println(keyboard.readLine());
) Z$ o& `1 e* y8 A% Y }catch(IOException e){ ! @2 d" O8 l3 |
System.out.println("IOException in server.in.readLine()"+e);
4 u2 u" y4 h6 e- L, t System.exit(1);
' w- b; F- h. j/ X. S } . d9 g5 ]1 ~; w, _* M7 s
} - d' y. M; `1 p1 F" `' {" r+ h
} " l: V( d- V, R6 [% e. U
} 8 K+ s, u" x) ]3 h. R; [- Q. \% K8 K
class Server{ & i3 R" F% e4 _ m
private ServerSocket server; ( z9 W2 ?" }" I4 u- T( t
private Socket socket;
5 j3 r3 f* H Y( P public DataInputStream in;
' d7 _1 `1 k& j public PrintStream out; , \. q6 x- p0 C K5 F+ |
public Server(int port){ ; _5 F2 `1 c, @, J6 K
try{
! ~0 z$ H# E9 n: K& f server=new ServerSocket(port);
8 p! V) u0 d+ |% E8 ]' _1 `+ h System.out.println("\n $ @5 X3 z2 F8 x
*************************************************"); 7 M7 n% B0 i- M& R' R- }9 Y/ s
System.out.println("\n @( Version 1.00 97/12/30 ");
6 j$ m( Z4 h7 d' t* ] System.out.println(" Copyright (c) 1997
' `& H! w5 j) S/ |7 ]$ x3 l1 O (Lui DongBing) All Rights Reserved."); 6 ]( N# d7 u& r6 O8 \) E& u/ a
System.out.println("\n ' z7 S" [; P$ y9 V! e0 {
***************************************************");
# c0 P2 Q2 l6 w$ T6 q System.out.println("\n Server is: \n "+server); % b, a6 c/ `: `& f
socket=server.accept();
9 b8 v; r6 A& l6 l" f for(int i=0;I < 260;i++){ // 发 声 提 示 % S6 t) Q3 }* Y$ G: m- |0 E
Toolkit.getDefaultToolkit().beep();
0 ?" T' ~3 ]0 q$ x }
1 X. a+ S$ K+ Q& X# [& D' ` System.out.println("\n Server is ready ! \n");
3 l" c7 w8 E) O4 o in=new DataInputStream(socket.getInputStream()); 1 q" Q) V$ u7 B4 g: M6 w- n
out=new PrintStream(socket.getOutputStream()); $ U2 l( r7 Y9 e& w0 T
out.println("We connect in "+new Date());
7 K2 V0 ]* ~) N& W5 o% f* ` }catch(IOException e){ 3 {' B w% {) Y( g' }4 d4 A: A9 j6 y
System.out.println("Server is failied !"); ' I; s% k" X+ Z! {: d: v" W' A
} B0 b1 @+ M: i7 I
} 3 p8 x: y* @. M
} 9 X* S" C W& _1 M( w. x+ N
$ J& p4 r/ L( T
; U; O$ m+ p9 ]' ]6 b" }, _& }, X' v
客 户 机 :
; C! `, e4 i4 W: u/ m2 f. ximport java.util.*; , g: P$ \" r5 }( i0 U5 Y
import java.io.*; + S o1 k! e% i
import java.net.*; " {9 b8 z5 n+ F' h/ q# N
% M1 r# _ ?3 S' a" U3 Mpublic class ClientT{ . N0 b# \% q2 H+ d
public static void main(String[] args){
8 `' p% V" l9 `7 u, K; h String welcome,response; % t" |" g: N( G$ x
Client client;
3 x! A& B: h4 @; F- H- }. J client=new Client("202.120.80.20",8001); // DataInputStream keyboard=new DataInputStream(System.in);
( {. L* n/ j _: o boolean Bye=false;
1 {9 J% G J# h& T while(!Bye){ 9 H) @* S) P% g0 F
try{ 7 l- G& n: X. E7 J) g& n
welcome=client.in.readLine(); 2 u5 J& ^- t9 z3 s
System.out.println(" Server says: "+welcome); ' e$ R- z5 T) k7 B
client.out.println(keyboard.readLine());
|+ [0 C& \' j6 s4 s }catch(IOException e){ 5 L# g8 I9 }9 X2 d# K/ G
System.out.println("\n The talk is CLOSED !");
* r6 r& F( Y# ?* [; q' o System.exit(1); - P" E) q3 t5 s: [$ F8 g4 \2 {5 q/ r
} 0 V3 C- y2 P1 x/ v
} 6 q/ t1 H7 m, D$ H, r
try{
" t; N7 Z, X8 U3 e& l) ?; R% D Thread.sleep(200);
8 \0 w5 f( h" d5 q4 X }catch(Exception e){ 7 e+ r" R7 Y! ?2 J- {8 Y* j
System.out.println("It is a bug !"); ) e# d1 { I* L8 Y! H K
} R8 y) _& b% ?
} $ o) x. ^, C+ a x5 ^
} % t& F$ w0 s8 W* c5 V
class Client{
) C4 o9 g: r, s+ c public DataInputStream in; ) L) t9 z. M! x; N
public PrintStream out; : |1 x9 |6 Q7 p" x6 G* G
private Socket client;
5 \" I' e9 l( l1 C/ `' V public Client(String host,int port){ : [5 s( j9 ]& Q+ S; g: _/ ~
try{ 1 t1 z0 s+ _3 w' _
client=new Socket(host,port);
1 V- G# r: D, b. p' Q c System.out.println("\n d3 g1 x4 U. K
***************************************************");
6 k2 z% F; i: N" j6 I8 x4 S System.out.println("\n @( Version 1.00 97/12/30 "); - p l6 j* g5 z) U8 t# Z$ V
System.out.println(" Copyright (c) 1997
( r s# L7 \. E/ I& [5 d& \ (Lui DongBing) All Rights Reserved.");
6 }) x! o# ? A0 ^) _ System.out.println("\n
2 @$ S+ s. e3 M. {5 d4 f**************************************************"); 4 E$ b; v3 S8 q: n1 d2 v' s" E
System.out.println("\n Client socket:"+client);
. ~. C& H& Y8 J! V. @ System.out.println("\n Client is ready ! \n");
" D- ^ v5 R3 G: C- h6 q out=new PrintStream(client.getOutputStream());
. o7 k3 O8 D* T( q* z& h! g in=new DataInputStream(client.getInputStream()); " |: s& r& d' R: b, E
}catch(IOException e){
0 H1 ]( I5 W4 Y System.out.println("\n IOException !\n"+e); ' O+ i' u; s1 F0 q, s6 h5 J
System.exit(1); 6 j) U" \8 G/ B' g1 }: |
} 4 L" Y% D" X) i( o2 p& A
}
9 \$ \% U4 g( r} |
zan
|