- 在线时间
- 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 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。 5 z4 H+ i/ q& e
# P; H9 Y# D$ F6 p* e- ]
---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。 $ ]3 Q, |6 ]4 M6 _( k
! f& g/ D4 ^- b' t# E$ A---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而
# ?" T$ i" N9 K% u) e qApplet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。 ! P4 ^5 P: x! r/ n1 z4 h
/ N* M/ Z9 o/ p6 Z
---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过 程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。 ' u- x( T, Q4 O- T. o
2 {* ~$ q6 t9 h' J D---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方 法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。
# |% P: z! c* ~! Y! m
$ J, A7 v+ P& w6 {---- 例 程 如 下: 2 o6 b2 U4 V- Z! ^
9 h5 y5 G$ u$ K0 D
import java.applet.*; * w9 M: E( K, e% P
import java.awt.*;
$ V+ j a% z7 @2 m import java.awt.event.*; ( Z8 i- E6 |9 [) D9 ]) p" F
" j8 ~, @) q$ o: W; F0 D' s7 r; }$ V) k9 L
public class Example extends Applet implements
/ d& K- q# [) M2 X( X e, z! ?( h ActionListener{ // public static void main(String[] args){
! ^' ~0 u6 Q3 \& r9 d7 X$ M Frame win=new Frame("Example"); 2 c/ Y3 v$ M4 O! Y( P: W C" n( N
Example example=new Example();
! O7 C6 G; z* v; C8 |5 Y win.add("enter", example);
% E) B& a2 Y4 ]) j5 U8 o& n example.init(); // win.setSize(600,360); ( ?, \* y. s; P, T% S
win.setVisible(true); 7 r7 @' r! d& l# Z! C! P3 K2 A
} Z0 O( h; r& m
public void init(){ // Button button; $ e" n. Q3 `! Z0 M0 U* C
Label label; 3 H5 E) U+ ?9 N/ y% u
button=new Button(" OK "): ) \" R7 ~" {" e0 m5 t7 ?
button.setBounds(280,200,100,20); " [7 v# w) S1 \4 e
button.addActionListener(this); * @( d% k% ^6 T7 l. q
label=new Label();
' S7 e) B# q, E0 n! {5 @! x7 G label.setBounds(260,100,200,20);
8 d& n! N) x. X1 V+ U add(button);
; w8 I7 q, S8 S& S! v& L- C add(label); % D5 @% e! V% j
} ; y# W- }: E* {
public void actionPerformed(ActionEvent e){ : F& W* z3 h, `4 N+ Z* p5 O( m
Object source=e.getSource(); ) {# M& U( T3 k
if(source==button){ " \3 V1 X9 U* C: `# `
label.setText(" It is a example !");
, f+ S2 ?% R X }
; }# Y- h, m; @% Y( E8 U3 @0 N( W9 m } 5 T; s/ L- t% a, g ]7 H, o
} ( R! q" S& E. z: T
- U1 z4 g% U% m, K, x---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。 ! l6 E4 D2 ]) ~- ?5 M2 M7 C0 N; T; p/ o; e
4 }; l: R, L$ D. E---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作 为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。 " ]+ r, {5 r2 ~2 }3 \
9 D6 W: w" ^/ e, D) `; n ?
---- 2. Java 中 的 发 声 提 示
* P5 U$ J/ F) D7 [
; m# h0 R5 P- l: u---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。 * s( q9 E! h3 P' O x8 x) F% {- [; {8 |
5 l$ l" B- c8 @* F! ~
---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下: * ]% S* Y# K s/ s% U! t
8 K, q" f/ j7 I AudioClip audio; 6 X9 Q" g3 R& ^8 G& y
audio=getAudioClip(getCodeBase(),"Hi.au");
2 J1 {( k5 `: A0 }( m/ f audio.play(); 3 S' k/ S6 \) x, f; i
9 J7 q, ]! S7 X. s# m---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取 得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能 在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能
) ^! r/ {9 a) D3 T够 被 调 用 的 。
5 e% [ }; |5 F5 [
5 l* M! S( z, B4 z( h: g A---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ? ( y6 o) s9 A* T: \0 P$ n
$ ?, w# Z4 f6 G( B3 d4 F. l---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。 ; N3 M6 D3 d! a, S
U: r% {8 @# z- I+ |---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实 现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。
) Q$ `7 k( S9 H) u- C+ X6 `8 T/ g+ `0 ]7 ^+ B3 y4 C
---- 程 序 如 下:
2 x9 V( f( X1 K! v d: f
' {! \; e" k) K# `) T& K 服 务 器: 4 m" n4 k1 s9 \5 A8 _: N
import java.util.*; & R1 b" w6 Y; l! E e" X4 w
import java.io.*;
+ g1 J" N, k. R% S2 ~$ w3 q, _4 Mimport java.net.*; 8 o" R& E$ ^& p( _0 ]' r7 `4 L5 s
import java.awt.*;
' o) d/ m. a# ^
& S, Q2 J L6 E/ bpublic class ServerT{
7 O9 g3 A" `# K1 e3 H public static void main(String[] args){ 4 L4 Q( _0 ]# `# `7 w
Server server;
9 f" [1 E8 _/ X String clientRequest;
. D% v2 |& h. E4 K w! {! |# G( E$ G( n boolean quit=false; ! V/ |' K+ H, m( u- F1 @+ _0 y
server=new Server(8001);
3 _3 g1 Y0 X/ d while(!quit){ ( }9 _0 K" e7 Q* s
DataInputStream keyboard=new DataInputStream(System.in);
% ^" {# ~0 ?' ?/ S! y try{ + q( x$ w* z) q" z! N& ]* G
clientRequest=server.in.readLine(); 6 K4 |: M, m2 x N
if(clientRequest.trim().equals("CLOSE")){
+ G, g, C/ S6 U System.out.println("Client says: "+clientRequest); , J2 c" g# _" M* E1 y& C
System.exit(1);
1 w: C& d- p2 g' D/ b4 a } ' T6 H1 \/ B* K% q2 S
System.out.println("Client says: "+clientRequest);
8 J# s: Z( p( E" F6 Z$ }9 O+ } server.out.println(keyboard.readLine()); ' b* Q* O( L4 ?! O
}catch(IOException e){ # C" O$ O% \/ [. n! U5 z. g$ B$ h
System.out.println("IOException in server.in.readLine()"+e);
* r* h0 X& u& Q System.exit(1); 1 r1 K$ P! {& U7 ^; l. j/ n
}
; R' ?$ a, S, v$ H } 7 a d. T( h5 u% e( C3 X2 i) x
} . P3 {) U A0 G& R
}
6 \$ Q0 X+ N1 M" ^! Cclass Server{
2 i' X* i6 j. O/ j private ServerSocket server;
9 I# {" v7 s' B# n9 l( [, l1 b private Socket socket;
, J; w; d7 l% Y* d public DataInputStream in;
- l: e1 q8 g+ V! t* J( x) h public PrintStream out; ' }6 A5 H4 W8 t9 v
public Server(int port){ ) @, [8 `% ~4 O. S" f- _6 L( g
try{ 1 k* \2 ` }) B' T
server=new ServerSocket(port); 6 H( a) Z# l; V( h, A1 E
System.out.println("\n $ J N9 J% V3 z' N% i
*************************************************"); 8 X( o# j! c) v6 t) V
System.out.println("\n @( Version 1.00 97/12/30 ");
: N y7 ^0 i4 `9 X System.out.println(" Copyright (c) 1997 6 T+ u% Z2 Y7 f4 o# W# u9 Z
(Lui DongBing) All Rights Reserved."); # C3 T) P2 ?9 Q
System.out.println("\n 9 r" B- @ y% U, _
***************************************************"); * |" S* H8 P) F7 b* p% Y& {
System.out.println("\n Server is: \n "+server);
9 T; v' ?; p* ^: u, C& }) h socket=server.accept(); 9 `. u2 r% Z Z$ X/ Z+ o1 S P
for(int i=0;I < 260;i++){ // 发 声 提 示
# y5 M O- N9 N, o2 v7 w Toolkit.getDefaultToolkit().beep();
$ s! u) e8 N( h# Z3 F4 T! l0 a- y }
4 r5 H7 f2 A$ y1 l0 Z) _7 |' J System.out.println("\n Server is ready ! \n"); o, `/ ~3 E5 D2 N! C. g, e; X3 ?
in=new DataInputStream(socket.getInputStream());
. D# F% ~: V. @# M out=new PrintStream(socket.getOutputStream());
& {0 j4 ?2 T) g out.println("We connect in "+new Date()); 5 ]) y* K( R; a7 D$ S; Q
}catch(IOException e){
# j3 r' h( k8 j6 z System.out.println("Server is failied !");
Z. D% J4 M& M# n }
' F4 Q. O( k! ]! E } 2 ?$ P$ o% |2 S" R6 ]7 H/ `& g4 x' {
} 9 `% _& |, @7 S% L- @( C
! ?/ k) N1 e2 s9 P. B
+ u4 H! I n8 q6 \6 b# `+ p 客 户 机 : $ T5 p/ F, A$ d: c9 u
import java.util.*;
5 L0 D( u ]# G7 D2 P1 H6 l/ cimport java.io.*;
5 d p0 k/ l. a+ `$ Q# E Yimport java.net.*; ; I, c2 A7 i+ D% J. N3 z# @
3 W2 G' J p: H7 e
public class ClientT{ 9 \( b7 i: f3 ^
public static void main(String[] args){
7 c8 j* h, ~/ r2 W+ D! j3 O String welcome,response;
2 g3 w W! k5 u. { Client client; ; n. g: r* v# B
client=new Client("202.120.80.20",8001); // DataInputStream keyboard=new DataInputStream(System.in);
, ^! P# q' g3 @$ N1 q boolean Bye=false;
, P9 E! g' I7 ^6 g: I while(!Bye){ & Y2 v$ M+ e% O2 f& c1 M& h$ @. \
try{
4 H8 q& j9 }9 M3 ^ welcome=client.in.readLine(); & I6 p3 s* N) q/ N/ q9 f! s
System.out.println(" Server says: "+welcome); + ~4 x6 [* e- X; S. x. o$ ~( S
client.out.println(keyboard.readLine());
0 L" [: t1 P( L4 U+ k. x% g, n/ I }catch(IOException e){ 1 I0 x2 q% d& b8 |
System.out.println("\n The talk is CLOSED !");
8 {' w/ ]3 k% C$ n. d System.exit(1);
' K1 ~8 t6 A" I; g } 3 ~+ A5 D8 c" S& T( A
} * y8 h9 D# P( X. D+ P0 U) A" k
try{
' k! V; j9 ^! \% G! P% P9 ] Thread.sleep(200); % p/ ~* f. p* G- K+ h2 w" F" W! T
}catch(Exception e){
% b6 o* R# E$ I8 h System.out.println("It is a bug !"); 0 d7 [1 e9 G1 v! W: d. H
} - ?" p8 m- F1 V# n, e; s0 z
} , I# ?2 _" @. c6 e
} 3 H+ x, T8 h7 ~- r( z6 V( T
class Client{
+ j0 d* F* V+ v4 U ] public DataInputStream in; * V9 E, k3 e5 g3 x- Y
public PrintStream out; ; e& F0 Y U/ F& C" u
private Socket client; 9 t; B1 h: E s e d# m
public Client(String host,int port){ 8 G% R$ k& m+ \; X' O) u8 S# o
try{
/ y" G$ d* p4 m+ h) T& K client=new Socket(host,port);
& X4 ?. ^5 E! j; ? System.out.println("\n
" t+ k; o/ c. \& E***************************************************");
: r2 A: [3 T! R. ~5 b System.out.println("\n @( Version 1.00 97/12/30 ");
; `; z+ P! }& o System.out.println(" Copyright (c) 1997 / S! D* Q, {0 m6 t/ {4 W
(Lui DongBing) All Rights Reserved.");
8 O& J# l% \9 C2 {8 S5 i0 g System.out.println("\n 4 |3 O) D! M0 Y; }( n" d- Z4 r
**************************************************"); $ L, T1 R; i" f- Y0 k
System.out.println("\n Client socket:"+client); 7 \' {' h! @0 U- E& C9 L3 u
System.out.println("\n Client is ready ! \n");
/ U2 X. [8 Y# C+ E) n3 R out=new PrintStream(client.getOutputStream()); & L2 t& n5 Q* N. F
in=new DataInputStream(client.getInputStream()); 1 f! u5 o$ ] B& Z% ~# t `+ r
}catch(IOException e){
0 M$ N7 E# C5 e; r- L3 M) d System.out.println("\n IOException !\n"+e);
8 h0 h ~+ F0 E) U/ H9 L h System.exit(1);
, t; q m) r/ Y/ h+ ~* u }
) J( b3 Z8 v% f- ^! N. m, x, m }
! W7 U5 H/ Z3 \" d' n/ C/ y} |
zan
|