- 在线时间
- 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 的 应 用 从 通 讯工 具 扩 展 到 能 够 运 行 成 熟 应 用 程 序的 网 络 。
. h4 f; M5 ^+ O/ x0 g$ _
. F, g6 S: w: z" e4 \/ {* w---- Java 程 序 有 两 种 类 型:Applet 和 Application 。 简 单 的 讲 ,Applet 就 是 嵌 入Web 文 档 的 程序 , 而Application 则 是 所 有 其 它 类 型 的程 序 。 5 j& j) C( V' e2 y
5 L, {, x5 o+ X8 j8 Z+ Y3 N- Y---- 就Java 而 言 ,Applet 与 Application 的 大小 和 复 杂 性 都 没 有 限 制 , 但 是 因 为Applet 主 要是 用 于 网 络 通 讯 , 由 于 通 讯 速 度 有 限 , 下 载 时 间较 长 , 因 而
: U6 k0 O% K6 O# o4 n \Applet 一 般 来 说 规 模 较 小 , 而 对 于Application 则 无 此 顾 虑 。
3 d( k" E& W' t+ ~) O5 N2 {2 G6 u7 s0 d9 I1 }$ k6 {: G
---- Applet 与 Application 之 间 的 技 术 差 别来 源 于 其 运 行 环 境 的 差 别 。 Applet 需 要 来 自 浏览 器 的 大 量 信 息: 浏 览 器 客 户 机 的 位 置 和 大 小 、嵌 入 主HTML 文 档 的 参 数 、 初 始 化 过 程(init) 、 启 动过 程(start) 、停 止 过 程(stop) 、 终 止 过 程(destory) 、绘 图 过 程(paint) 等 等 , 而Application 则 相对 要 简 单 得 多 , 它 来 自 外 部 世 界 的 唯 一 输 入 就 是 命令 行 参 数 。
% @6 q5 u8 h0 X# T8 \" }
4 E% U7 g$ \8 G: R1 }---- 对 于 Applet 必 须 做 为java.applet.Applet 的 子 类 , 而Application 则 必 须 有 一 个 公 共 的 方 法 main( ) 。 其 次 , 两 者 的 主 线 程 是 不 同 的 ,Applet 是 由 方 法 init ) 来 对applet 进 行 初 始 化 的 , 而Application 则 由 方 法main( ) 来 开 始 运 行 程 序 的 。 一般 地 ,Java 的 Applet 和 Application 是 完 全 遵 照 以 上 的原 则 进 行 编 程 的 , 但 是 , 我 们 可 以 运 用 技 巧 写出 即 是Applet 又 是 Application 的 程 序 来 。 这 样 , 即 可以 使 我 们 更 进 一 步 了 解Java 的 内 部 结 构 又 可 以 使 同一 程 序 运 行 于 不 同 的 运 行 环 境 、 还 可 以 提 高 研究Java 的 兴 趣 。
8 o) G; U4 E, V/ \
# B1 P) x* Q. f q2 K; K---- 例 程 如 下: # t( c3 _- O8 m u
% J$ p2 l6 u( J$ H" a0 ]! L import java.applet.*;
5 r) V7 i$ D/ h4 m! R import java.awt.*;
3 ^& b- P1 J/ ]* v1 s" G import java.awt.event.*;
& u9 X4 x/ X' g) h3 }, Q r& Q7 _4 u* p" `) E4 k
" H% C: d" z4 N3 q; m L public class Example extends Applet implements
: X* v" z/ U. }" m/ t- @: F7 }$ O ActionListener{ // public static void main(String[] args){
9 d& q1 {* D ^$ d1 o8 Y Frame win=new Frame("Example"); & S' G6 d0 t) j
Example example=new Example();
; y+ u4 i; a, Q0 \ win.add("enter", example);
" J3 l/ W# P- f" g example.init(); // win.setSize(600,360);
; @: p; K0 \( U win.setVisible(true); 7 K |+ k* g: Z! `/ A
}
7 ^# {, m& y6 ~& d3 A% R public void init(){ // Button button;
% {. [" ], `* V# u$ ^0 S+ _) F$ D Label label; 1 |, Q+ \! V% x0 I6 T. g% A) G
button=new Button(" OK "):
3 P; `+ B/ t# n1 j! e, @0 e! d/ z, k button.setBounds(280,200,100,20); 7 y" o& c+ m F3 ]1 Q8 _: z
button.addActionListener(this); $ w) ^9 ~! T* u/ m. X% }& q
label=new Label(); ( u/ t* i, ] m9 D" E
label.setBounds(260,100,200,20); * U: j) J7 R2 M
add(button);
6 x( r0 V: X+ R: r5 z add(label); x" Z! _8 R8 u4 `- f# W
} $ ?% ]$ X# ~( S: i! y
public void actionPerformed(ActionEvent e){
* k+ K A; F/ a9 U' l% ^ Object source=e.getSource(); 1 w5 f3 H+ L) o6 k. ? D
if(source==button){ 7 M5 D7 e6 V$ S8 a4 z7 D
label.setText(" It is a example !");
; g9 [& ^3 I/ H9 M& u }
$ U' N) ]* a, o t }
& J2 ?* C0 b2 _ }
! U: w+ E3 L7 [2 K/ B1 }+ o& G6 ]# M: Q
---- 在 程 序 中 的 #1 处 , 必 须 让 程 序 继 承java.applet.Applet 类 这 是 做 为Applet 的 必 要 条 件 , 在 #2 处 , 需 要 生 成 本 类 的 一 个 实 例 example , 通 过 此 实 例 来 调 用init() 方 法 , #3 是 init() 方 法 。
6 B; T' J* E" f2 o: Z# B( V+ a6 Y
" G; b) p7 O; M, ?---- 如 果 把 该 程 序 看 作Applet , 它 只 是覆 盖 了init()方 法 和actionPerformed( ) 方 法 来 响 应Button 事 件 。 如果 作 为Application , 则 由main( ) 方 法 开始 , 先 生 成 程 序 本 身 的 实 例 将 程 序 加 入 窗 口 ,然 后 调 用init() 方 法 。 编 译 此 程 序 , 即 可 以 在 提 示下 作 为Application 直 接 运 行 , 又 可 以 作为Applet 送 入 任 何 浏 览 器 。
" G- H0 q+ ]6 D6 B3 J+ ^
( m0 D; q3 U3 F y---- 2. Java 中 的 发 声 提 示
2 `- Z% P2 g5 b& @: V P$ v3 z" B) _3 |- S! _
---- Java 作 为 一 种 网 络 编 程 语 言 , 在浏 览 器 中 即 可 以 进 行 动 画 演 示 , 也 可 以 播 放 声音 。 在 人 机 的 交 互 过 程 中 , 为 了 加 强 效 果 或 起 到提 示 的 作 用 , 需 要 加 入 声 音 。 0 S7 L W& Z3 V& J5 ^0 U
" W. t/ p. n3 i2 `---- Java 的 包 java.applet 中 有AudioClip 接口 , 此 接 口 封 装 有 关 声 音 片 断 的 一 些 常 用 方 法。 用 法 如 下:
! A6 O* G% Z( Q9 Q+ C; b) H. l! w4 q+ U& D) Y
AudioClip audio;
; J4 h' a& D6 ]+ S% }1 u' }5 }9 q audio=getAudioClip(getCodeBase(),"Hi.au");
3 M; ?5 j# {3 ]4 |$ Q/ q( k9 \ audio.play();
, g. S; g+ M; R) ^" D/ Z8 T) {5 }9 O, U5 d1 f3 k" W% H
---- 第 一 行 生 成 接 口AudioClip 的 一 个 变量 , 第 二 行 利 用 此 变 量 取 得 声 音 文 件 Hi.au , 此 文件 与 程 序 本 身 在 同 一 目 录 下,getCodeBase() 方 法 是用 来 取 得Applet 的class 文 件 的URL 地 址 。 第三 行 是 播 放 声 音 文 件 。 在Applet 中 利 用 此 用 法 可 在 浏览 器 中 发 出 声音 。 那 么 , 在Application 中 是 否 也 可 以用 此 方 法 来发 出 声 音 呢 ? 不 可 以 。 因 为 接 口AudioClip 是 在 包 java.applet 中 , 而 此 包 只 适 用 于Applet 。 是 否 可 以 用 其 它 方 法 来 实 现 呢 ? 我 们 可 以 利用 1 中 的 技 巧 来 编 写 一 个 即 是Applet 又 是 Application 的 程 序 试 试 。 结 果 , 还 是 不 行 。 这 是 因 为play() 方 法 只 能 在Applet 中 实 现 , 对 于Applicationplay() 方 法 是 不 能 # l9 ~% c* W0 Z, h3 Y
够 被 调 用 的 。 & [/ Y+ u' f# Q7 {% W1 C
$ z0 y6 [) R7 B; B---- 那 么 , 如 何 在Application 中 实 现 发声 提 示 呢 ? ' o2 p5 ^. D! n: e
7 j. @7 a/ W v' D* a# k0 @% F---- 记 得 VB 中 有 beep 语 句 来 使 系 统 发声 器(System Speaker ) 发 声 , 那 么 ,Java 中 也 应 有 类似 的 方 法 。
% {0 w7 ]" \4 r/ u/ k7 B3 x. ?, K* d4 G/ p$ U3 i
---- 在 Java 的 java.awt.Toolkit 类 中 有 方 法beep() 是 来 实 现 这 一 功 能 的 。 类 Toolkit 是 抽 象 类, 它 是 实 现AWT 的 所 有 工 具 的 父 类 。 Java 中的 抽 象 类 是 不 能 够 实 例 化 的 , 但 是 一 般 地 , 抽 象 类可 以 生 成 变 量 , 然 后 利 用 抽 象 类 中 的 某 一 方 法 来取 得 此 类 的 替 代 品 。 在 Toolkit 中 是 利 用 getDefaultToolkit() 方 法 来 实 现 的 。 现 在 给 出 一 个 实 例: 这 是 一个 客 户 机/ 服 务 器 的Application 。 当 服 务 器 运 行 时 如果 有 客 户 机 与 服 务 器 相 连 , 则 服 务 器 会 自 动 发声 警 报 提 示 服 务 器 端 的 用 户 有 客 户 要 与 自 己 进 行对 话 。
. r( Q/ E5 C- N0 z$ m4 i Y
0 }; e4 \5 Z4 ~* ^$ V; c: x# t& j---- 程 序 如 下:
+ [9 {4 r0 ~" ^1 F" k: E9 ~2 r# A$ G( E1 i+ F3 E8 f
服 务 器: * R1 u0 t& g, V; i2 g& h/ S
import java.util.*; # k k$ ]. r5 `9 i& V# |
import java.io.*; 3 A+ V) D% j+ d
import java.net.*;
* _3 [8 N4 y: w/ `* ?import java.awt.*;
! W( s0 a" e) E
& j! g+ y. t+ d* v6 ~; h- W& epublic class ServerT{ / z# D, }, r8 U. a# n, x1 I/ L
public static void main(String[] args){
$ h4 a' u- [7 @ g1 A m Server server; % [7 e. H1 f3 h/ g5 Y; L' \' y3 V
String clientRequest; . t# W+ h, w8 [ U" S- p
boolean quit=false;
0 R1 |- J# m/ G+ r server=new Server(8001);
& ~* Z( n* q- B0 \4 t. J while(!quit){
; i! D$ B' x4 E. A7 o DataInputStream keyboard=new DataInputStream(System.in); 9 M- h: z3 v5 V% c5 ~3 f0 M9 |. X
try{ ' \7 {' L" U% _. _" e9 C4 _4 p4 H
clientRequest=server.in.readLine();
& K& w, G3 Q/ _; R# U4 a) D if(clientRequest.trim().equals("CLOSE")){
& l% b! W$ W4 u5 R* p" H* N System.out.println("Client says: "+clientRequest);
' g4 u7 f4 I+ Z6 i( K System.exit(1); ; A6 J/ e9 N5 Z) Z
} 2 M( S2 [. N: L3 ]
System.out.println("Client says: "+clientRequest);
* C5 J* L2 r: } C0 T; v6 j7 P5 a$ n server.out.println(keyboard.readLine()); 3 g# f4 T7 V0 }0 i% o# S
}catch(IOException e){
2 z% [; S1 g' W System.out.println("IOException in server.in.readLine()"+e); , W2 C* d; `4 W5 L6 m( k
System.exit(1);
1 A( H5 I% {; E# | } # {3 v+ F# o* q4 a
}
( F8 }# l! [9 U0 e }
8 k( C) N& R$ R m5 ^9 j' }7 [4 d} % j1 {) T6 ^: z6 x4 a) {
class Server{ # h, s2 M' G0 Y! Z) H# t
private ServerSocket server; & H* R1 G; C: ]3 E. p
private Socket socket;
& ?0 i; z a: c# k, x public DataInputStream in;
' _$ c4 b" a3 a$ H1 f; S7 k public PrintStream out;
4 ~: B3 C/ f4 n9 J0 m% l% H public Server(int port){ 3 |: I8 B$ \( r7 Q: H4 j5 v+ W
try{ , k$ q7 C* g. Y$ ~- ^
server=new ServerSocket(port);
$ K8 V) l$ C, L8 `! D System.out.println("\n 7 {# `# v4 G5 {0 r
*************************************************"); 9 G" `) O% r5 o: ^2 e6 g/ C
System.out.println("\n @( Version 1.00 97/12/30 ");
* V- w& h6 C A& K9 U u8 q+ ~ System.out.println(" Copyright (c) 1997
) `; D# @! ?% R (Lui DongBing) All Rights Reserved.");
* U: f' ^3 o; P0 b System.out.println("\n
3 z }" A/ {, S( i***************************************************"); 5 | q- k$ O+ f3 n
System.out.println("\n Server is: \n "+server);
3 ]& r2 N: O, K" j( N socket=server.accept();
& P$ R) W, ]5 J) A5 I t for(int i=0;I < 260;i++){ // 发 声 提 示
' m* Q+ M7 n# v7 z Toolkit.getDefaultToolkit().beep();
5 S5 N# K. ]1 q4 m- Y( [( j } 9 q1 I: J3 F% Z/ V1 i; A
System.out.println("\n Server is ready ! \n"); + \" i l) r3 L2 @ v4 [& z W
in=new DataInputStream(socket.getInputStream());
: G8 q8 m+ U/ t; p% v3 C$ Q out=new PrintStream(socket.getOutputStream());
' Q6 |. I4 \3 k. f( } out.println("We connect in "+new Date());
! R5 A8 G: R% |, m8 U+ L1 h }catch(IOException e){
: `/ |* F# | I; ^ System.out.println("Server is failied !");
* K: e/ @+ M- W" m4 z! z+ ?& V3 u } 6 r& P/ j( R* P$ W
} L2 k% X0 z+ n. g) c$ Z6 J2 D- B
} 8 {% n: V4 S( Y, \+ x4 d
, v" P, |" D- f
5 ?! @& G- v' I* B
客 户 机 : 7 N: V7 P, E# ?/ o) T0 {
import java.util.*; ! e7 I/ K0 f# p3 J" I+ G8 f2 \
import java.io.*; ' ?; T1 ?% s, b9 k, t1 R1 ?
import java.net.*; & r! m- Y/ Z6 b8 I
) K3 ]. d* j$ @0 g/ rpublic class ClientT{
, C! i: @) M7 X, D" C/ K public static void main(String[] args){ ) J( ]& o/ v* _2 C. h
String welcome,response;
4 n1 e- ?$ ]* |) B7 D2 E( ^ Client client;
! x7 f+ _) C+ S5 R9 A r client=new Client("202.120.80.20",8001); // DataInputStream keyboard=new DataInputStream(System.in);
; g+ I j& R: Y1 T6 P. J( K0 y boolean Bye=false; " c) O+ p5 a- B: E% w( v/ [" [
while(!Bye){ ( I, C. \1 O/ ^9 r/ O+ W5 U0 P
try{ $ z! _7 N3 T, }, w0 y5 V8 t- Y* M
welcome=client.in.readLine();
% ?' d) h/ O, V) A$ N8 j) e `6 I+ W System.out.println(" Server says: "+welcome); 6 Y1 P5 F6 b- M9 L$ {
client.out.println(keyboard.readLine()); 8 I% i9 q" `# R4 b. n1 G
}catch(IOException e){ 2 |" y- d( e, K& z0 ]6 Y
System.out.println("\n The talk is CLOSED !");
" c8 Z& \: r( ~) X System.exit(1);
' I, S8 ?6 ~. r( @( k } : i! [% G9 {' R* x* u) M
}
- F+ p% h! L. s+ _. v/ Y try{ 1 ]2 u$ i9 K/ j! X
Thread.sleep(200); 8 j0 k2 X" m/ W s- \
}catch(Exception e){
# w5 d1 P5 d# }# C$ t: A; x System.out.println("It is a bug !");
+ L# X, L# p* F }
) k0 T3 i" Y) R/ l4 \) F' S6 X }
/ U" m t" q7 C6 l1 f, Y}
/ S/ [" e, A1 z% r; Vclass Client{ - Q- S0 i# r5 o# r# J0 `2 M
public DataInputStream in;
* r- X% L8 g# V+ |( w7 k public PrintStream out;
; A* P# f* b ] Y% M ^ private Socket client;
7 j9 n4 {$ C( N& p. J public Client(String host,int port){ 1 {% @" X, W5 E
try{
* V2 e9 z- s; q client=new Socket(host,port); ) `6 r0 Z$ j/ x3 ^5 p: P4 I6 ~
System.out.println("\n
6 G( n% C! B0 w/ W* \8 z7 T) [* J, Z***************************************************"); # `: [) A( [! S4 V, l- w
System.out.println("\n @( Version 1.00 97/12/30 "); ) d& m+ g4 `9 r) U! b5 o' o# e! T
System.out.println(" Copyright (c) 1997 % _5 m0 I4 N" w( _6 t6 H" T
(Lui DongBing) All Rights Reserved.");
. ?* M5 @$ t# t7 a2 b0 i System.out.println("\n ' z3 M X& V d1 Z0 M
**************************************************"); : v1 t# K" C9 j0 w* Q" c( U& V' C
System.out.println("\n Client socket:"+client); 6 n" ]5 V9 o: n! u! ]8 s
System.out.println("\n Client is ready ! \n");
: T( K/ S$ O6 x3 W. f, k3 E out=new PrintStream(client.getOutputStream());
* y0 y$ g$ P4 U' K/ F in=new DataInputStream(client.getInputStream()); ! B: G' ]" m0 O0 q5 ^' E
}catch(IOException e){
. b: |7 A* r2 { System.out.println("\n IOException !\n"+e);
0 d7 ]+ h8 ~: a# L+ y. ` System.exit(1); / z+ T# r2 q& S: L+ z
} 9 \" I3 }7 u/ U
} * H- C& l( W, j7 W7 s5 }
} |
zan
|