- 在线时间
- 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 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。 & M. e; C" M! H: J# _! i
# c9 r1 _7 _2 S! y3 k
---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。
, L; b2 }# G; p, E8 N- G7 k" j% b6 R r. x' M& B4 x7 _" o
---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而
" p6 @! j. Z( G. z' W6 }. I* cApplet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。
/ t( X1 z/ i+ ]4 n4 c% Y. @
# F5 @2 h$ ~ d6 {---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过 程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。 s: l. M6 N. O7 I, [0 ~
' v* U* |; ~; ?3 @
---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方 法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。
$ i5 r& w2 l( {4 R& ]* A* \8 k4 C w$ U4 @
---- 例 程 如 下: $ | S2 C( g- n0 W ?- G
4 K. ~/ m4 C; O! X
import java.applet.*;
" k2 K3 }/ C! z. p* j" d `; T- r import java.awt.*;
. _! U& h- i+ U9 b, w) _ import java.awt.event.*; " R0 f3 a9 A7 A9 q+ E
1 u+ ?% K3 E" V2 V1 i5 U5 }( q h5 r' R1 k- h7 v
public class Example extends Applet implements $ r X! e& ^0 A S" ~4 P
ActionListener{ // public static void main(String[] args){ ' q) C5 ]8 Y) J; M1 G
Frame win=new Frame("Example");
; i* y2 p' l, h; F4 u% ?- U Example example=new Example();
1 E' t- }" Q- h( L* F4 X0 Y win.add("enter", example); - r6 F$ {; t( U
example.init(); // win.setSize(600,360); . _! Y8 \1 g* v X8 C
win.setVisible(true);
) j6 }3 d- ~5 D$ J8 c# V } ! h' K, H+ t8 G, O# c
public void init(){ // Button button;
( v* O( @) t, p- @! d Label label;
' P2 M, @4 t' A- A, i button=new Button(" OK "):
^; ^+ v3 Q0 B: a$ ?( t button.setBounds(280,200,100,20); 1 o5 V$ D0 w3 \
button.addActionListener(this); # g4 H7 h8 d3 P# a; V& p( {
label=new Label(); 4 T* B$ i ^+ ], \
label.setBounds(260,100,200,20);
9 c8 w& P4 j w add(button);
* U6 {: C) J) r add(label); + ?6 m0 O+ K& s0 \! [: U
}
- ?0 }# I0 F$ n public void actionPerformed(ActionEvent e){
4 ]+ Y- w( z7 r1 l Object source=e.getSource(); 8 q" N$ E8 K* v7 n7 D
if(source==button){
- v3 Q/ u5 s: U label.setText(" It is a example !"); ! g0 e& |7 k3 k4 [3 j. m
}
+ h* p6 j- X8 R) Q/ m6 J4 S9 J2 T+ a } , n5 m$ w, }- f# l5 i
} r% a- q0 c; p: L4 `
# p: Z2 r( Y) T
---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。
/ Z' f7 v1 ~, i7 i" |( H8 Z1 O3 s5 _$ `
---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作 为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。
r4 Z! T5 d7 @' f9 u( v/ U, x; G+ `- ~8 F# ^
---- 2. Java 中 的 发 声 提 示
3 o7 `% R" Z" K! d& v5 ^: I) ^
' }' R5 {3 `* D. D! @" E5 w% Q---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。
' u1 d, \' O. ~. S( a b- a* ^) F A/ z* d- }- T6 ~ n/ Y
---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下:
" U# ~( Q2 O1 p% P" d1 p& j* B& a# k ?( c
AudioClip audio; % F9 F, |. y: Q# M& i
audio=getAudioClip(getCodeBase(),"Hi.au");
/ Z8 D7 M* B7 f7 L* H/ @; [0 Z1 g audio.play(); V$ j1 X! b- b+ H- A2 b6 Q6 R
: [7 ~" D9 Z8 t/ w7 \---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取 得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能 在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能
1 e) j! @# _& ^& E, j够 被 调 用 的 。
% q9 [0 | ?; ]4 S/ n3 ?! B& Q
- a( b8 I' V. c8 o8 j! |+ T8 J" N---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ?
8 T3 b$ T2 S- Y+ e: Z
* G( X. `: c% j3 I( W$ n---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。
0 l: |: D# J a0 F: P# O* b) m4 n' `' J' c$ i5 E
---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实 现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。 9 L, Y" J4 h4 u% R( _
F) a" ?) y3 C7 l; J. _9 K& N
---- 程 序 如 下: . G- n& n( B }" ]7 Q8 t1 ]4 o7 N
4 { }1 r1 E4 b# D$ ]6 }- J 服 务 器:
7 _" A) p6 L0 R: a4 Limport java.util.*;
1 d7 o4 c4 j! R8 H [0 Wimport java.io.*; ~# N$ b8 ?; i0 X/ ~+ O
import java.net.*;
3 b* w5 s( F7 C- Rimport java.awt.*; & X [: H$ c+ [ f3 _2 z. C
* r4 M, O/ V9 L! ?% O' ?
public class ServerT{
# `2 u. j. ?2 A% l public static void main(String[] args){
7 d4 _4 v* {% T1 f6 z, R Server server;
# o4 Y# S; p: I/ T String clientRequest; ) ?# y# v3 \3 c
boolean quit=false;
7 N% b) T ]& f* v. `" ~ server=new Server(8001);
/ R$ K" v# M3 s, J" M while(!quit){
' Q+ {8 R r0 u DataInputStream keyboard=new DataInputStream(System.in); - U4 k) g; t' q* |: B0 _
try{
* q) K& j/ A' {- I( `. N4 y. _' T clientRequest=server.in.readLine(); 4 A& ], V6 G' \ c- M: W1 u. _
if(clientRequest.trim().equals("CLOSE")){ / J& |2 ^9 j' ]) o; z
System.out.println("Client says: "+clientRequest);
, _1 k& g( g! {4 \- q& ? System.exit(1); 4 f$ t; N7 S& B
}
$ r8 _4 ^1 k- o5 o System.out.println("Client says: "+clientRequest);
5 Q# e* G8 n; ~ server.out.println(keyboard.readLine());
/ {! }, P3 c; ~" R }catch(IOException e){
+ Y; f2 D9 P/ i0 B C7 B8 { System.out.println("IOException in server.in.readLine()"+e);
5 ~* w9 C2 @! I2 x+ b) r System.exit(1); & h$ T \# P& f9 |3 [; i1 u. D
} 2 U4 h; W' Q1 q- K
} ; W2 L* B; X8 Z* v
} 0 w0 B, c- E6 \
}
& V" i0 Z7 U# V3 G& z8 Q4 x* tclass Server{
4 z3 i, y0 \2 e- I6 q private ServerSocket server; 3 V. b" ~& n3 H+ c0 ~
private Socket socket;
4 f8 o. z/ L' z/ a/ ^4 D public DataInputStream in; i8 t( C/ V2 j* w1 p
public PrintStream out; $ h: l& W6 Y4 k4 j& @
public Server(int port){
. @; J3 K. O( q e' Y8 c% b* ^ try{
3 v( U( `3 G7 D6 Y0 L8 U* n server=new ServerSocket(port);
& ^/ l6 ]9 s2 c: H/ K System.out.println("\n
v u; a% b+ Z x: m/ S*************************************************");
! X! b- }* \/ V System.out.println("\n @( Version 1.00 97/12/30 "); ; l6 Y( l+ {! W7 J1 n* a
System.out.println(" Copyright (c) 1997 4 s7 D. L; ?" O
(Lui DongBing) All Rights Reserved."); 2 U1 R3 y) N/ S
System.out.println("\n
0 b# V- w% h' B3 Y. M% a8 S5 P5 I***************************************************"); # F; I' H7 O0 A( m9 k, P! E7 }
System.out.println("\n Server is: \n "+server); $ i9 p* o; r' V) f: y
socket=server.accept(); 1 C2 ^ k1 {0 @& l% S4 K1 P
for(int i=0;I < 260;i++){ // 发 声 提 示 : n7 Z# u+ f& \7 b
Toolkit.getDefaultToolkit().beep();
, N7 l8 l5 M+ G0 t" y0 w }
5 j5 C/ K/ U+ b& A; M1 H! p System.out.println("\n Server is ready ! \n");
4 Y0 k% x# ^- A: f1 y in=new DataInputStream(socket.getInputStream());
' a! [: s J3 F* m out=new PrintStream(socket.getOutputStream()); ; ~1 e* d- j4 }
out.println("We connect in "+new Date());
. z( E1 ?$ u: V }catch(IOException e){ - f- V( r$ A( }" H& N6 q$ D+ z, r
System.out.println("Server is failied !"); $ ^0 V* @ P7 C5 b% i
} ! C8 }! Q# }; ]. }& ?! d8 t# O
}
3 Q' y4 G+ G# K* q6 D2 n0 y} l. w+ @3 B+ i$ U2 x, u
" D+ |" P. Z# V8 r! g6 O
7 z5 i) Q/ u* L1 U8 N
客 户 机 :
; Y/ G7 t8 L% T& }. x# cimport java.util.*;
; s: S, d5 ~3 T6 limport java.io.*;
5 u. q: L; I9 t0 m. B% Vimport java.net.*; # Y3 ]4 e+ e9 F) [: g1 H+ h
, Y8 x7 R( g* J' q. y0 c5 apublic class ClientT{
7 z1 R: N1 U$ ~! G8 m% u4 }, _# c: r, m public static void main(String[] args){ 3 B$ e5 T5 w# y! q) T. G1 y: X
String welcome,response;
0 N2 C0 J2 `6 e1 d/ G: x' G+ G w Client client;
5 t" E+ L( M* I client=new Client("202.120.80.20",8001); // DataInputStream keyboard=new DataInputStream(System.in);
a- ~3 B& t6 G" S) j# H# K! R boolean Bye=false; 7 |7 l& b1 _* E7 R& C4 B4 C
while(!Bye){
! x$ A* _4 q! p8 w% P try{ / I0 s$ L$ N& T7 q' |) Q
welcome=client.in.readLine(); $ a1 ]( _' ?/ T# N3 |' B
System.out.println(" Server says: "+welcome);
/ v( H/ L+ J0 @ client.out.println(keyboard.readLine());
/ O& \* [+ }, E. `2 [ }catch(IOException e){ * C1 }: K# A4 [# V" C0 h! y: ~
System.out.println("\n The talk is CLOSED !"); ! V7 ^/ M3 z7 Y% ?
System.exit(1);
2 Y* U1 i7 s2 t8 a- E; W5 V% p }
' g* o, i- z: Z1 R9 j, [ } ! I- G, J7 b9 U- n& t+ I1 j
try{ * }/ U/ K, x, n9 y5 | {
Thread.sleep(200);
9 f0 }! y# z3 _! K- @) C0 G }catch(Exception e){
0 y( X/ ^, Q2 a P) l) K) C System.out.println("It is a bug !");
( L6 H8 H ~9 Z2 t/ j }
6 G* Q0 k- f: t! G7 z) V: J7 P } 4 z# K+ w- k5 _: a( A7 `
}
! L- a0 k6 e8 h2 S, a# Nclass Client{ 7 p6 x* X% h* S: L0 d1 @8 A
public DataInputStream in; 3 o6 x: v2 y, b0 c2 [/ F
public PrintStream out;
% p8 n& `! g8 l& S4 B; D) X private Socket client;
- y" j4 E E: e public Client(String host,int port){ 5 ?$ W5 p N/ P9 N2 R
try{
8 o* o1 z8 y5 s X" _ client=new Socket(host,port);
5 Z! z- U+ E2 a; n8 t( M, a0 W; z' ?! k System.out.println("\n
# E1 O8 [+ y& X( i. t7 W4 i/ |***************************************************"); ( ^0 q/ x4 N: g; C+ t; W
System.out.println("\n @( Version 1.00 97/12/30 "); 0 d4 ]1 M; W, v( s. s
System.out.println(" Copyright (c) 1997 ; I5 C* k) Z* V, A
(Lui DongBing) All Rights Reserved.");
$ t( u& i3 S, F, T, m2 A! [( ^ } System.out.println("\n
( d9 J1 d& U; ?( d8 ?' z**************************************************");
- Q3 c# s9 P6 H9 o& ^ System.out.println("\n Client socket:"+client); ) N& w, U( g' [
System.out.println("\n Client is ready ! \n"); ! M* l! R. \$ X
out=new PrintStream(client.getOutputStream()); 2 u) b% f) r2 V6 @8 g( O
in=new DataInputStream(client.getInputStream());
3 e% H' f- Z6 v5 I' B1 D3 p) N) C }catch(IOException e){
/ A5 p) C( a/ ?. K! g! U# X System.out.println("\n IOException !\n"+e); ! \7 k( R+ L) V. u- v3 W) I
System.exit(1); & _ I. L* M6 b3 D' T$ O
} ; L% Z: P9 W' k5 m N
}
7 E- X4 U$ V2 x9 g5 v9 ]5 ~8 J5 h} |
zan
|