- 在线时间
- 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 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。 " |8 M/ m# P6 \4 |
7 k5 o9 X4 q9 X( z---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。 ; X% W8 V# h, }3 t- t
9 U- T$ ~* c* t5 }---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而 : ^; c& a0 t" Z5 j B
Applet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。
- Q& b! y, j8 b% h0 V y/ L: M& u
3 B9 Z9 B# ]8 ?& z, m% Q1 k: Q---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过 程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。
0 ]6 {& J+ N! T# G2 k' B3 T# d* i" R- V4 r! ~ b2 L
---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方 法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。 % N3 P/ }* T# P
" |, E/ B! z' c3 f
---- 例 程 如 下:
+ T5 o, }, i& d) m2 c I9 v
5 K6 Q4 ~. t/ D$ `4 x: G7 U import java.applet.*;
" }4 a) f0 s5 x3 ^. b0 J/ m! p import java.awt.*;
4 R4 t0 b+ T8 p import java.awt.event.*; 9 g! T1 Q. p/ p
$ B5 |7 B6 b7 t+ X- \( w1 ?
1 W' P+ x# A) m2 P- @. {6 \ public class Example extends Applet implements x5 Q3 n$ V/ y% O( q
ActionListener{ // public static void main(String[] args){
+ E% j N: l6 N! f, k/ N Frame win=new Frame("Example"); 1 S* [: L0 \* _; `0 x
Example example=new Example();
& S5 n* \3 R% _ win.add("enter", example);
& {9 q8 s3 N' b, t; W3 j. h example.init(); // win.setSize(600,360);
$ \. t& p5 Q4 a7 @$ P6 o win.setVisible(true);
1 f6 [# P1 l* N5 X) h" q } 6 e' d( ?1 B$ v8 Z6 C9 ~
public void init(){ // Button button; 5 [. \' i+ \3 k
Label label;
8 l5 l4 e/ e6 N4 g0 \0 }7 e button=new Button(" OK "):
# ]6 e/ B2 U" b button.setBounds(280,200,100,20); , s: ?9 T1 ~1 T1 r1 ]( N
button.addActionListener(this); 7 [$ D7 x4 v c s% i
label=new Label();
$ U4 T$ L; B" p& K) b' `' z4 e label.setBounds(260,100,200,20); * i2 Z# b2 c0 O9 D/ F& M' v4 ~
add(button); z8 K2 @9 i/ p" P! J
add(label); : [0 I: v: s* s7 G8 x! E$ V
}
: E7 E4 A2 E/ G# f public void actionPerformed(ActionEvent e){ 3 e3 Z5 Y$ T0 M! k7 [/ k
Object source=e.getSource(); 9 }- I1 j4 ? K4 A- D6 e
if(source==button){ & K- W. j6 a- ~, @' Z& [/ x; N
label.setText(" It is a example !"); ; w* K" k! Q4 R. _/ F
} ! w5 z' c; _$ Y: w6 W7 g; Z
}
! w. W) l, v: ?7 D; y3 U$ T5 A& D } % K4 p* Q+ a0 V& E( }
* b6 r" K: e# O, D4 d---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。
- |7 h: b3 Y* i2 T+ y
" I$ W" f- S' W---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作 为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。 7 l$ B2 D% {1 p) m( B( v+ V
6 C; v' a. v8 p2 A9 r7 A---- 2. Java 中 的 发 声 提 示
" w6 N# U4 J/ |
" b; t" c7 W6 g0 V7 w% h5 y8 ~3 _---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。
2 V; Z+ H- j [& s1 b
# R9 R2 R& L. q5 ~* N- n---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下:
$ c9 N& O0 j* E+ K3 @1 L( C, c/ X/ O8 D
AudioClip audio;
6 O4 [5 S% k4 M8 {$ Z audio=getAudioClip(getCodeBase(),"Hi.au");
! V! \/ |. a3 h4 W audio.play();
+ }9 _/ k- {) p6 N; S
) P6 Y. s) z+ ^; D# [! A---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取 得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能 在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能
8 H" c. T1 }3 e; f- J够 被 调 用 的 。
* I; s$ {$ c* W7 k6 w
: \1 r) _/ r5 O- v ]---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ? $ i4 o$ ^* J. Q" U
1 Z: c0 j: G- n! a& T: A---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。
' R+ I, B) i' i! C$ k6 [- H9 |1 \1 R Y: F
---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实 现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。
1 c1 T0 \! A8 C. D# t0 t! P% I- [1 ?1 x4 L- T2 t) z& H" @ ^
---- 程 序 如 下: + g. Y6 z3 S. i1 G% y
/ Y6 n5 i" }) D0 f* w r, ` 服 务 器: . l: O' ^* q! T3 ]6 [: J
import java.util.*;
8 N8 O* n& ]0 m) M% M/ Q! qimport java.io.*; / S' ~" }* K8 g( O$ w1 S+ a
import java.net.*; ' F+ u0 N+ o" u+ }
import java.awt.*;
+ f' U8 P. i) A( ^- V5 B1 Z' C& Y# |6 `
public class ServerT{ ' O3 e& d4 ^( l) V |: z$ l1 V
public static void main(String[] args){
; W$ F0 w. o' C; f( h, G Server server; 6 l, H* e$ u& ^2 T8 R# n
String clientRequest;
- N) v. B& s O# R! _ boolean quit=false;
$ f3 s) Z/ [) C server=new Server(8001);
d! J7 ?6 V. X {6 q while(!quit){ - \# i' q4 s# `+ x6 N8 H
DataInputStream keyboard=new DataInputStream(System.in);
o- B' l0 O& B1 Z try{
2 F0 {9 J9 b9 Y, a1 `# x5 k0 [ clientRequest=server.in.readLine(); 7 U2 q7 ?$ I2 y8 T9 q
if(clientRequest.trim().equals("CLOSE")){ 3 [( X& [6 h8 y5 Z, B" i4 b
System.out.println("Client says: "+clientRequest);
0 V, X7 S) L7 L0 p, L& p. ^* a& z System.exit(1);
+ y O- S% l* c8 e6 ] } 4 x- r4 Z8 q! R9 Z1 j6 F3 E
System.out.println("Client says: "+clientRequest);
8 f2 N1 t S/ |" A' z2 W) A1 b server.out.println(keyboard.readLine());
$ u7 B4 B/ n5 t7 l; R& p, y/ }* G* V }catch(IOException e){
: p; T9 J7 A; q System.out.println("IOException in server.in.readLine()"+e);
9 X5 k- f5 c7 G7 A. l5 D System.exit(1);
% U8 I( H4 Q1 y' I x' W3 | } , f7 f# K; k! z9 I/ D- J
}
7 ^+ Q7 i/ z( T5 b$ r+ A } / Y% e O: T( e9 [* s/ h
} . n9 Z9 _- c6 _7 F$ a9 x
class Server{
# @8 a3 x" g& i2 y4 J3 j1 c private ServerSocket server; % h7 m. w4 s+ G9 p) D6 m
private Socket socket; 5 D; M. f' e6 N/ I5 n0 z
public DataInputStream in;
; u9 s1 i4 T7 p) s6 @6 x' u$ x public PrintStream out; ! D# U. |0 y) a. q# }2 U
public Server(int port){ ! q, s9 X0 d5 S
try{
o8 i, R* n- t; a server=new ServerSocket(port); * {; {6 l8 L8 o1 J3 H% ^( }5 S
System.out.println("\n # q: F3 v! f9 p: z8 A% t* j5 M
*************************************************");
9 t) w% K5 ]4 S( @ System.out.println("\n @( Version 1.00 97/12/30 ");
7 q* F2 E- X- s# X% w System.out.println(" Copyright (c) 1997
; V$ W, |; g# ^ (Lui DongBing) All Rights Reserved."); 0 K& U1 A; V/ F+ V- G( K
System.out.println("\n : ]/ @6 V: t. T" V
***************************************************");
) `. v! m, M0 Q" ~; n1 _6 V System.out.println("\n Server is: \n "+server);
1 u, @& B/ V1 x$ @; B6 S g socket=server.accept();
8 a* S( o5 c9 f& ]1 O5 N for(int i=0;I < 260;i++){ // 发 声 提 示
( N3 G% I% @/ [ Toolkit.getDefaultToolkit().beep();
; T* t. U/ b8 g# p6 b } * ^" m$ O, J( Y8 \* {6 k
System.out.println("\n Server is ready ! \n");
+ J# X4 C) m3 y; e. v in=new DataInputStream(socket.getInputStream());
6 n: k$ J0 B" d$ y out=new PrintStream(socket.getOutputStream()); , `% [! q$ g8 S$ w; j5 r' Q
out.println("We connect in "+new Date()); 1 I8 ^* ^' q1 k2 H+ q
}catch(IOException e){ $ B9 T+ b3 j! ]! d1 Z _. L
System.out.println("Server is failied !"); 7 U; i+ R; h" s* \
} * {; u w- Q$ ]' \
} # ?! B+ Y0 [! U5 O
}
: {1 l! ]- b; S' Y5 C
' P V1 O7 C4 Z9 c: } s) Z4 x Y1 ]
客 户 机 :
* _# g6 `6 `1 f0 qimport java.util.*; % f6 L* u8 W9 k6 O
import java.io.*;
+ o# C3 K2 b0 S! Jimport java.net.*; . H: ]6 s/ \+ C8 C7 F
8 x( \9 _2 [. F) s, W/ x2 `+ @+ g% Wpublic class ClientT{
5 I3 E" \1 a' e* n public static void main(String[] args){ + v, ]9 }- ` D! I, n
String welcome,response;
8 ]6 g/ o& c* q& J( R Client client; : l4 ^/ v1 |' R* ?9 a
client=new Client("202.120.80.20",8001); // DataInputStream keyboard=new DataInputStream(System.in);
0 O( }/ c# A( r; T ?! E8 t* r) t boolean Bye=false;
% |5 ^+ r+ O3 H4 \/ [, ]4 e while(!Bye){
$ ?. d# V. v) q try{ , C# ]- c9 T) k
welcome=client.in.readLine();
. I |9 f% B' m i9 c System.out.println(" Server says: "+welcome); ) N# ]! m1 I, T" |* F; [
client.out.println(keyboard.readLine());
8 P9 a1 Q1 ]" K, B, N }catch(IOException e){ / `+ n' J/ x, @; f
System.out.println("\n The talk is CLOSED !");
2 ^$ P0 f/ y3 r" i# B( E System.exit(1);
D3 b4 Z4 E7 A0 ?5 U6 E }
8 P, _# O: x% s8 n( l }
# r. Y. M5 u; x0 x2 s' S3 }0 z try{
0 l1 H+ M0 h. ]% P Thread.sleep(200); " k8 B; I* U; f9 j' u
}catch(Exception e){ 4 p) V3 Q7 ~4 `9 q$ O) \) r
System.out.println("It is a bug !"); x! t f/ n# B$ j2 p
}
1 X8 M& T5 Y9 G$ g' R }
' ]4 S1 \8 C* q) i5 d}
' l4 h4 w# s% Q" G7 I$ O" [class Client{
: _# {+ p! _1 V5 y: H1 n public DataInputStream in;
/ E- \. @4 \5 Z/ p" a1 T public PrintStream out;
. v' G+ ?, g. ~7 `; |" ?$ r$ c- l private Socket client; I1 O9 S4 R0 t) l+ _
public Client(String host,int port){
: ?3 G ], X$ v% O/ c; n) `5 O try{
- I; k( s( E/ r# F& Q. K+ E client=new Socket(host,port);
- a9 S. r. P" g1 H System.out.println("\n
9 Z& W4 e7 ^2 y& t/ q* u% r***************************************************"); 5 d8 z2 C* Y u7 t$ u
System.out.println("\n @( Version 1.00 97/12/30 "); 8 I1 Z) U6 ^. @+ l! {; N0 u$ B7 s
System.out.println(" Copyright (c) 1997
$ W' N% E: @: d- H) C0 E0 D) s (Lui DongBing) All Rights Reserved.");
6 b4 a9 d: Z% l5 y% |# o System.out.println("\n 2 C n, t8 N$ [! t
**************************************************");
4 k f6 T. `7 W0 X9 _ System.out.println("\n Client socket:"+client);
- ^$ O& ^; J: U& u6 ~) u2 y* R System.out.println("\n Client is ready ! \n");
, F4 i% c: Z; N, ? out=new PrintStream(client.getOutputStream()); 3 l- P4 M9 b3 F0 j9 j$ {" B
in=new DataInputStream(client.getInputStream()); 0 { `6 ?0 A* n! f
}catch(IOException e){ 6 p! L$ F- {5 R+ R) e$ @
System.out.println("\n IOException !\n"+e); - a3 G* E# f$ J4 O
System.exit(1); * p# g: c J8 Y- v$ p! [, d
} 6 j% ]% X1 Q- N9 K
}
2 W& y+ j& `% u4 t) t} |
zan
|