- 在线时间
- 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 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。
* I) s2 M" ] Z3 ~
% f1 Q, o& D2 E2 H V---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。 ) I0 l* J4 K, P
7 I- q& C1 A7 s5 b3 |# w---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而 ' o8 Y$ K; \; w. A! F8 V
Applet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。
, O- ~; X6 f4 j- {( S* r
/ U0 Q6 c O0 C7 o- w% ~---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过 程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。 ( D7 X! p& u: T/ Y0 |5 E
1 ?7 I8 ~/ w( T* J- K1 A: v---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方 法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。 A C! T) W' |8 F. O' P' ]! a
7 ?& K8 K1 R0 W; `+ B3 M! b
---- 例 程 如 下: 0 _* j! R- V4 N1 v# _" \
! D* M$ O6 `% T+ j1 Z0 d7 ] import java.applet.*; 1 Z/ i! p6 n l0 g
import java.awt.*;
/ o3 E$ L5 B+ U* H2 g! I3 v, S import java.awt.event.*;
: x. j* z& b0 Y 9 u. Q; f; W! Z% O: f
% p. n/ o0 y- N/ Y, F2 H- A& T public class Example extends Applet implements
: d% d V9 y! U R2 {% F ActionListener{ // public static void main(String[] args){ / c) c4 {! k. a! f0 {/ d9 p# n) O
Frame win=new Frame("Example"); / q0 A; B; G( D- b0 k. U% n! ?
Example example=new Example(); 7 V' O; O" p4 [" g v
win.add("enter", example); 5 b6 z# M) o) o a* i2 k
example.init(); // win.setSize(600,360);
8 e7 b$ o2 Q) R( I( g; k# g" c win.setVisible(true);
7 ~3 Q- d3 X& t3 Q4 q. o+ `9 R; e/ b }
& H5 u% j: h& n [1 r* l public void init(){ // Button button;
% [4 t" D, ^& d4 e3 L, @4 g Label label; ^% r6 n6 t1 K
button=new Button(" OK "): 2 t2 D& _2 t; r$ R9 T2 [6 o
button.setBounds(280,200,100,20); 3 Y8 g4 S# i9 M# }( z6 C
button.addActionListener(this); ) N L0 U3 o# z+ p8 ^4 o" T
label=new Label(); 3 I* I& d4 X9 h( J0 c
label.setBounds(260,100,200,20);
3 u- \4 v5 E0 i5 g7 `- e add(button);
% _" l& A6 \: c8 K1 ^" d add(label);
, v, S* I/ Q# J# d1 x! N5 i } ; i: B" s3 X9 R1 R
public void actionPerformed(ActionEvent e){ " P" X1 K# A1 T7 }# T/ l1 ]
Object source=e.getSource();
* T* v- A5 E9 b5 F* D+ H if(source==button){
7 Q* X4 q+ {. y; m& d6 K6 G label.setText(" It is a example !");
- u% ^: m/ [' R4 ^4 D' H } 5 `( i1 S* B! M+ G5 B, @8 U
} {7 k7 y" q4 K6 C5 G9 i
}
/ L: L1 }0 j8 X4 V$ T. L. b% O% E
8 D/ z" A: g# \) o---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。
& Y! u3 p. }: u! ? t& s$ [
- i, @0 Z9 z( |( g: h6 M2 W# m+ H1 X$ ?6 B---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作 为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。
. Q% j1 f2 m5 F {$ }% Z4 P) _. q3 r! L, H! I, k
---- 2. Java 中 的 发 声 提 示 + w" [2 R6 |$ x$ h8 |0 ]& K6 a& ]
- u |+ q% U- C---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。 & c \( `7 C8 Q: V. K% O! a
; F; Y* g- m6 T0 M: d; n s
---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下: $ M* p0 N+ o9 ^4 A# o: S& d9 I
: m* V" K E6 [) h! u7 n
AudioClip audio; ( v8 t& ]6 J6 R' ` L
audio=getAudioClip(getCodeBase(),"Hi.au");
1 v1 v/ L& c! k6 I4 _* D audio.play(); & }- \2 U8 z* c9 h# d2 O: n- ^
4 C; q1 U7 f8 v( T---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取 得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能 在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能 * u, d9 i5 I+ L8 `
够 被 调 用 的 。 ' b* g' Y6 e3 T8 N
+ e( A# [3 ?1 u" |, q3 M
---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ? $ K* Q* P3 O% ~! Q
' i$ v- K3 L4 S' w---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。 : u3 g# d1 T4 W5 @4 H
" r: m; U1 k+ ]2 A" k---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实 现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。
+ h* i6 @$ M7 w. @+ L% E
7 z' L' K6 V0 C---- 程 序 如 下:
* L x& Y* w2 c; `# r2 j! b6 ]' x+ m
服 务 器:
7 b* u4 z$ s. Z6 w0 _import java.util.*;
, u7 v8 q% m6 uimport java.io.*; 2 ]$ ~5 K6 l8 I. r/ \
import java.net.*;
, M2 L+ |8 ~, u% _import java.awt.*; I& ]# {4 t# w4 Y& m; ^
1 }7 Z/ ^( o* U
public class ServerT{
. H6 h; t: g9 D$ a5 z* {, h" ]0 A' |; L: F public static void main(String[] args){
6 O8 r! M+ Z: W5 [3 J Server server; 6 k" z( L. F5 [
String clientRequest; 7 ?; y( ` o. J6 v- p; e. E" { B
boolean quit=false;
% I2 f' W4 l; g9 t server=new Server(8001); 7 v+ v5 g& M: ^4 Y) ?" f
while(!quit){ , Y/ _# _' F& E1 P2 c
DataInputStream keyboard=new DataInputStream(System.in); ! _/ q* U$ X5 ^+ p- F B
try{
+ ^9 V2 x2 C4 Q0 f+ y clientRequest=server.in.readLine();
6 [ T2 y5 s |4 X if(clientRequest.trim().equals("CLOSE")){
( h* E/ } y1 O: d) g System.out.println("Client says: "+clientRequest);
& Y1 p5 p# H! p: z System.exit(1); ! K1 g1 P) e, m& M' k: J' ?2 F
} 7 Y- m, t, w, X5 o3 y3 r, i$ k7 k) v
System.out.println("Client says: "+clientRequest);
0 `' o B3 P0 ^3 f4 S2 R: u server.out.println(keyboard.readLine()); $ z/ o1 V! Z- v. B, E h. m
}catch(IOException e){
: G) r: y, Q- H( A W System.out.println("IOException in server.in.readLine()"+e); * B$ T6 Y% M, y
System.exit(1);
. Z( f3 V$ l( i- s3 _% `. d } . F$ Q8 @2 }& g* l0 ?
} 4 q8 y1 w! \% q
} , F7 N5 Q: S+ z
} " f4 v1 w" p* T: w9 k
class Server{ . ~. l' q7 W6 ?5 j6 Y7 ]
private ServerSocket server;
6 ]! F1 b: g0 H private Socket socket; ! T" T; @, l9 N* H9 `* o3 I" g! b
public DataInputStream in;
5 `0 g) H( r4 E ]# ~( Q public PrintStream out; 9 t1 E' l" G" r! L6 r I6 h
public Server(int port){
! g! g; O- c( F( y1 P try{
& c# \6 [0 P$ m server=new ServerSocket(port);
4 p7 p1 s* w0 I( [4 t System.out.println("\n , q) h/ l0 @2 n% G; _; _
*************************************************"); 6 B/ L, r# n9 [+ f# J4 z M* x
System.out.println("\n @( Version 1.00 97/12/30 ");
3 B6 O5 t4 {' E( w% t% b System.out.println(" Copyright (c) 1997 * g+ ?) k8 f) E( a" Y
(Lui DongBing) All Rights Reserved."); 5 d& p& B3 i9 b+ y- ]/ o0 @
System.out.println("\n 5 ~& x( V4 W1 b
***************************************************"); & H* Y- t: M$ d. E/ k
System.out.println("\n Server is: \n "+server);
! `, \# \ R+ W$ w socket=server.accept(); 1 R# |4 E5 o- V* { c- }0 ~
for(int i=0;I < 260;i++){ // 发 声 提 示
% M& U1 \& T/ j: b- w2 i* w Toolkit.getDefaultToolkit().beep();
; _& o5 @$ L+ k }
# _; c! n* I* h5 d# M) v0 X# m System.out.println("\n Server is ready ! \n");
0 l ~% N# u/ k$ o% ~# e0 d- g in=new DataInputStream(socket.getInputStream()); " r) D3 \, d: g
out=new PrintStream(socket.getOutputStream());
% \- ^+ l, f* s* J out.println("We connect in "+new Date());
9 v8 b& v: t: i* D+ o, Q7 P& p! O7 U# _" o }catch(IOException e){ # ~) m" w1 M8 e" a+ A" ?) E
System.out.println("Server is failied !");
2 N4 `0 Y8 x: c) V3 k4 e: P+ V } " w5 ?9 S4 |$ ?! u9 ]! n, `- ]4 a% S* B
} : A% V) |& Z$ |0 ^& P' G8 h! {0 D
} 2 w7 Y7 y( C) \; D% o1 n
3 P2 H, o* ~2 U9 e! D9 N+ g J G2 A7 i( X0 w0 q3 c, W O
客 户 机 :
$ r" W7 @. F0 d/ k! Aimport java.util.*; ! y) \* D' g+ n& G
import java.io.*; 1 `: c* \7 _. o+ ~1 [$ \
import java.net.*; * q9 i6 P! v6 i' _' U
+ d$ a" k8 R d7 V$ g" {7 G2 T- _public class ClientT{
- @9 g. v; `1 b3 [( H9 N public static void main(String[] args){
' o! e& C% E+ U) @. M1 y7 I String welcome,response; , `; K, F4 T4 s+ [2 }3 l, \5 \
Client client;
' L9 B* y+ ?) D% P" D# A+ c client=new Client("202.120.80.20",8001); // DataInputStream keyboard=new DataInputStream(System.in);
6 K% g8 i8 i; W: C" b4 [8 V boolean Bye=false;
1 \% ^" N4 P, |/ z1 @7 o: V3 z while(!Bye){
3 V8 \( _- G; i try{
( ^+ T) S; i! [ welcome=client.in.readLine(); 9 y1 c' Q6 T! L4 L" G! ~* X: P3 i
System.out.println(" Server says: "+welcome); ; d5 f0 x0 s2 P3 m4 k
client.out.println(keyboard.readLine());
5 S" h* s4 K) C5 L }catch(IOException e){ 5 j$ l4 r: k( O A$ Z- ]5 O2 s" K
System.out.println("\n The talk is CLOSED !");
1 Z5 i8 y* F) p, e System.exit(1);
i) s Z" C9 v* a- m/ a* U }
, N/ Y6 x/ J( ]! ^9 b0 t$ F8 X# K0 A% K } , @8 O8 D0 x4 H$ K0 o( t
try{
' X" D/ a/ [2 Z* w m4 z7 G Thread.sleep(200); 8 S, d3 N8 w3 K
}catch(Exception e){ : M9 ?$ j( G% n5 w
System.out.println("It is a bug !"); 0 g' _* e& C4 [4 o, f! X2 i7 r
} / l* c% V! d* b# x" {, X2 g
} " |" [) A* a& K2 O3 M8 r
} 9 C/ o, Y. U$ j) O7 O4 l) {
class Client{
/ L* Q$ v8 B- d. w, u public DataInputStream in;
0 n9 q* C7 W7 X! K7 D$ A' ?& N* V public PrintStream out; 8 T3 g- ~& ^- J/ k4 Y; A, `4 Q" A
private Socket client; ' F8 g2 X) y- x1 O5 p1 A! A7 t& x
public Client(String host,int port){
1 a( m2 T3 i1 z$ W% { try{ 9 k" c' }5 A8 Q+ c' e$ x; Y
client=new Socket(host,port);
+ m( t. {5 b$ M$ [ System.out.println("\n . f( F7 l6 ^) p: X
***************************************************");
* y( |! F" p7 h" `( D6 g: U( B3 w/ T System.out.println("\n @( Version 1.00 97/12/30 ");
, B$ g: {8 e; e, x7 ]( w# m9 Y' Y. L System.out.println(" Copyright (c) 1997
& N* Y. H4 S1 R9 N/ E* j, M% m (Lui DongBing) All Rights Reserved.");
A; h5 f# l5 T/ { System.out.println("\n
0 L+ y+ V( d* c0 Q8 v; p7 o7 x**************************************************");
0 M$ a: Z. {, w. ]3 F' D& K: U3 z- H System.out.println("\n Client socket:"+client); 9 V& g) a) g0 }% N- ?* {' G
System.out.println("\n Client is ready ! \n");
3 N. A* x+ U R- b' L8 v out=new PrintStream(client.getOutputStream());
1 X& [ a" Y9 D% Z* { in=new DataInputStream(client.getInputStream());
9 c U/ F M) P, n5 H# X( [! r }catch(IOException e){
; B- p Q. K6 v) t6 r& b System.out.println("\n IOException !\n"+e); " M: ~4 E# o8 ?5 ^
System.exit(1);
% i5 s: k! v) F }
0 h1 D1 I6 A: k: m } ) n {& [ w7 P1 O; u1 \
} |
zan
|