You are on page 1of 215

Gio trnh lp trnh

mng Java, C

Li m u
Lp trnh mng l mt trong nhng nhim v cn bn pht trin cc ng dng
doanh nghip. Mt chng trnh mng c vit ra cc chng trnh trn cc my
tnh khc nhau c th truyn tin vi nhau mt cch hiu qu v an ton cho d chng
c ci t trn mng LAN, WAN hay mng ton cu Internet, y l iu cn bn i
vi s thnh cng ca nhiu h thng.
Java l ngn ng lp trnh hng i tng thun ty vi nhiu c trng u vit
so vi cc ngn ng lp trnh hng i tng khc nh tnh c lp vi nn, tnh bo
mt,Java l ngn ng ngay t khi ra i hng n lp trnh mng nn vic vit mt
chng trnh lp trnh mng bng Java d dng hn nhiu so vi cc ngn ng khc.
Gio trnh ny bao gm 10 chng:
Chng 1: Gii thiu nhng khi nim cn bn v mng my tnh ngi c c
th tip cn vi cc chng tip theo. Trong chng ny chng ta s i vo xem xt
mng vt l, phn cng c s dng trong cc mng LAN. Tip theo chng ta s tm
hiu m hnh phn tng OSI by tng, v s tng ng ca h giao thc TCP/IP vi cc
tng trong m hnh OSI. Sau chng ta s i vo tm hiu cc giao thc mng, giao
thc Internet, v giao thc e-mail.
Chng 2: Gii thiu ngn ng lp trnh Java. Chng ny trnh by cc khi nim
cn bn v ngn ng lp trnh Java. Gii thiu lch s pht trin v cu trc ca my o
Java. Nhng c trng to nn sc mnh ca ngn ng Java cng c gii thiu
trong chng ny. Cng trong chng ny chng ta s i vo tm hiu cch cu hnh v
ci t mi trng bin dch, chy v son tho ngn ng Java. Tip n ta s i vo tm
hiu cc thnh phn c bn ca Java nh kiu d liu, cu trc lnh tun t r nhnh,
lp, v nhy. Tip theo chng ta s i vo tm hiu cc khi nim lin quan n lp trnh
hng i tng trong Java nh lp, phng thc, thuc tnh, cc t kha b tr nh
static, final, abstract, tha k v tnh a hnh trong Java. Mt trong nhng khi nim mi
m cc ngn ng truyn thng trc y khng c l ngoi l v n bt ngoi l trong
Java cng c gii thiu.
Chng 3: Cc lung vo ra. Chng ny gii thiu khi nim vo ra bng cc
lung d liu. Trc tin ta s tm hiu v cc lung v ngha ca lung trong chng
trnh Java. Tip n chng ta s ln lt tm hiu cc lung vo ra chun trong gi lm
vic vi console. Cc lung tru tng java.io.InputStream, java.io.OutputStream l cc
lung c bn t xy dng nn cc lung c th. Lung c chia thnh cc nhm
nh lung byte v lung k t. T phin bn Java 1.4 mt c trng vo ra mi trong
Java c a vo cng c gii thiu trong chng ny. Vic nm vng kin thc
chng ny cng gip cho vic lp trnh ng dng mng tr nn n gin hn v thc
cht ca vic truyn v nhn d liu gia cc ng dng mng l vic c v ghi cc
lung.
Chng 4: Lp trnh a tuyn on. Trong cc ngn ng lp trnh trc y cc
ng dng hu ht l cc ng dng n tuyn on. tng tc x l v gii quyt vn
tng tranh ca cc ng dng ni chung v ng dng mng ni ring ta cn s dng
khi nim a tuyn on. Phn u ca chng ny trnh by cc khi nim cn bn v
tin trnh, tuyn on. Tip n chng ta s xem xt cc cch ci t mt ng dng tuyn
on trong Java bng lp Thread v thc thi giao tip Runnable. Sau ta s i vo tm
hiu cc phng thc ca lp Thread. S ng b ha v cch ci t mt chng trnh
ng b ha cng c gii thiu trong chng ny.
Chng 5: Lp trnh mng vi cc lp InetAddress, URL v URLConnection. Lp
InetAddress l lp cn bn u tin trong lp trnh mng m ta cn tm hiu. N ch ra
cch mt chng trnh Java tng tc vi h thng tn min. Tip n ta s i vo tm
hiu cc khi nim v URI, URL,URN v lp biu din URL trong Java. Cch s dng
URL ti v thng tin v tp tin t cc server. Sau ta i vo tm hiu lp
URLConnection, lp ny ng vai tr nh mt ng c cho lp URL.

Su tm bi: www.daihoc.com.vn

Chng 6: Lp trnh Socket cho giao thc TCP. Trong chng ny chng ta s tm
hiu cch lp trnh cho m hnh client/server v cc kiu kin trc client/server. Cc lp
Socket v ServerSocket c trnh by chi tit trong chng ny lp cc chng trnh
cho giao thc TCP.
Chng 7: Lp trnh ng dng cho giao thc UDP. Chng ny gii thiu giao
thc UDP v cc c trng ca giao thc ny. Tip n ta i vo tm hiu cc lp
DatagramPacket v DatagramSocket vit cc chng trnh ng dng mng cho giao
thc UDP.
Chng 8: Tun t ha i tng v ng dng trong lp trnh mng. Trnh by cc
vn v tun t ha v ng dng ca tun t ha trong lp trnh mng.
Chng 9: Phn tn i tng bng Java RMI. Chng ny tm hiu ch v lp
trnh phn tn i tng bng k thut gi phng thc RMI (Remote Method
Invocation).
Chng 10:X l c s d liu trong Java. Trnh by cch thc kt ni cc c s
d liu v x l c s d liu bng Java thng qua giao din lp trnh ng dng JDBC.
Tm hiu v lp trnh mng tt nht l trn cc h thng mng thc s vi nhiu
my tnh c kt ni vt l. Tuy nhin trong gio trnh ny hu ht cc v d c trnh
by bn c c th lp trnh v th nghim cc ng dng mng trn cc my n.
Mc d ht sc c gng trnh by gio trnh mt cch d hiu vi cc v d
minh ha gip bn c c th th nghim ngay sau khi tm hiu cc vn l thuyt,
nhng chc chn gio trnh ny khng th trnh khi nhng thiu st nht nh. Rt mong
s gp v ph bnh ca cc bn c gi. Mi thc mc v gp cc bn c th gi v
theo a ch e-mail sau:lequocdinh@vnn.vn hoc hoan_td2001@yahoo.com
hon thnh gio trnh ny cc tc gi nhn c s gip rt nhiu t
bn b, ng nghip v nhng ngi thn.
Xin chn thnh cm n ti tt c mi ngi.

Nhm tc gi

Su tm bi: www.daihoc.com.vn

MC LC
Li m u
Chng 1:Cc khi nim cn bn v mng v giao thc .............................................. 1
1. Mng my tnh .................................................................................................... 1
1.1. Cc ng WAN ............................................................................. 1
1.2 .Giao thc Ethernet .......................................................................... 2
1.3. Cc thnh phn vt l...................................................................... 3
2. M hnh phn tng.............................................................................................. 6
2.1. Tng 1:Tng vt l........................................................................... 7
2.2. Tng 2: Tng lin kt d liu ........................................................... 7
2.3. Tng 3: Tng mng ......................................................................... 7
2.4. Tng 4:Tng giao vn ..................................................................... 7
2.5. Tng 5: Tng phin ...........................................................................
2.6. Tng 6:Tng trnh din .................................................................... 7
2.7. Tng 7:Tng ng dng.................................................................... 7
3. Cc giao thc mng ............................................................................................ 8
3.1. Cc giao thc c bn ...................................................................... 8
3.2. Cc giao thc Internet ................................................................... 14
4. Soket ................................................................................................................. 17
5. Dch v tn min .............................................................................................. 17
5.1. Cc server tn min ...................................................................... 18
5.2. Nslookup ....................................................................................... 19
6. Internet v Extranet .......................................................................................... 20
6.1. Intranet v Extranet20
6.2. Firewall.......................................................................................... 20
6.3. Proxy Server ................................................................................. 20
Chng 2 : Gii thiu ngn ng lp trnh Java ........................................................... 21
1. Gii thiu cng ngh Java ................................................................................ 21
1.1. Lch s pht trin........................................................................... 21
1.2. Cu trc ca my o Java Java Virtual Machine ........................ 21
1.3. Cc c trng ca Java ................................................................ 21
1.4. Cc n bn Java ........................................................................... 22
1.5. Cng c pht trin ......................................................................... 23
1.6. Cc kiu ng dng trong Java....................................................... 23
1.7. Ci t chng trnh dch Java v cc cng c ............................. 23
1.8. Mt s v d m u ..................................................................... 25
2. Ngn ng lp trnh Java .................................................................................... 27
2.1. Cu trc tp ca mt chng trnh Java ....................................... 27
2.2. nh danh, kiu d liu v khai bo bin ....................................... 28
2.3. Cc kiu d liu nguyn thy (primitive datatype) ......................... 28
2.4. Khai bo cc bin .......................................................................... 30
2.5. Cc lnh trong Java ...................................................................... 31
2.6 Cc lp v cc i tng trong Java.............................................. 36
2.7. Giao tip Interface ...................................................................... 48
2.8. Cc gi v s dng gi trong Java ................................................ 50
2.9. Qun l ngoi l ............................................................................ 52

I
Su tm bi: www.daihoc.com.vn

Chng 3: Cc lung vo ra ....................................................................................... 59


1. Khi nim v lung trong Java........................................................................... 59
1.1. Khi nim lung(stream) ............................................................... 59
2. Lung xut nhp chun ..................................................................................... 60
3. Lung nh phn .................................................................................................. 60
3.1. Lp InputStream ........................................................................... 60
3.2. Lp OutputStream......................................................................... 61
3.3. Cc lung xut nhp mng byte .................................................... 62
3.4. Lung xut nhp tp tin ................................................................. 64
3.5. Truy nhp tp ngu nhin.............................................................. 66
3.6. Lung PrintStream ....................................................................... 68
4. Lung k t ..................................................................................................... 68
4.1. S tng ng gia lung byte v lung k t ............................... 68
4.2. M ha k t ................................................................................. 69
4.3 Lp Writer ...................................................................................... 70
4.4. Lp Reader ................................................................................... 70
4.5. Lp OutputStreamWriter ............................................................... 70
4.6. Lp InputStreamReader ................................................................ 71
4.7. Lp FileWriter ............................................................................... 71
4.8. Lp FileReader ............................................................................. 72
5. Lung m ........................................................................................................ 73
6. Lung vo ra mi New Input Output ............................................................... 74
6.1. Cn bn v NIO ............................................................................ 74
6.2. Buffer (Cc vng m) .................................................................. 74
6.3. Cc knh (Channel) ...................................................................... 76
6.4. Charset v Selector ....................................................................... 76
6.5. c tp.......................................................................................... 77
6.6. Ghi tp tin ...................................................................................... 80
7. Kt lun ................................................................................................................... 82
Chng 4: Lp trnh a tuyn on ............................................................................ 83
1.Tng quan83
1.1. Lp trnh n tuyn on .............................................................. 83
1.2. Lp trnh a tin trnh .................................................................... 83
1.3. Lp trnh a tuyn on................................................................. 84
2. To cc ng dng a tuyn on vi lp Thread .............................................. 86
3. To ng dng a tuyn on vi giao tip Runnable ........................................ 87
4. S ng b ha ................................................................................................. 88
4.1. Cc phng thc synchronized .................................................... 88
4.2.Lnh synchronized ......................................................................... 89
5. Phng thc wait v notify................................................................................ 90
6. Lp lch cho tuyn on ..................................................................................... 91
7. Hoi vng-Deadlock .......................................................................................... 92
8. iu khin tuyn on ....................................................................................... 94
8.1. Ngt mt tuyn on Thread ......................................................... 94
8.2 Kt thc vic thc thi mt tuyn on............................................. 95
8.3. Tm dng v phc hi vic x l cc tuyn on .......................... 96

II
Su tm bi: www.daihoc.com.vn

9. Cc nhm tuyn on ThreadGroup................................................................ 96


9.1. To mt nhm Thread ................................................................... 98
10. Mt v d minh ha vic s dng tuyn on .................................................. 98
11. Kt lun ......................................................................................................... 100
Chng 5: Lp trnh mng vi cc lp InetAddress, URL v URLConnection .......... 102
1. Lp InetAddress102
1.1. To cc i tng InetAddress102
1.2. Nhn cc trng thng tin ca mt i tng InetAddress ......... 103
1.3. Mt s chng trnh minh ha .................................................... 104
2. Lp URL .......................................................................................................... 105
2.1. To cc URL ............................................................................... 105
2.2. Phn tch mt URL thnh cc thnh phn ................................... 106
2.3. Tm kim d liu t mt URL ...................................................... 108
2.4. Cc phng thc tin ch............................................................ 109
3. Lp URLConnection109
3.1. M cc URLConnection ............................................................. 110
3.2. c d liu t mt server ............................................................ 111
3.3. Phn tch Header ........................................................................ 113
Chng 6: Lp trnh Socket cho giao thc TCP........................................................ 119
1. M hnh client/server ....................................................................................... 119
2. Cc kin trc Client/Server ............................................................................. 120
2.1. Client/Server hai tng (two-tier client/server) ............................... 120
2.2. Client/Server ba tng................................................................... 121
2.3. Kin trc n-tng ........................................................................... 122
3. M hnh truyn tin socket................................................................................. 122
4. Socket cho Client............................................................................................. 124
4.1. Cc constructor ........................................................................... 124
4.2. Nhn cc thng tin v Socket ...................................................... 125
4.3. ng Socket................................................................................ 126
4.4. Thit lp cc ty chn cho Socket127
4.5. Cc phng thc ca lp Object127
4.6. Cc ngoi l Socket .................................................................... 127
4.7. Cc lp SocketAddress ............................................................... 127
5. Lp ServerSocket............................................................................................ 128
5.1. Cc constructor ........................................................................... 128
5.2. Chp nhn v ngt lin kt .......................................................... 129
6. Cc bc ci t chng trnh pha Client bng Java..................................... 131
7. Cc bc ci t chng trnh Server bng Java ...................................... 134
8. ng dng a tuyn on trong lp trnh Java .................................................. 136
9. Kt lun ........................................................................................................... 141
Chng 7: Lp trnh ng dng cho giao thc UDP ................................................... 142
1. Tng quan v giao thc UDP .......................................................................... 142
1.1 Mt s thut ng UDP.................................................................. 142
1.2. Hot ng ca giao thc UDP..................................................... 143
1.3. Cc nhc im ca giao thc UDP ........................................... 143
1.4. Cc u im ca UDP ................................................................ 144
1.5. Khi no th nn s dng UDP...................................................... 144
2. Lp DatagramPacket....................................................................................... 145

III
Su tm bi: www.daihoc.com.vn

2.1. Cc constructor nhn datagram ............................................. 145


2.2. Constructor gi cc datagram ................................................ 146
3. Lp DatagramSocket....................................................................................... 148
4. Nhn cc gi tin .............................................................................................. 148
5. Gi cc gi tin ................................................................................................. 150
6. V d minh ha giao thc UDP ........................................................................ 151
Chng 8: Phn tn i tng trong Java bng RMI................................................ 159
1.Tng quan ........................................................................................................ 159
2. Mc ch ca RMI............................................................................................ 159
3. Mt s thut ng ............................................................................................ 160
4. Cc lp trung gian Stub v Skeleton ............................................................... 160
5. C ch hot ng ca RMI .............................................................................. 160
6. Kin trc RMI................................................................................................... 163
7. Ci t chng trnh........................................................................................ 164
8. Trin khai ng dng ........................................................................................ 166
9. Cc lp v cc giao tip trong gi java.rmi ...................................................... 167
9.1. Giao tip Remote ....................................................................... 167
9.2. Lp Naming ................................................................................ 167
10. Cc lp v cc giao tip trong gi java.rmi.registry ........................................ 168
10.1. Giao tip Registry ...................................................................... 168
10.2. Lp LocateRegistry ................................................................... 168
11. Cc lp v cc giao tip trong gi java.rmi.server ......................................... 169
11.1. Lp RemoteObject .................................................................... 169
11.2. Lp RemoteServer .................................................................... 169
11.3. Lp UnicastRemoteObject ........................................................ 169
12. Kt lun169
Chng 9 : X l c s d liu trong Java ............................................................... 171
1. JDBC Java Database Connectivity API ........................................................... 171
2. Cu trc ca JDBC .......................................................................................... 171
2.1. Kiu 1 .......................................................................................... 172
2.2. Kiu 2 .......................................................................................... 173
2.3. Kiu 3 .......................................................................................... 174
2.4. Kiu 4 .......................................................................................... 175
3. Kt ni c s d liu ....................................................................................... 176
3.1. DriverManager ........................................................................... 176
3.2. Connection .................................................................................. 176
3.3. Statement .................................................................................... 177
3.4. ResultSet .................................................................................... 177
4. Lp DatabaseMetaData .................................................................................. 178
5. Lp ResultSetMetaData .................................................................................. 179
6. Cc bc c bn kt ni vi c s d liu t mt ng dng Java ............. 180
7. S dng PreparedStatement ........................................................................... 185
8. S dng cc giao tc ....................................................................................... 187
Ti liu tham kho ..................................................................................................... 190

IV
Su tm bi: www.daihoc.com.vn

Chng 1

Cc khi nim cn bn v mng v giao thc mng


1. Mng my tnh
Mng my tnh L tp hp cc my tnh hoc cc thit b c ni vi nhau bi
cc ng truyn vt l v theo mt kin trc no .
Chng ta c th phn loi mng theo qui m ca n:

Mng LAN (Local Area Network)-mng cc b: kt ni cc nt trn mt phm vi


gii hn. Phm vi ny c th l mt cng ty, hay mt ta nh.

Mng WAN (Wide Area Network): nhiu mng LAN kt ni vi nhau to thnh
mng WAN.

MAN (Metropolitan Area Network), tng t nh WAN, n cng kt ni nhiu


mng LAN. Tuy nhin, mt mng MAN c phm vi l mt thnh ph hay mt th
nh. MAN s dng cc mng tc cao kt ni cc mng LAN ca trng
hc, chnh ph, cng ty, ..., bng cch s dng cc lin kt nhanh ti tng im
nh cp quang.

Khi ni n cc mng my tnh, ngi ta thng cp ti mng xng sng


(backbone). Backbone l mt mng tc cao kt ni cc mng c tc thp hn. Mt
cng ty s dng mng backbone kt ni cc mng LAN c tc thp hn. Mng
backbone Internet c xy dng bi cc mng tc cao kt ni cc mng tc cao.
Nh cung cp Internet hoc kt ni trc tip vi mng backbone Internet, hoc mt nh
cung cp ln hn.
1.1. Cc ng kt ni trong mng WAN
kt ni ti mt mng WAN, c mt s ty chn nh sau:

Khi mt khch hng c th yu cu s dng mng vi thng lng xc nh,


chng ta c th s dng cc ng thu bao (leased line).

Cc ng chuyn mch (switched lines) c s dng bi dch v in thoi


thng thng. Mt mch c thit lp gia pha nhn v pht trong khong thi
gian thc hin cuc gi hoc trao i d liu. Khi khng cn cn dng ng
truyn na, th cn phi gii phng ng truyn cho khch hng khc s dng.
Cc v d v cc ng chuyn mch l cc ng POTS , ISDN, v DSL.

Mng chuyn mch gi l mng m trong nh cung cp dch v cung cp cng


ngh chuyn mch giao tip vi mng xng sng. Gii php ny cung cp
hiu nng cao v kh nng chia s ti nguyn gia cc khch hng.
Cc giao thc c s dng cho cc mng chuyn mch bao gm X.25
(64Kbps), Frame Relay (44.736Mbps), v ATM (9.953 Gbps).
Kin trc mng: Mt trong nhng vn cn quan tm i vi mt mng my tnh
l kin trc mng. N cp ti hai kha cnh l Hnh trng mng v Giao thc
mng.

Hnh trng mng: L cch ni cc my tnh vi nhau. Ngi ta phn loi mng
theo hnh trng mng nh mng sao, mng bus, mng ring

Giao thc mng: L tp hp cc qui tc, qui c truyn thng ca mng m tt c


cc thc th tham gia truyn thng phi tun theo.

Su tm bi: www.daihoc.com.vn

1.2. Giao thc Ethernet


c c s hiu bit tt hn v cc mng vt l hot ng nh th no, chng
ta s xem xt mt s giao thc LAN ph bin: giao thc Ethernet. Chn mi phn trm
cc thit b gn vi mt mng LAN s dng giao thc Ethernet, ban u c pht trin
bi Xerox, Digital Equipement, v Intel nm 1972.
Ngy nay, Ethernet c th h tr cc ng truyn 100Mbps v 1Gbps. Rt nhiu
cng ngh ng truyn c th c s dng vi mt Ethernet. Ngi ta s dng mt
s qui c t tn giao thc Enternet. Tn ny ch ra tc ca mng Ethernet v cc
thuc tnh ca cng ngh ng truyn. Cc tn nh vy c bt u bng mt s
ch ra tc truyn ti a, tip theo l mt t c s dng xc nh cng ngh truyn
dn, v cui cng l mt s ch ra khong cch gia hai nt. V d, 10Base2 k hiu
mt Ethernet hot ng vi tc 10Mbps s dng k thut truyn trn bng tn c s,
vi cc cp c chiu di ti a l 200m. Mt s cu hnh thng dng khc nh sau:
Chun Ethernet
10Base5
10BaseT

Tc
10Mbps
10Mbps

Kiu cp
Cp ng trc
Cp ng

100BaseTX

100Mbs

Cp ng

1000BaseSX

1000Mbps

Cp a ch

M t
y l chun ban u cho Ethernet
10BaseT l mt mng 10Mbps vi cp
xon.
100Mbps cng ngh cp xon v kh
nng truyn song cng
1000Mbps vi cp si quang. S :Short
wavelength (850nm)

Bng 1.1
CSMA/CD (Carrier Sense Multiple Access/Collision Detect).

Nhiu thit b c kt ni vo cng mt mng v tt c u cng c quyn truy


xut ng thi. Khi mt thng ip c gi i, n c truyn thng qua mt mng .
Pha nhn c nh danh bi mt a ch duy nht, v ch c nt ny c thng ip, cn
cc nt khc th b qua.
Mt vn t ra l khi c nhiu nt cng c gng gi thng ip ti cng mt thi
im, iu ny c th ph hng cc gi tin. Gii php cho vn ny l mi nt mng
gim st mng v c th pht hin mng ang rnh hay bn. Mt nt ch c th bt u
gi d liu khi khng c d liu no c gi i trn mng trc . CSMA l mt b
phn ca CSMA/CD.
Tuy nhin vn c kh nng l hai nt, sau khi kim tra thy mng khng bn, bt
u gi gi tin cng mt thi im trn cng cp mng. iu ny c th gy ln xung t
gia hai gi tin, kt qu l ph hng d liu. C hai pha gi u nhn thc c gi tin
b hng bi v n vn lng nghe mng khi gi d liu, v v th c th pht hin xung t.
y l CD (Collision Dection) trong CSMA/CD. C hai nt dng vic truyn d liu ngay
tc thi, v ch mt thi im nht nh trc khi kim tra mng tr li xem mng c
ri hay khng v truyn li.
Mi nt trn mng s dng mt a ch MAC (Media Access Control) nh danh
duy nht. a ch ny c nh ngha bi thit b giao tip mng. Mt gi tin c gi i
trn mng, nhng nu thit b mng khng nhn din host ca n nh mt host nhn, n
s b qua gi tin v chuyn tip n.

Su tm bi: www.daihoc.com.vn

Cc giao thc khc

IBM pht trin giao thc Token Ring (IEEE802.5), trong cc nt mng c
kt ni theo mt vng. Vi Ethernet, bt k mt nt no cng c th gi mt thng ip
khi khng c gi tin no trn mng. Vi Token Ring mi nt c mt quyn truy xut ti
mng theo mt th t nh trc. Mt token lu chuyn vng quanh vng, v ch nt lnh
no c th bi mi c th gi thng ip. Ngy nay, Ethernet ang thay th dn cc
mng Token Ring bi v cc mng ny tn km v kh ci t.
AppleTalk l mt giao thc mng LAN c pht trin bi Apple tng i ph
bin trong cc trng hc, cc nh my,...
ATM l mt giao thc khc c th tm thy trong mng LAN. N h tr cc mng
tc cao s dng k thut chuyn mch v c m bo cht lng dch v.
1.3. Cc thnh phn vt l
Mt vn quan trng bit v mng l bit v phn cng. Chng ta s xem xt
cc thnh phn ch yu ca mt mng LAN sau:

Thit b giao tip mng

Hub

Switch

Router

Thit b giao tip mng (Network Interface Thit b)

NIC l thit b giao tip c s dng kt ni mt thit b vi mng LAN. N cho


php chng ta gi v nhn cc thng ip t mng. Mt NIC c mt a ch MAC duy
nht m cung cp nh danh duy nht cho tng thit b.
a ch MAC l mt s 12 byte-h 16 c gn cho thit b mng. a ch ny c
th c thay i bi mt trnh iu khin mng mt cch linh hot (nh trong trng
hp ca h thng DECnet, mng c pht trin bi Digital Equipment), nhng thng
thng a ch MAC khng thay i.
Ta c th tm a ch MAC ca mt my s dng h iu hnh Windows bng cch
dng tin ch dng lnh ipconfig trong DOS vi tham s switch

Hnh 1.1

Su tm bi: www.daihoc.com.vn

Hub

Nhiu thit b c th c kt ni mt cch d dng vi s gip ca mt hub.


Hub l mt thit b kt ni gn nhiu thit b vo LAN. Mi thit b thng kt ni thng
qua mt cp ti mt cng trn hub.
Hub hot ng nh mt b chuyn tip. Khi n chuyn tng thng ip t cng ny
ti cng khc, v chuyn ti mng. Hub l mt thnh phn tng i n gin ca mt
mng, hot ng tng vt l truyn d liu m khng cn thao tc x l no. iu
ny lm cho cc hub d ci t v qun l, v chng khng i hi cu hnh c bit no.

Switch

Cc chuyn mch (switch) phn chia mng thnh cc on (segment). So vi hub,


switch l mt thit b thng minh hn nhiu. Switch lu tr cc a ch MAC ca cc thit
b c kt ni ti cc cng ca n trong bng lookup. Cc bng lookup cho php switch
lc cc thng ip mng v khng ging vi hub, n khng chuyn tip cc thng ip ti
tng cng. iu ny loi b cc xung t c th xy ra v mng c th t c hiu
nng tt hn. Chc nng chuyn mch c thc hin bng cch s dng phn cng.

Router

Router l mt thit b trung gian mng, kt ni nhiu mng vt l. Mt mng c


nhiu host c th c phn chia thnh cc phn ring, hay cn gi l subnet. u im
ca cc subnet l:
Hiu nng c ci thin bng cch gim broadcast, broadcast l 1 thng
ip c gi ti tt c cc nt ca mng.
Kh nng hn ch ngi dng trong tng mng con xc nh a ra
nhng u im v bo mt.
Cc subnet nh hn s d qun l hn so vi mt mng ln.
Cc router khng ch c s dng trong LAN, chng c mt vai tr quan trng
trong WAN. Router nhn mt thng ip v chuyn tip n ti ch bng cch s dng
ng i tt nht ti ch .
Mt Router lu gi mt bng nh tuyn lit k tt c cc cch m cc mng c th
t ti. Thng thng s c mt s ng i t mng ny ti mng khc, nhng ch c
mt trong s l tt nht, v n l con ng c m t trong bng nh tuyn. Cc
router truyn tin bng cch s dng cc giao thc nh tuyn pht hin cc router khc
trn mng, v h tr cho vic trao i thng tin v cc mng c gn vi tng b nh
tuyn.
Thng tin m mt b nh tuyn thu thp v cc ng i gia cc mng c gi
l o router, v c th bao gm nhng thng tin nh s mt mt gi tin v thi gian
truyn tin. Thng tin c s dng to ra o ty thuc vo giao thc nh tuyn:
Giao thc nh tuyn vect khong cch
Cc giao thc RIP(Routing Information Protocol) v IGRP(Interior Gateway
Routing Protocol) s dng mt bin m ch ra s router m gi tin phi
i qua n ch. Cc giao thc ny thng la chn cc ng i vi t
router, m khng quan tm n tc v tin cy.
Cc giao thc nh tuyn trng thi lin kt
Vic tnh ton ng i tt nht ca cc giao thc nh tuyn OSPF v
BGP quan tm n nhiu yu t nh tc , tin cy, v thm ch l chi
ph ca ng i.
Cc giao thc nh tuyn lai

Su tm bi: www.daihoc.com.vn

Cc giao thc ny s dng s kt hp vic tnh ton trng thi lin kt v


vect khong cch.

Vn tm ng i

Vi cu hnh TCP/IP, mt gateway mc nh c thit lp. y l mt a ch IP


ca cng b nh tuyn m subnet kt ni ti. B nh tuyn ny c s dng khi mt
host bn ngoi subnet cn c lin lc.
Ta c th thy bng nh tuyn cc b trn h iu hnh Windows bng cch s
dng lnh ROUTE PRINT trn dng lnh.. Lnh ny hin th cc gateway s c s
dng cho mi lin kt mng.

Hnh 1.2
Mt lnh hu ch khc l lnh TRACERT. Lnh ny cho php chng ta kim tra
ng i c s dng i ti ch.

Hnh 1.3

Su tm bi: www.daihoc.com.vn

2. M hnh phn tng


ISO nh ngha mt m hnh cho mt mng c chun ha s thay th cho
TCP/IP,DECNet v cc giao thc khc nh l mt giao thc mng c bn c s dng
cho Internet. Tuy nhin, do s phc tp ca OSI, m hnh ny khng c ci t v s
dng nhiu trong thc t. TCP/IP n gin hn nhiu v v vy c th tm thy nhiu
ni. Nhng c rt nhiu tng mi t giao thc OSI c th tm thy trong phin bn tip
theo ca IP, IPv6.
Trong khi giao thc OSI khng c xy dng y trong thc t, nhng m
hnh by tng rt thnh cng v n hin ang c s dng nh l mt m hnh tham
chiu m t cc giao thc mng khc nhau v chc nng ca chng.
Cc tng ca m hnh OSI phn chia cc nhim v c bn m cc giao thc mng
phi thc hin, v m t cc ng dng mng c th truyn tin nh th no. Mi tng c
mt mc ch c th v c kt ni vi cc tng ngay di v trn n. By tng ca
m hnh OSI.

Hnh 1.4

Tng ng dng (Application): nh ngha mt giao din lp trnh giao tip vi mng
cho cc ng dng ngi dng.

Tng trnh din (Presentation): c trch nhim m ha d liu t tng ng dng


truyn i trn mng v ngc li.

Tng phin (Session): to ra mt lin kt o gia cc ng dng.

Tng giao vn (Transport): cho php truyn d liu vi tin cy cao.

Tng mng (Network): cho php truy xut ti cc nt trong mng LAN bng cch
s dng a ch logic

Tng lin kt d liu (Data Link): truy xut ti mt mng vt l bng cc a ch vt


l.

Cui cng, tng vt l (Physical): c th bao gm cc thit b kt ni, cp ni.

By gi chng ta tm hiu khi nim ca cc tng ny bng cch xem xt chc


nng ca tng tng chi tit hn.

Su tm bi: www.daihoc.com.vn

2.1. Tng 1:Tng vt l


Tng vt l bao gm mi trng vt l nh yu cu v cp ni, cc thit b kt ni,
cc c t giao tip, hub v cc repeater,...
2.2. Tng 2: Tng lin kt d liu
a ch MAC m chng ta cp l a ch ca tng 2. Cc nt trn LAN gi
thng ip cho nhau bng cch s dng cc a ch IP, v cc a ch ny phi c
chuyn i sang cc a MAC tng ng.
Giao thc phn gii a ch (ARP: Address Resolution Protocol) chuyn i a ch
IP thnh a ch MAC.Mt vng nh cache lu tr cc a ch MAC tng tc x l ny,
v c th kim tra bng tin ch arp -a,
2.3. Tng 3: Tng mng
Tng mng l tng nm pha trn tng lin kt. Trong tng 3, a ch logic c s
dng kt ni ti cc nt khc. Cc a ch MAC ca tng 2 ch c th c s dng
trong mt mng LAN, v chng ta phi s dng cch nh a ch ca tng 3 khi truy xut
ti cc nt trong mng WAN.
Internet Protocol l giao thc tng 3; n s dng cc a ch IP nh danh cc
nt trn mng. Cc router tng 3 c s dng nh ng i trong mng.
2.4.Tng 4:Tng giao vn
Tng mng nh danh cc host bi cc a ch logic. Tng ng dng nhn bit mt
ng dng thng qua ci gi l im cui (endpoint). Vi giao thc TCP, endpoint c
nhn bit bi mt s hiu cng v a ch IP.
Tng giao vn c phn loi theo cch truyn tin vi tin cy hay khng.
Truyn tin vi tin cy l khi c mt li c to ra nu thng ip c gi i nhng
khng nhn c mt cch ng n. Trong khi truyn tin c tin cy khng cao s
khng kim tra xem liu thng ip c gi i nhn c hay cha. Trong truyn tin
vi tin cy, tng giao vn c nhim v gi i cc gi tin xc thc hay cc thng ip
truyn li nu d liu b hng hay b tht lc, hay d liu b trng lp.
Mt cch khc phn loi cc mng truyn tin l phn loi mng theo hng lin
kt hay phi lin kt

Vi truyn tin hng lin kt, mt lin kt phi c thit lp trc khi cc thng
ip c gi hoc c nhn.

Vi truyn tin phi lin kt th khng cn giai on thit lp lin kt.

2.5. Tng 5: Tng phin


Vi m hnh OSI, tng phin xc nh c dch v cho mt ng dng, nh ng
nhp v ng xut mt ng dng. Tng phin biu din mt lin kt o gia cc ng
dng. Lin kt tng phin c lp vi lin kt vt l tng giao vn, v cc lin kt tng
giao vn c yu cu cho mt lin kt tng phin.
2.6.Tng 6:Tng trnh din
Tng trnh din c s dng nh dng d liu theo cc yu cu ca ng
dng. M ha, gii m, v nn d liu thng din ra tng ny.
2.7. Tng 7:Tng ng dng
Tng ng dng l tng cao nht ca m hnh OSI. Tng ny bao gm cc ng
dng s dng cc tin ch mng. Cc ng dng ny c th thc hin cc tc v nh
truyn tp tin, in n, e-mail, duyt web,

Su tm bi: www.daihoc.com.vn

3. Cc giao thc mng


Cc tng OSI nh ngha mt m hnh cc tng giao thc, v cch m chng hot
ng cng vi nhau. Chng ta so snh cc tng OSI vi mt ci t c th:. Chng giao
thc TCP/IP l mt dng c th ca m hnh OSI, n bao gm 4 tng. Giao thc IP tng
ng vi tng 3 ca m hnh OSI; TCP v UDP tng ng vi tng 4 ca m hnh OSI, v
chng thc hin cc nhim v ca tng phin, tng trnh din, v tng ng dng
Trong mc tip theo, chng ta s xem xt chc nng v mc ch ca cc giao
thc ca h giao thc TCP/IP theo trnh t sau:

Cc giao thc c bn

Cc giao thc Internet

Cc giao thc E-mail

Cc giao thc khc

3.1. Cc giao thc c bn


Nh chng ta c th thy, h giao thc TCP/IP c cu trc phn tng n gin hn
nhiu so vi m hnh 7 tng ca m hnh OSI. TCP v UDP l cc giao thc tng giao
vn tng ng vi tng 4 ca m hnh 7 tng OSI. C hai giao thc ny u s dng
giao thc IP, mt giao thc tng ng vi tng 3 ca m hnh OSI (tng mng). Cng
nh ba giao thc ny c hai giao thc c bn trong h giao thc TCP/IP m rng tnh
nng ca giao thc IP: ICMP v IGMP.
3.1.1. IP-Internet Protocol
Giao thc Internet kt ni hai nt. Mi nt c nh danh bi mt a ch IP 32bit,
c gi l a ch IP ca host. Khi gi mt thng ip, giao thc IP nhn thng ip t
cc giao thc tng trn nh TCP hay UDP v a vo trng header cha thng tin ca
host ch.
Cch tt nht hiu giao thc IP l bng cch xem cc trng thng tin header
IP chi tit. Thng tin ny c lit k trong bng sau.

Trng
IP Version
(Phin bn IP)

di
4 bits

M t
Phin bn IP. ( Phin bn giao thc hin nay l
IPv4)

IP Header Length
(Chiu di Header)
Type of Service
(Kiu dch v)

4 bits

Chiu di ca header.

1 byte

Total Length
(Tng chiu di)

2 bytes

Kiu dch v cho php mt thng ip c t


ch thng lng cao hay bnh thng, thi
gian tr l bnh thng hay lu, tin cy bnh
thng hay cao. iu ny c li cho cc gi
c gi i trn mng. Mt s kiu mng s
dng thng tin ny xc nh u tin
Hai byte xc nh tng chiu di ca thng
ip-header v d liu. Kch thc ti a ca
mt gi tin IP l 65,535, nhng iu ny l
khng thc t i vi cc mng hin nay. Kch
thc ln nht c chp nhn bi cc host l
576 bytes. Cc thng ip ln c th phn thnh
cc on-qu trnh ny c gi l qu trnh
phn on
8

Su tm bi: www.daihoc.com.vn

Identification
(nh danh)

2 bytes

Flags

3 bits

Fragment Offset

13 bits

Time to Live

1 byte

Protocol

1 byte

Header Checksum

2 bytes

Source Address
Destination Address
Options
Padding

4 bytes
4 bytes
variable
variabe

Nu thng ip c phn on, trng nh


danh tr gip cho vic lp rp cc on thnh
mt thng ip. Nu mt thng ip c phn
thnh nhiu on, tt c cc on ca mt thng
ip c cng mt s nh danh.
Cc c ny ch ra rng thng ip c c phn
on hay khng, v liu gi tin hin thi c
phi l on cui cng ca thng ip hay
khng.
13 bit ny xc nh offset ca mt thng ip.
Cc on c th n theo mt th t khc vi
khi gi, v vy trng offset l cn thit xy
dng li d liu ban u. on u tin ca mt
thng ip c offset l 0
Xc nh s giy m mt thng ip tn ti
trc khi n b loi b.
Byte ny ch ra giao thc c s dng mc
tip theo cho thng ip ny. Cc s giao th c
y l ch l checksum ca header. Bi v
header thay i vi tng thng ip m n
chuyn ti, checksum cng thay i.
Cho bit a ch IP 32 bit ca pha gi
a ch IP 32 bit ca pha nhn

Bng 1.2

Cc a ch IP

Mi nt trn mng TCP/IP c th c nh danh bi mt a ch IP 32-bit. Thng


thng mt a ch IP c biu din bi b bn x.x.x.x, chng hn 192.168.0.1 . Mi s
trong bn s ny biu din mt byte ca a ch IP.
Mt a ch IP gm hai phn: phn mng v phn host. Ty thuc vo lp mng,
phn mng bao gm mt, hoc hai hoc ba byte u tin.

Lp
Byte 1
A
Networks (1-126)
B
Networks (128191)
C
Networks (192223)

Byte 2
Byte 3
Host (0-255)
Host (0-255)
Networks (0-255) Host (0-255)

Byte 4
Host (0-255)
Host (0-255)

Networks (0-255) Networks (0-255) Host (0-255)


Bng 1.3

Bit u tin ca a ch mng lp A l 0,v vy byte u tin ca a ch lp A nm


trong di t 00000001 (1) n 01111110 (126). Ba byte cn li phc v cho vic nh
danh cc nt trn mng, cho php ta kt ni hn 16 triu thit b vo mng lp A. Ch
rng cc mng trong bng trn khng cp ti cc a ch c byte u l 127-y l
khong a ch d phng. a ch 127.0.0.1 l a ch ca localhost, v a ch 127.0.0.0 l
a ch loopback.

Su tm bi: www.daihoc.com.vn

Cc a ch IP ca cc mng thuc lp B lun lun c hai bit u tin ca byte u


l 10, a ra khong a ch l 10000000 (128) n 10111111 (191). Byte th hai dng
nh danh mng c gi tr t 0 n 255, hai byte cn li nh danh cc nt trn mt
mng; tng cng l 65534 thit b.
Cc a ch IP ca cc mng thuc lp C lun lun c ba bit u tin ca byte u
l 110, khong gi tr ca byte u l t 11000000 (192) n 11011111 (223). Mng ny
ch c mt byte c thit lp nh danh host, v vy ch c 254 thit b c kt ni
vo mng lp C.

Cc a ch IP ring

trnh cn kit cc a ch IP, cc host khng c kt ni trc tip vi Internet


c th s dng mt a ch trong cc khong a ch ring. Cc a ch IP ring khng duy
nht v tng th, m ch duy nht v mt cc b trong phm vi mng . Tt c cc lp
mng d tr cc khong nht nh s dng nh l cc a ch ring cho cc host
khng cn truy cp trc tip ti Internet. Cc host nh vy vn c th truy cp Internet
thng qua mt gateway m khng cn chuyn tip cc a ch IP ring.

Lp
A
B
C

Khong a ch ring
10
172.16-172.31
192.168.0-192.168.255
Bng 1.4

Cc subnet

Vic kt ni hai nt ca hai mng khc nhau cn c mt router. nh danh host ca


mng lp A cn c 24 bit; trong khi mng lp C, ch c 8 bit. Router phn chia nh danh
host thnh hai phn mt phn c gi l subnet v phn cn li l phn host
3.1.2. IPv6
Tin thn ca giao thc IP c pht trin bi B Quc Phng M nm 1960 v
cho ti nm 1980 h giao thc TCP/IP mi ra i. Bi IP c xy dng da trn cc
giao thc mng DARPA hin c, n tr thnh phin bn 4, gi l IPv4. Lc tng v
cc my di ng cha c kt ni vo Internet nn s host c h tr bi IP l tm .
Nhng hin nay c rt nhiu thit b c kt ni vo Internet, nhu cu v s a ch IP
tng cao. Mt phin bn mi ca a ch IP c pht trin bi IETF: IPv6. S thay i
quan trng nht so vi IPv4 l vic s dng 128bit nh a ch cc nt ch khng
phi l 32bit na.
3.1.3. -S hiu cng
Giao thc IP s dng cc a ch IP nh danh cc nt trn mng, trong khi tng
giao vn s dng cc im cui (endpoint) nh danh cc ng dng. Cc giao thc
TCP v UDP s dng mt s hiu cng cng vi mt a ch IP xc nh im cui ca
mt ng dng.
Cc s hiu cng ca TCP v UDP c phn thnh ba loi

Cc s hiu cng h thng

Cc s hiu cng ngi dng

Cc s hiu cng ring v ng

Cc s hiu cng h thng nm trong khong t 0 n 1023. Cc cng h thng


ch c s dng bi cc tin trnh c quyn u tin ca h thng. Cc giao thc ni
ting c cc s hiu cng nm trong khong ny.

10

Su tm bi: www.daihoc.com.vn

Cc s hiu cng ngi dng nm trong khong t 1024 n 49151. Cc ng


dng server ca bn s nhn mt trong cc s ny lm cng, hoc bn c th ng k s
hiu cng vi IANA .
Cc cng ng nm trong khong t 49152 n 65535. Khi khng cn thit phi
bit s hiu cng trc khi khi ng mt ng dng, mt s hiu cng trong khong ny
s l thch hp. Cc ng dng client kt ni ti server c th s dng mt cng nh vy.
Nu chng ta s dng tin ch netstat vi ty chn a, chng ta s thy mt danh
sch tt c cc cng hin ang c s dng, n cng ch ra trng thi ca lin kt-n
ang nm trong trng thi lng nghe hay lin kt c thit lp.

Hnh 1.5
3.1.4. TCP (Transmission Control Protocol)
Giao thc TCP l giao thc truyn tin hng lin kt c th s dng truyn tin vi
tin cy cao. Trong giao thc tng 4 c th gi cc xc thc rng nhn d liu
v yu cu truyn li d liu nu cha nhn c d liu hoc d liu b hng.
Cc trng header c lit k trong bng sau:

Trng
Cng ngun (source
port)
Cng ch
(destination port)
S th t (Sequence
Number)
Acknowledge
Number
Data offset
Reserved
Control
Window Size

di
2
bytes
2
bytes
4
bytes

M t
S hiu cng ca ngun
S hiu cng ch
S th t c to ra bi ngun v c s dng
bi ch sp xp li cc gi tin to ra thng
ip ban u, v gi xc thc ti ngun.

4
bytes
4
Cc chi tit v ni d liu gi tin bt u
bits
6 bit D phng
2

Trng ny ch ra kch thc ca vng m nhn.


11

Su tm bi: www.daihoc.com.vn

Checksum
Urgent Pointer

bytes Pha nhn c th thng bo cho pha gi kch thc


d liu ti a m c th c gi i bng cch s
dng cc thng ip xc thc
2
Checksum cho header v d liu xc nh xem
bytes gi tin c b hng khng
2
Trng ny thng bo cho pha nhn bit c d liu
bytes khn

Options
Padding
Bng 1.5
Giao thc TCP l mt giao thc phc tp v mt thi gian do c ch bt tay,
nhng giao thc ny m bo cc gi tin n ng ch.
Mt s giao thc ng dng s dng TCP nh HTTP, FTP, SMTP, v Telnet. TCP
yu cu mt lin kt phi c thit lp trc khi d liu c gi i. ng dng server
phi thc hin mt thao tc m th ng to mt lin kt vi mt s hiu cng cho
trc.
3.1.5. UDP-User Datagram Protocol
Ngc vi giao thc TCP, UDP l mt giao thc c tc truyn tin nhanh v n
ch xc nh c ch ti thiu truyn d liu. Tt nhin iu ny c mt s nhc im.
Cc thng ip c th c nhn theo bt k th t no. Thng ip c gi u tin
c th c nhn sau cng. Khng c g m bo l cc gi tin s n ch, v cc thng
ip c th b tht lc, hoc thm ch c th nhn c hai bn sao ca cng mt thng
ip.
UDP khng cn giai on thit lp lin kt, d liu c gi i ngay khi cn. UDP
khng gi cc thng ip xc thc, v vy d liu c th nhn c hoc b tht lc. Nu
cn truyn d liu c tin cy n phi c thc hin trong mt giao thc mc cao
hn.
Vy u l u im ca giao thc UDP, ti sao chng ta li cn s dng mt giao
thc c tin cy thp nh vy? hiu c l do ti sao ta li phi s dng giao thc
UDP ta cn phn bit gia truyn unicast, broadcast v multicast.
Mt thng ip unicast c gi t nt ny ti nt khc. Kiu truyn tin l truyn
tin im-im. Giao thc TCP ch h tr truyn tin unicast. Nu mt server mun truyn
tin vi nhiu client bng cch s dng giao thc UDP, mi client phi thit lp mt lin
kt, v cc thng ip ch c th gi ti mt nt. Truyn tin broadcast ngha l mt thng
ip c th c gi ti tt c cc nt trong mt mng. Multicast cho php cc thng ip
c truyn ti mt nhm cc nt c la chn.
UDP c th c s dng cho truyn tin unicast nu cn ti tc truyn tin
nhanh, nh truyn tin a phng tin, nhng u im chnh ca UDP l truyn tin
broadcast v truyn tin multicast. Thng thng chng ta khng mun tt c cc nt gi
v cc xc thc cho server v nh vy s lm cho server qu ti.
Header UDP ngn v n gin hn rt nhiu so vi TCP

Trng thng tin


Source
port
ngun)

Destination Port
Length

di
(Cng 2 byte

2 byte
2 byte

M t
Xc nh cng ngun l mt ty chn vi
UDP. Nu trng ny c s dng, pha
nhn thng ip c th gi mt phc p ti
cng ny
S hiu cng ch
Chiu di ca thng ip bao gm header v
12

Su tm bi: www.daihoc.com.vn

Checksum

2 byte

d liu
kim tra tnh ng n

Bng 1.5
3.1.6. ICMP-Internet Control Message Protocol
ICMP l mt giao thc c pht trin t giao thc IP, im khc bit ca ICMP so
vi giao thc IP l cc thng tin phn hi v trng thi ca h thng c ICMP phn hi
bi cc thng ip.
Cc li c pht hin c th c thng bo bng cc thng ip ICMP. Cc
thng ip ICMP c s dng gi cc thng tin phn hi v tnh trng ca mng. V
d, mt router gi thng ip ICMP destination unreachable nu khng tm thy mt
im vo cho mng trong bng nh tuyn. Mt router cng c th gi thng ip ICMP
redirect nu tm thy ng i tt hn.
ICMP khng c trn giao thc IP m c gi i trong cc header IP.

Trng thng tin


Type

di
1 byte

Code

1 byte

Checksum

2 byte
4 byte

Header IP thng thng

M t
Trng ny xc nh kiu thng ip ICMP. V d,
type c gi tr 3 ngha l khng n c ch, 11
ngha l qu thi gian, v 12 ngha l cc tham s
header khng ng
Code cung cp thng tin v kiu thng ip. Nu kiu
type l 3, destination unreachable, th code xc nh
l mng (0), host (1), hay protocol (2), hoc port (3)
l khng th n c
Checksum ca thng ip ICMP
Bn byte cui cng ca header ICMP c th cung cp
thng tin b tr ty thuc vo kiu thng ip

Bng 1.6
Mt s kiu c th c gi bng cch s dng cc thng ip ICMP:

o Echo, Echo Reply


o Lnh ping gi lnh ICMP ti thit b ch, xem thit b hot ng tt hay
khng v c kt qu tr li li.
o Destination unreachable (Khng n c ch), Redirect
Mt router tr v thng ip ICMP destination unreachable nu khng
th lin lc c vi thit b ch, hoc redirect (nh hng li) nu
tm thy mt ng i tt hn ti ch.
o TTL (Time To Live):Vt qu thi gian cho php

Lnh Ping

Tin ch dng lnh ping gi mt thng ip ICMP ti thit b ch c xc nh bi


hostname v a ch IP trong lnh ping. Nu thit b l n c th ICMP Echo Reply
c gi tr li.
Lnh ny rt hu ch khi mun kim tra xem c lin lc c vi thit b hay khng,
hay l c cc vn li trung gian

13

Su tm bi: www.daihoc.com.vn

Hnh 1.6
3.1.7. IGMP-Internet Group Management Protocol
Tng t vi ICMP, IGMP l s m rng ca giao thc IP v phi c ci t
trong module IP. IGMP c s dng bi cc ng dng multicast. Khi gi cc thng ip
broadcast ti mt LAN, mi nt trong LAN phn tch thng ip v gi ln cho tng giao
vn kim tra xem c ng dng no mun nhn cc thng ip t cng broadcast. Nu
khng ng dng no lng nghe, thng ip b ph hy v khng vt qua c tng giao
vn. iu ny ngha l mi host cn mt s chu k ca CPU cho d thng ip broadcast
c cn hay khng.
Multicast gii quyt vn ny, bng cch gi cc thng ip ti mt nhm cc nt
ch khng phi l tt c cc nt trong LAN. Thit b giao tip mng c th pht hin xem
h thng c cn quan tm n thng ip hay khng bng cch phn tch a ch
broadcast m khng cn s tr gip ca CPU.
3.2. Cc giao thc Internet
3.2.1. Giao thc truyn tp tin FTP (File Transfer Protocol)
FTP c s dng ti cc tp ln server, v ti v cc tp t server. N l mt
giao thc mc ng dng, da trn nn tng ca giao thc TCP. ng dng client cung
cp mt giao din ngi dng v to ra mt yu cu FTP tng ng vi yu cu ca
ngi dng cng vi c t ca FTP. Lnh FTP c gi ti ng dng server thng qua
giao thc TCP/IP, trnh thng dch trn FTP phi thng dch lnh FTP tng ng. Ty
thuc vo lnh FTP, mt danh sch cc tp hoc mt tp t h thng tp ca server
c tr v cho client trong p ng ca FTP.
Giao thc FTP c cc c trng sau:

Truyn d liu vi tin cy cao thng qua giao thc TCP

Cho php truy xut v danh hoc xc thc ngi dng vi username v password

Cc tp tin c truyn i di dng m ASCII hoc d liu nh phn


Cc lnh FTP c th c nhm thnh cc loi sau:

Cc lnh iu khin vic truy xut


Cc lnh iu khin vic truy nhp xc nh tn ngi dng v mt khu, cc ch
thit lp c th c thit lp li (REIN), v lin kt c th c kt thc (QUIT).

Cc lnh truyn tham s


Truyn FTP c th c cu hnh vi cc lnh tham s truyn. Thay i vic truyn
d liu t ASCII thnh nh phn, nn d liu, thay i cc cng gi d liu c h
tr bi cc lnh ny.

Cc lnh dch v FTP

14

Su tm bi: www.daihoc.com.vn

Sao chp cc tp tin t server (RETR), sao chp cc tp tin ln server (STOR), xa
cc tp (DELE), thay i cc tn tp tin (RNTO), to cc th mc (MKD), v yu cu lit
k mt danh sch cc tp.
FTP Client
Cch tt nht lm quen vi giao thc FTP l bng cch s dng tin ch ftp nh
di y. Chng trnh ftp hot ng thng qua du nhc lnh ftp> cho php chng ta
nhp vo cc lnh. Cc lnh ny khc vi cc lnh ca giao thc FTP-ta c th thy
c chng bng cch nhp vo ?. Di y, ta s nhp vo lnh open ftp.microsoft.com
to ra mt lin kt ti host ftp.microsoft.com. Nhp vo username l anonymous. p
ng 230 ch ra lin kt c thit lp.

Hnh 1.7

Mt client FTP khc c trong trnh duyt Microsoft Internet Explorer

15

Su tm bi: www.daihoc.com.vn

Hnh 1.8
3.2.2. HTTP-Giao thc truyn siu vn bn (Hypertext Transfer Protocol)
HTTP l mt giao thc c s dng bi cc ng dng web. HTTP l mt giao
thc c tin cy cao, c ci t da trn nn giao thc TCP. Tng t nh FTP,
HTTP cng c s dng truyn cc tp tin qua mng. Tuy nhin, khng ging vi
FTP, n c cc c trng nh m d liu, nh danh cc ng dng client, h tr cho cc
nh dng km theo khc, nh MIME,Nhng c trng ny c trong header HTTP.
3.2.3. HTTPS-HTTP over SSL (Secure Socket Layer)
Nu c yu cu trao i d liu mt vi mt webserver, ngi ta s dng giao thc
HTTPS. HTTPS l mt s m rng ca giao thc HTTP v cc nguyn tc c tho
lun mc trc vn c p dng y. Tuy nhin c ch th hon ton khc, HTTPS
s dng lp Socket bo mt SSL(Secure Socket Layer) c pht trin bi Netscape.
SSL tng trn ca giao thc TCP v bo mt thng tin c truyntrn mng bng
cch s dng nguyn tc m ha cng khai.
3.3. Cc giao thc E-mail
C mt s giao thc s dng cho e-mail ph bin nh sau

SMTP-Simple Mail Transfer Protocol


SMTP l mt giao thc gi v nhn cc e-mail. N c th c s dng gi

e-mail gia client v server s dng cng giao thc giao vn, hoc gi e-mail gia cc
server s dng cc giao thc giao vn khc nhau. SMTP c kh nng chuyn tip cc
thng ip thng qua cc mi trng dch v giao vn. SMTP khng cho php chng ta
c cc thng ip t mt mail server.

POP3-Post Office Protocol

POP3 c thit k cho cc mi trng khng c lin kt. Trong cc mi trng


khng duy tr lin kt thng trc vi mail server, v d, trong cc mi trng trong
thi gian lin kt lu. Vi POP3, client c th truy xut ti server v tm kim cc thng
ip m server hin ang nm gi. Khi cc thng ip c tm kim t client, chng
thng b xa khi server, mc d iu ny l khng cn thit.

IMAP-Inernet Message Access Protocol

16

Su tm bi: www.daihoc.com.vn

Ging nh POP3, IMAP c thit k truy xut ti cc mail trn mt mail server.
Tng t nh cc client POP3, mt client IMAP c th c ch offline. Khng ging
nh cc client POP3, cc client IMAP c cc kh nng ln hn trn ch online, nh
tm kim cc header, cc on mail, tm kim cc thng ip c th trn cc server, v
thit lp cc c nh c tr li. V cn bn, IMAP cho php cc client lm vic trn cc
hp th xa nh l cc hp th cc b.

NNTP-Network News Transfer Protocol

NNTP l giao thc tng ng dng gi, chuyn tip, v tm kim cc thng ip
to nn mt phn ca cc cuc tho lun nhm tin. Giao thc ny cung cp kh nng truy
cp ti mt server tin tc tm kim cc thng ip c chn lc v h tr cho vic truyn
thng ip t server ti server.
3.4. Mt s giao thc ng dng khc
C hai giao thc ng dng th v khc l: SNMP v Telnet
SNMP (Simple Network Management Protocol) cho php qun l cc thit b trn
mng. C cc thng tin nh cc bin m hiu nng t cc thit b SNMP qun l cc
thit b mt cch hiu qu bng cch s dng cc bo chung bo hiu c kch hot
bi cc vn v hiu nng v li, v cho php cu hnh cc thit b.
Mt tc t SNMP c gn vi mt thit b mng c th s c mt c s d liu
MIB (Management Information Base) bao gm tt c cc thng tin c th kim sot v
thit b theo phng php hng i tng. Mt client SNMP truy xut thng tin trong
c s d liu bng cch gi cc yu cu GET. Ngc li, yu cu SET c s dng
cu hnh c s d liu MIB.
Trong nhng trng hp c li hoc c cc vn v hiu nng, tc t SNMP gi
cc thng ip ti SNMP client.

4. Soket
Socket l mt phng php thit lp kt ni truyn thng gia mt chng trnh
yu cu dch v v mt chng trnh cung cp dch v trn mng LAN, WAN, hay Internet
v i khi l gia cc tin trnh trong cng mt my tnh. Thng tin ca mt Socket bao
gm a ch IP v s hiu cng.

5. Dch v tn min
Cc a ch IP vit di dng 4 nhm bit khng d nh mt cht no, v vy c
ngi ta a ra mt h thng tng ng d nh hn i vi ngi s dng. Do
cc tn min ny l duy nht, nn h thng tn min c s dng h tr h thng
tn c phn cp
Nh ta bit, tin thn ca mng Internet l mng Arpanet ca B quc phng
M. Thi k s my tnh mc lit k chng trong mt tp tin vn bn v lu
trn tng my kt ni vo mng. Thng tin trong tp tin ny bao gm a ch IP v
hostname. Tuy nhin do quy m ca mng ngy cng m rng ngi ta cn c cc my
tnh chuyn dng lu tr v phn gii tn min. Cc my tnh c chc nng nh vy
c gi l My ch DNS. V d www.microsoft.com, www.bbc.co.uk. Cc tn ny khng
bt buc phi c ba phn, nhng vic c bt u t phi sang tri, tn bt u vi min
mc cao. Cc min mc cao l cc tn nc c th hoc tn cc t chc v c nh
ngha bi t chc IANA. Cc tn min cp cao c lit k trong bng sau. Trong nhng
nm gn y, mt s tn min cp cao mi c a vo.
Tn min

M t

.aero

Cng nghip hng khng

.biz

Doanh nghip

.com

Cc t chc thng mi

17

Su tm bi: www.daihoc.com.vn

.coop

Cc quan h hp tc

.info

Khng rng buc v s dng

.museum

Cc vin bo tng

.name

Cc tn c nhn
Bng 1.7

Tn min

M t

.net

Cc mng

.org

Cc t chc phi chnh ph

.pro

Cc chuyn gia

.gov

Chnh ph Hoa K

.edu

Cc t chc gio dc

.mil

Qun i M

.int

Cc t chc c thnh lp bi cc hip c quc t


gia cc chnh ph.
Bng 1.8

Ngoi ra, cn c cc tn min cho cc quc gia


Tn min

M t

.at

Autralia

.de

Germany

.fr

France

.uk

United Kingdom

.vn

Vietnam
Bng 1.9

5.1. Cc server tn min


Cc hostname c phn gii bng cch s dng cc server DNS (Domain Name
Service). Cc server ny c mt c s d liu cc hostname v cc b danh nh x cc
tn thnh a ch IP. Ngoi ra, cc DNS cng ng k thng tin cho cc Mail Server, cc
s ISDN, cc tn hm th, v cc dch v.
Trong Windows, chnh cc thit lp TCP/IP xc nh server DNS c s dng
truy vn. Lnh ipconfig/all ch ra cc server DNS c thit lp v cc thit lp cu
hnh khc. Khi kt ni vi mt h thng xa s dng hostname, trc tin server DNS
c truy vn tm a ch IP. Trc tin, DNS kim tra trong b c s d liu ca ring
n v b nh cache. Nu tht bi trong vic phn gii tn, server DNS truy vn server
DNS gc.
5.2. Nslookup

18

Su tm bi: www.daihoc.com.vn

Dch v tn min (Domain Name Service) L tp hp nhiu my tnh c lin kt


vi nhau v phn b rng trn mng Internet. Cc my tnh ny c gi l name server.
Chng cung cp cho ngi dng tn, a ch IP ca bt k my tnh no ni vo mng
Internet hoc tm ra nhng name server c kh nng cung cp thng tin ny.

Hnh 1.9
C ch truy tm a ch IP thng qua dch v DNS
Gi s trnh duyt cn tm tp tin hay trang Web ca mt my ch no , khi
c ch truy tm a ch s din ra nh sau:
1. Trnh duyt yu cu h iu hnh trn client chuyn hostname thnh a ch IP.
2. Client truy tm xem hostname c c nh x trong tp tin localhost, hosts hay
khng?
-Nu c client chuyn i hostname thnh a ch IP v gi v cho trnh duyt.
-Nu khng client s tm cch lin lc vi my ch DNS.
3. Nu tm thy a ch IP ca hostname my ch DNS s gi a ch IP cho client.
4. Client gi a ch IP cho trnh duyt.
5. Trnh duyt s dng a ch IP lin lc vi Server.
6. Qu trnh kt ni thnh cng. My ch gi thng tin cho client.

6. Internet
Trong chng ny chng ta cp ti nhiu cng ngh c s: phn cng, cc giao
thc, v cc h thng tn min. Trong phn ny chng ta s tho lun cc vn th v
khc nh:
Intranet v Extranet

Firewall v Web Proxy

Cc dch v Web

6.1. Intranet v Extranet


Mt intranet c th s dng cc cng ngh TCP/IP tng t nh vi Internet. S
khc bit l intranet l mt mng ring, trong tt c mi ngi u bit nhau. Intranet

19

Su tm bi: www.daihoc.com.vn

khng phc v cho vic truy xut chung, v mt s d liu cn phi c bo v khi
nhng truy xut t bn ngoi.
Mt extranet l mt mng ring ging nh intranet nhng cc extranet kt ni nhiu
Intranet thuc cng mt cng ty hoc cc cng ty i tc thng qua Internet bng cch s
dng mt tunnel. Vic to ra mt mng ring o trn Internet tit kim chi ph nhiu cho
cng ty so vi vic thu ring mt ng truyn thit lp mng.
6.2. Firewall
C nhng k ph hoi trn mng Internet!. ngn chn chng, ngi ta thng
thit lp cc im truy cp ti mt mng cc b v kim tra tt c cc lung truyn tin vo
v ra khi im truy nhp . Phn cng v phn mm gia mng Internet v mng cc
b, kim tra tt c d liu vo v ra, c gi l firewall.
Firewall n gin nht l mt b lc gi tin kim tra tng gi tin vo v ra khi
mng, v s dng mt tp hp cc quy tc kim tra xem lung truyn tin c c
php vo ra khi mng hay khng. K thut lc gi tin thng da trn cc a ch mng
v cc s hiu cng.
6.3. Proxy Server
Khi nim proxy c lin quan n firewall. Nu mt mt firewall ngn chn cc host
trn mng lin kt trc tip vi th gii bn ngoi. Mt my b ngn kt ni vi th gii
bn ngoi bi mt firewall s yu cu truy xut ti mt trang web t mt proxy server cc
b, thay v yu cu mt trang web trc tip t web server xa. Proxy server sau s
yu cu trang web t mt web server, v sau chuyn kt qu tr li cho bn yu cu
ban u. Cc proxies cng c s dng cho FTP v cc dch v khc. Mt trong nhng
u im bo mt ca vic s dng proxy server l cc host bn ngoi ch nhn thy proxy
server. Chng khng bit c cc tn v cc a ch IP ca cc my bn trong, v vy
kh c th t nhp vo cc h thng bn trong.
Trong khi cc firewall hot ng tng giao vn v tng internet, cc proxy server
hot ng tng ng dng. Mt proxy server c nhng hiu bit chi tit v mt s giao
thc mc ng dng, nh HTTP v FTP. Cc gi tin i qua proxy server c th c kim
tra m bo rng chng cha cc d liu thch hp cho kiu gi tin. V d, cc gi tin
FTP cha cc d liu ca dch v telnet s b loi b.
V tt c cc truy nhp ti Internet c chuyn hng thng qua proxy server, v
th vic truy xut c th c kim sot cht ch. V d, mt cng ty c th chn gii
php phong ta vic truy xut ti www.playboy.com nhng cho php truy xut ti
www.microsoft.com

20

Su tm bi: www.daihoc.com.vn

Chng 2

Gii thiu ngn ng lp trnh Java


1. Gii thiu cng ngh Java
1.1 Lch s pht trin
Lch s pht trin ca Java bt u nm 1991 khi SUN tin hnh cc d n lp trnh cho
vi x l dng trong cc thit b in t khc nhau. C++ khng p ng c cc yu
cu ny v C++ cho em m ngun t my ny sang my khc nhng sau khi bin dch
li hon ton ph thuc vo tng b vi x l c th. Trong khi b vi x l dng trong
cc thit b in t rt a dng v c vng i kh ngn ngi. Nu ta thay i b x l
dn n cn phi thay i trnh bin dch C++, iu ny gy ln tn km. SUN thit
k mt ngn ng lp trnh mi c tnh kh chuyn cao hn chnh l Java. Java l tn
a phng ni xut x ca mt loi c ph ngon ni ting.
Java c chnh thc cng b nm 1995 v ngay lp tc to ln mt tro lu
mi trn ton th gii v t n nay vn to c sc cun ht mnh m. Bi v
Java khng ch n thun l mt ngn ng lp trnh m n l gii php cho nhiu vn
.
1.2. Cu trc ca my o Java (Java Virtual Machine)
Chng trnh ng dng hot ng bng cch s dng cc i tng ca Java (Java
Object). My o Java to thnh mt cu ni gia trnh ng dng vit bng Java v h
iu hnh.

Chng trnh Java: tp hp cc i tng


My o Java
H iu hnh
My o Java bao gm cc thnh phn sau :

Trnh np lp (Class Loader): c bytecode t a hoc t kt ni mng.

Trnh kim tra lp (Class Verifier): Kim tra cc lp s khng sinh ra cc li nh


hng ti h thng khi thc thi.

Trnh thc thi (Execution Unit): s thc hin cc lnh c quy nh trong tng
bytecode.

Trong b cng c Java, tp tin java.exe chnh l my o Java.


1.3 Cc c trng ca Java

Java l mt mi trng c lp (Independent Platform)

Do cu trc ca Java nn ta c th son tho chng trnh trn bt k h thng no.


Sau khi c bin dch thnh tp tin lp (*.class) ng dng c th thc thi bt k
h thng no. l c tnh m cc ngn ng khc khng c.

1
Su tm bi: www.daihoc.com.vn

Java l mt ngn ng lp trnh hng i tng thun ty (Pure Object


Oriented Programming)

Java l mt ngn ng lp trnh hng i tng thun ty, mi th trong Java u l


i tng.

Java l mt ngn ng c tnh kh chuyn (Portibility)

Java c tnh kh chuyn i vi c m ngun v bn thn m bin dch (bytecode)

Java l mi trng x l phn tn (Distributed Enviroments)

Bytecode khng ph thuc vo h thng v vy bytecode c th nm phn tn trn


mng. Vic lin kt vi th vin ch c thc hin vo lc chy chng trnh do vy
m byte thng gn nh. Chng trnh Java c np dn mt cch linh hot nn
khng gy qu ti cho mng. Ngoi ra, Java cn cho php x l a tuyn on. C ch
truyn thng ip thun tin cho vic t chc mng.

Java l mi trng an ton

Khi pht trin cc ng dng phn tn th mt trong nhng vn c quan tm hng


u l an ton h thng. Java c thit k m bo an ton cho ngi dng Java
trn mng. Java c bn tng bo an:
Tng 1: Mc ngn ng v trnh bin dch. Java khng c kiu con tr. Trnh bin dch
kim tra kiu rt cht ch. Mi chuyn i kiu u phi c thc hin mt cch tng
minh. Trnh bin dch Java t chi sinh ra m byte nu m ngun khng tun th
nghim ngt cc quy tc an ton.
Tng 2: Trnh np lp (Class Loader) C kh nng phn bit nhng lp n t mng v
nhng lp np t h thng. Nh kh nng phn bit nh vy lp c np qua mng
c khng ch cht ch, khng c php thc hin cc thao tc mc thp.
Tng 3: Trnh kim tra m byte. Trnh ny s kim tra m byte vo lc chy chng
trnh bo m chng trnh Java c bin dch mt cch ng n. Khi thc hin
s khng gy li nh hng ti h thng cng nh khng ng chm ti d liu ring
t trn my khch.
Tng 4: Trnh bo an. Kim tra m byte vo lc chy nhm bo m m ang xt khng
vi phm qui tc an ton c thit lp. Cc thao tc ca ng dng c xem l c
kh nng gy nguy him nh c, xa tp u phi c Trnh bo an cho php.

Java cung cp cho ngi lp trnh mt th vin khng l

Java cung cp cho ngi lp trnh mt th vin khng l cc hm chun, gi l core


API. Cc hm chun ny c t trong cc gi.
Java c c ch qun l b nh t ng
Qun l b nh l mt trong nhng vn phc tp i vi C v C++. Khi thc hin
chng trnh ngi lp trnh chu trch nhim khi to cc vng nh, sau khi dng phi
gii phng cc vng nh ny. Ch cn mt li nh c th lm cn kit ti nguyn dn
n treo h thng.
Java loi b gnh nng ny cho ngi lp trnh. Cc vng nh c t ng gii
phng nu nh n khng tham chiu n bt k i tng no ang hot ng

Chi ph pht trin ng dng bng Java thp

2
Su tm bi: www.daihoc.com.vn

Khi pht trin ng dng da trn cng ngh Java th s c rt nhiu cng c pht trin
v dch v c cung cp min ph.
1.4. Cc n bn Java

J2SE ( Java 2 Platform, Second Edition)

y l n bn chun, bao gm mt mi trng thi gian chy v mt tp hp cc API


xy dng mt lot cc ng dng khc nhau t applet, cho ti cc ng dng c lp
chy trn cc nn khc nhau, ng dng cho client cho cc ng dng doanh nghip khc
nhau.
J2EE (Java 2 Platform, Enterprise Edition (J2EE)
J2EE l nn tng xy dng cc ng dng pha server.
J2ME (Java 2 Platform, Micro Edition )
n bn ny cho php xy dng cc ng dng Java cho cc vi thit b (cc thit b c
mn hnh hin th v h tr b nh ti thiu, nh in thoi di ng v cc thit b tr
gip c nhn).
1.5. Cng c pht trin
SUN cung cp mt s tin ch cho php bin dch bt li v to ti liu cho mt ng
dng Java. JDK bao gm:

javac: B bin dch chuyn m ngun thnh bytecode.

java: B thng dch thc thi cc ng dng Java trc tip t tp tin lp.

apppletviewer: Thc thi Java Applet t ti liu html.

1.6. Cc kiu ng dng trong Java


C hai kiu ng dng
ng dng c lp (Standalone Applicaiton) Cho php lp trnh nh cc ngn
ng lp trnh khc nh Pascal, C.

ng dng k sinh (Applet) Cho php to ra chng trnh lin kt vi cc vn bn


Web v c khi ng bi trnh duyt h tr Java.

thy c s khc bit gia hai kiu ng dng ni trn chng ta c th xem nhng
s khc bit v c trng ca hai kiu ng dng bng di y:
ng dng c lp

Java Applet

Khai bo

L lp con ca bt k lp no Phi l lp con ca Applet


trong cc gi th vin cc lp

Giao din ha

Ty chn

Do trnh duyt Web quyt


nh

Yu cu b nh

B nh ti thiu

B nh dnh cho c trnh


duyt v applet

Cch np chng trnh

Np bng dng lnh

Thng qua trang Web

D liu vo

Thng qua cc tham s trn Cc tham s t trong tp

3
Su tm bi: www.daihoc.com.vn

dng lnh

HTML gm a ch, kch thc ca trnh duyt

Cch thc thc hin

Mi hot ng c bt u v Gi cc hm: init(), start(),


kt thc main() nh- trong stop(), destroy(), paint()
C/C++

Kiu ng dng

ng dng trn cc my ch
Server. Cng c pht trin phn
mm, - ng dng trn cc my
khch
Bng 2.1

Cc ng dng trn Web

1.7. Ci t chng trnh dch Java v cc cng c


ci t Java J2SDK ta cn ti v b J2SDK ti trang http://www.sun.com ,
trang ny cp nht nhng phin bn mi nht ca Java. Sau ta ti v b cng c
son tho Edit Plus ti a ch http://www.editplus.com .
Cc bc ci t Java
Bc 1: Ci t J2SDK. Sau khi ci t xong, Java c ci t ti th mc:
C:\Program Files\Java. Trong th mc ny c hai th mc con l: jdk1.5.0_01 v
jre1.5.0_01.
Cng c pht trin nm trong th mc:

C:\Program Files\Java\jdk1.5.0_01\bin: Bao gm cc cng c cho php ta pht


trin, thc thi, g ri v son tho cc chng trnh c vit bng ngn ng
lp trnh Java.

Mi trng thi gian chy (Runtime Environment)

Nm trong th mc con JRE. N bao gm mt my o Java, cc th vin lp, v


cc tp tin h tr vic x l cc chng trnh c vit bng ngn ng lp trnh
Java.

Cc th vin

Nm trong th mc con lib. Cc th vin lp v cc tp tin b tr cn cho cc


cng c pht trin...

Cc ng dng v applet demo

Nm trong th mc demo. Th mc ny bao gm cc v d, m ngun lp trnh


cho Java/

Bc 2: Thit lp cc bin mi trng


Bin mi trng path
Trn desktop ta kch chut phi vo biu tng My Computer, sau chn th
Advanced, nhy chut vo nt lnh Enviroment Variable, xut hin ca s cho php ta
thit lp bin mi trng nh sau:

4
Su tm bi: www.daihoc.com.vn

Hnh 2.1
Nhy vo nt lnh New nhp vo thng tin v bin mi trng

Hnh 2.2
Sau nhy chut vo nt lnh OK hon thnh
Thit lp bin mi trng classpath cng tin hnh tng t

5
Su tm bi: www.daihoc.com.vn

Hnh 2.3
Bc 3:
Ci t chng trnh son tho Edit Plus.
Bc 4:
To lp cc cng c bin dch v thc thi chng trnh trong Edit Plus. Giao din
ca chng trnh son tho nh sau:
1.8. Mt s v d m u
V d 1: To chng trnh Java cho php nhp mt dng k t t i dng lnh v hin
th xu k t ln trn mn hnh:
class ViDu1
{
public static void main(String[] args)
{
System.out.println(args[0]);
}
}
Bin dch chng trnh
C:\>javac ViDu1.java
Thc hin chng trnh
C:\>java ViDu1 "Lam quen voi ngon ngu lap trinh Java"
Kt qu in ra l:
Lam quen voi ngon ngu lap trinh Java
Chng trnh trn ta nhn thy ngay y l mt chng trnh ng dng c lp n
gin. Chng trnh thc hin mt tc v ht sc n gin l nhn mt xu k t c
truyn vo t i dng lnh sau in xu k t ln mn hnh. i dng lnh l mt
mng xu k t String[] args. Khi ta thc thi chng trnh trn, args[0] c gn bng
xu k t "Lam quen voi ngon ngu lap trinh Java".
V d 2: To mt applet hin th mt xu k t ln mn hnh
import java.applet.*;
import java.awt.*;

6
Su tm bi: www.daihoc.com.vn

public class ViDu2 extends Applet


{
public void paint(Graphics g)
{
g.drawString("Chuc mung cac ban da thanh cong voi vi du thu 2",30,30);
}
}
Bin dch applet
C:\>javac ViDu2.java
To mt trang html nhng applet
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<BODY>
<applet code="ViDu2.class" width=400 height=400>
</BODY>
</HTML>
Trong ti liu trn ta thy dng <applet code="ViDu2.class" width=400 height=400>
cho php ta nhng mt applet trong mt vn bn web.
thc thi applet ta ch cn hin th trang ViDu2.html trn trnh duyt. Kt qu c th
hin hnh di y:

7
Su tm bi: www.daihoc.com.vn

Hnh 2.4

2. Ngn ng lp trnh Java


2.1 Cu trc tp ca mt chng trnh Java
Mt tp tin chng trnh Java c th c cc phn c c t nh sau:
1. nh ngha mt gi l ty chn thng qua nh danh ca gi (package).
2. Mt s lnh nhp import (0 hoc nhiu).
3. Mt s nh ngha lp v interface c th nh ngha theo th t bt k
V d gi s c tp ngun Java nh sau:
// Phn 1: Ty chn // nh ngha
gi package GoiNhaTruong;

// Phn 2: (0 hoc nhiu hn) //


cc gi cn s dng import
java.io.*;

// Phn 3: (0 hoc nhiu hn) //


nh ngha cc lp v cc
interface public class NewApp{
...} class C1{...} interface I1{...} //

class Cn {...} interface Im{...}


Hnh 2.5

8
Su tm bi: www.daihoc.com.vn

Lu :

Tp chng trnh Java lun c tn trng vi tn ca mt lp cng khai


(lp cha hm main() nu l ng dng c lp) v c phn m rng l
.java.
Tp NewApp.java nu l chng trnh ng dng c lp th phi c mt
lp c tn l NewApp v lp ny phi c phng thc main(). Phng
thc ny lun c dng: public static void main(String args[]){ // Ni dung
cn thc hin ca chng trnh ng dng }
Khi dch (javac) th mi lp trong tp chng trnh s c dch thnh
byte code v c ghi thnh tp ring c tn trng vi tn ca lp v c
ui .class. Nhng lp ny s c np vo chng trnh lc thng dch
v thc hin theo yu cu.
Trong chng trnh Java khng c cc khai bo bin, hm tch bit khi
lp v ch c cc khai bo v nh ngha cc lp, interface. Nh th
chng trnh Java c xem nh l tp cc lp, interface v cc i
tng ca chng trao i thng ip vi nhau (bng cc li gi hm)
thc hin cc nhim v ca ng dng.

2.2. nh danh, kiu d liu v khai bo bin


nh danh (Identifier) Tn gi ca cc thnh phn trong chng trnh c gi l nh
danh
nh danh thng c s dng xc nh bin, kiu, phng thc, lp.
Qui tc cho nh danh:

nh danh l mt dy cc k t gm cc ch ci, ch s v cc k t khc: _,


$,...

nh danh khng bt u bng ch s.

di ca nh danh khng gii hn.

Java phn bit ch hoa v ch thng.

Qui c t tn

nh danh cho cc lp: ch ci u ca mi t trong nh danh u vit hoa

V d: MyClass, HocSinh, SocketServer, URLConnection,...

nh danh cho cc bin, phng thc, i tng: ch ci u ca mi t trong


nh danh u vit hoa tr t u tin.

V d: hoTen (h tn), namSinh (nm sinh), tinhTong (tnh tng).


Ch thch
Ch thch trong cc chng trnh gii thch cng vic hoc cch thc hin ngi
c d hiu v tin theo di.

Ch thch trn mt dng

//y l ch thch dng

Ch thch trn nhiu dng

9
Su tm bi: www.daihoc.com.vn

/* y l ch thch khi nhiu dng */


2.3. Cc kiu d liu nguyn thy (primitive datatype)
Kiu d liu c bn nh ngha sn c gi l kiu nguyn thy
Kiu nguyn thy bao gm cc kiu:

Hnh 2.6
Kiu nguyn: char (k t), byte, short, int, long.

Kiu s thc: float, double.

Kiu logic: boolean.


Kiu d liu
char
byte
short
int
long
float
doube

rng
16
8
16
32
64
32
64
Bng 2.2

Ch :
Cc gi tr kiu nguyn thy khng phi l i tng.

Mi kiu d liu c min xc nh v cc php ton xc nh trn n.

Mi kiu d liu nguyn thy c mt lp gi (wrapper class) s dng cc kiu


nguyn thy nh l cc i tng.

10
Su tm bi: www.daihoc.com.vn

Kiu d liu
char
byte
short
int
long
float
double

Lp gi
Char
Byte
Short
Integer
Long
Float
Double
Bng 2.3

2.4. Khai bo cc bin


a. Cc loi bin trong Java
Cc bin thnh phn: l cc thnh phn ca lp v c khi to gi tr mi khi
mt i tng ca lp c to ra.

V d:

URL u ;
HocSinh hs = new HocSinh(Tuan Anh);

Cc bin tham chiu i tng (Object Reference) l bin c s dng x


l cc i tng.

Cc bin tnh (static variable) l bin ca lp i din cho c lp.

Cc bin cc b: l bin c khai bo trong cc phng thc v trong cc


khi.

b. Khai bo bin
kieu_du_lieu bien;
V d:
int i;
char b,c;
float giaBan, dienTich;
c. Khi to gi tr cho cc bin
Cc gi tr mc nh cho cc bin thnh phn
Kiu d liu
boolean
char
byte, short, int, long
float, double
tham chiu i tng

Gi tr mc nh
false
\u000
0
+0.0F,+0.0D
null
Bng 2.4

11
Su tm bi: www.daihoc.com.vn

Qui tc chuyn i kiu trong Java


(<kieu>)<bieu_thuc>
V d
float f = (float)100.15D;
M rng v thu hp kiu

byte

short
int

long

float

double

char
V d 1:M rng kiu
char c = A;
int k =c;
V d 2:Thu hp kiu
int k =10;
char c=(char)k;
2.3. Cc lnh trong Java
Mt lnh c th thay i trng thi ca my tnh: gi tr ca cc bin, cc phn t ca
mng, ni dung ca cc tp tin,
2.3.1. Lnh biu thc
Mt lnh biu thc l lnh c dng:
<Biu thc>;
N c x l bng cch nh gi biu thc m khng cn lu li gi tr tnh ton.
2.3.2. Khi lnh
Khi lnh trong Java tng t nh khi lnh trong C/C++, l nhng lnh nm trong cp
ngoc m { v ng }.
Mt khi lnh l mt dy khng hoc nhiu lnh hoc cc khai bo bin hoc khai bo
lp theo bt k th t no c t trong cp ngoc {}
{
S1;
S2;

Sn;
}

Lnh gn
V d
int a, b, c,d;
d=b*b-4*a*c;

12
Su tm bi: www.daihoc.com.vn

Biu thc iu kin


Biu thc iu kin A?B:C tr v gi tr B nu A c gi tr true, tr v gi tr C nu A
c gi tr false.
V d:
byte b;
int i=b>=0?b:b+255;
Trong v d trn thc hin vic chuyn i cc s nguyn kiu byte c du v s
nguyn kiu int khng c du. Nu b ln hn hoc bng 0 th I nhn gi tr l b,
ngc li I s nhn gi tr l 255+b.
2.3.4. Cc lnh iu khin r nhnh chng trnh
o Lnh if n gin
C php
if<biu_thc_k> <cu_lnh>
o Lnh if else
C php
if <biu_thc_k>
<cu_lnh_1>;
else
<cu_lnh_2>;
V d: Vit chng trnh nhp vo mt dy s nguyn t i dng lnh, sp xp dy s
v hin th dy s sau khi sp xp ln mn hnh.
class SapXep
{
public static void main(String[] args)
{
int a[]=null;
int i,j,tg;
if(args.length>0)
{
a=new int[args.length];
}

for(i=0;i<args.length;i++)
{
a[i]=Integer.parseInt(args[i]);
System.out.print(a[i]+" ");
}

13
Su tm bi: www.daihoc.com.vn

System.out.println();
for(i=0;i<a.length-1;i++)
for(j=i+1;j<a.length;j++)
if(a[i]>a[j])
{
tg=a[i];
a[i]=a[j];
a[j]=tg;
}
System.out.println("Day so sau khi sap xep la:");
for(i=0;i<args.length;i++) System.out.print(a[i]+" ");
}
}
Bin dch chng trnh
C:\>javac SapXep.java
Thc hin chng trnh
C:\>java SapXep -2 3 1 4 -5 6 -10
-2 3 1 4 -5 6 -10
Day so sau khi sap xep la:
-10 -5 -2 1 3 4 6
Lnh switch
Lnh ny cho php r nhnh theo nhiu nhnh tuyn chn da trn cc gi tr nguyn
ca biu thc.
C php:
switch(<biu_thc_nguyn>)
{
case nhan_1:<cu_lnh_1>;
case nhan_2:<cu_lnh_2>;
case nhan_3:<cu_lnh_3>;
...
case nhan_n:<cu_lnh_n>;
default:<cu_lnh>;
}
2.3.5. Lnh lp
Lnh lp cho php mt khi cc cu lnh thc hin mt s ln lp li.

14
Su tm bi: www.daihoc.com.vn

Lnh while

while (<iu_kin>) <Thn_chu_trnh>


Ch :
C th <Thn_chu_trnh> khng c thc hin ln no nu ngay t u
<iu_kin> c gi tr false.
<iu_kin> l biu thc boolean.
V d: Lp chng trnh in ra dy s Fibonaci c cc gi tr nh hn 50.
class Fibonaci
{
public static void main(String[] args)
{
int lo=1;
int hi =1;
System.out.println(lo);
while(hi<50)
{
System.out.println(hi);
hi=lo+hi;
lo=hi-lo;
}
}
}

Lnh do while

C php
do
{
//Cc lnh
}
while(<iu_kin>);
Ch :
Thn chu trnh c thc hin t nht mt ln
Lnh for
C php
for(<Biu_thc_bt_u>; <iu_kin_lp>; <Biu_thc_gia_tng>)
<Thn_chu_trnh>

15
Su tm bi: www.daihoc.com.vn

<Biu_thc_bt_u>: Khai bo v gn cc gi tr khi u cho cc


bin iu khin qu trnh lp.
o <iu_kin_lp>:Biu thc logic.
S tng ng gia vng for v while
o

{
<Biu_thc_bt_u>;
while(<iu_kin_lp>)
{
<lnh>;
<Biu_thc_gia_tng>;

}
Lnh lp v hn:

Ta c th s dng vng for vi c php nh sau lm vng lp v hn.


for(;;)<lnh>

Vng lp v hn while:
while(true){
}
2.3.6. Cc cu lnh nhy
Java h tr ba lnh nhy: break, continue, v return. Cc lnh ny truyn iu khin
sang phn khc ca chng trnh.

Lnh break: c dng kt thc trnh t thc hin lnh trong lnh switch
hoc c s dng thot ra khi mt vng lp.

class BreakDemo
{
public static void main(String[] args)
{
for(int i=0;i<20;i++){
if(i==10)break;
System.out.println("i="+i);
}
}
}
Chng trnh ny in ra kt qu l:
i=0
i=1

16
Su tm bi: www.daihoc.com.vn

i=2
i=3
i=4
i=5
i=6
i=7
i=8
i=9
Nh chng ta c th thy, vng lp for c thit k chy vi cc gi tr t 0 n 9,
lnh break lm cho vng lp kt thc sm khi i bng 10.
Lnh break c th c s dng trong bt k vng lp Java no, bao gm c vng lp
v hn

Lnh continue

Lnh continue s b qua khng x l mt lnh no trong vng lp nhng vn tip tc


thc hin phn cn li ca vng lp.
class ContinueDemo
{
public static void main(String[] args)
{
for(int i=0;i<20;i++){
if(i==10)continue;
System.out.println("i="+i);
}
}
}
Kt qu thc hin chng trnh trn nh sau:
i=0
i=1
i=2
i=3
i=4
i=6
i=7
i=8

17
Su tm bi: www.daihoc.com.vn

i=9
Ta thy rng chng trnh khng in ra gi tr i=5 v khi kim tra iu kin chng trnh
b qua gi tr i=5 v thc hin lnh vi gi tr I cn li ca vng lp.

Lnh return

c s dng kt thc vic thc hin ca hm hin thi v chuyn iu khin


chng trnh v cho chng trnh gi phng thc
V d
protected double giaTriKhongAm(double v)
{
if(v<0)
return 0;
else
return v;
}
2.4 Cc lp v cc i tng trong Java
n v c bn trong lp trnh Java l lp. Cc lp bao gm cc phng thc thc hin
cng vic tnh ton. Cc lp cng a ra cu trc ca i tng v c ch to ra i
tng t cc nh ngha lp.
2.4.1. Cu trc chung ca mt lp
[<phm vi hoc kim sot truy nhp>] class <Tn lp> [extends <Tn lp cha>]
[implements <Tn giao din>]
{
<Cc thnh phn lp>
}
Khun mu ca mt lp
kiu_d_liu1 bin1
kiu_d_liu2 bin2
...
kiu_d_liun binn
phng_thc1()
phng_thc2()
...
phng_thcm()

Cc kiu lp trong Java

Lp c sn (built-in).

18
Su tm bi: www.daihoc.com.vn

Lp do ngi dng nh ngha (user-defined)

nh ngha phng thc


Hnh vi ca cc i tng ca mt lp c xc nh bi cc phng thc ca lp .
C php nh ngha phng thc
[<Phm vi hoc thuc tnh kim sot truy nhp>]<Kiu tr v><Tn phng thc>
([<Danh sch tham bin hnh thc>])[<Mnh throws>]
{
<Ni dung phng thc>
}

Trong
<Kiu tr v> c th l kiu nguyn thy, kiu lp hoc khng c gi tr tr li (kiu void)
<Danh sch tham bin hnh thc> bao gm dy cc tham bin (kiu v tn) phn cch
vi nhau bi du phy.
Cc kiu phm vi hay kim sot truy cp

public: Cc thnh phn c khai bo l public c th c truy cp bt k ni


no c th truy cp c v chng c tha k bi cc lp con ca n.

private: Cc thnh phn c khai bo l private ch c th c truy cp trong


chnh lp

protected: Cc thnh phn c khai bo l protected c th c truy cp v


tha k bi cc lp con v c th truy xut bi m lnh ca cng gi .

Constructor
Constructor l mt phng thc c bit khng c gi tr tr v v c tn trng
vi tn lp. Trng hp khng c constructor no c a ra trnh bin dch cung cp
constructor mc nh cho lp .
Mt i tng c to mi v c cho trc mt gi tr khi u. Cc trng
c th c khi to bng mt gi tr khi chng c khai bo, iu ny m bo
mt trng thi khi u ng n.
Cc phng thc
Cc phng thc ca mt lp thng cha m c th hiu v thao tc mt
trng thi ca i tng. Mt s lp c cc trng public ngi lp trnh c th thao
tc trc tip, nhng trong hu ht cc trng hp iu ny khng phi l mt tng
tt.
public class Point

19
Su tm bi: www.daihoc.com.vn

{
protected double x,y;
public Point(double x,double y)
{
this.x=x;
this.y=y;
}
public void move(double dx, double dy)
{
x=x+dx;
y=y+dy;
}
public void print()
{
System.out.println("x="+x+", y="+y);
}
public static void main(String[] args)
{
Point p=new Point(3.0,6.0);
System.out.println("Thong tin ve toa do diem ban dau:");
p.print();
p.move(-1.5,2.0);
System.out.println("Thong tin ve toa do diem sau khi tinh tien theo vec
to:");
p.print();
}
}
C:\>java Point
Thong tin ve toa do diem ban dau:
x=3.0, y=6.0
Thong tin ve toa do diem sau khi tinh tien theo vec to:
x=1.5, y=8.0
Tham chiu this
Thng thng, i tng nhn phng thc cn phi bit tham chiu ca n.

20
Su tm bi: www.daihoc.com.vn

Trong lp Point c constructor


public Point(double x,double y)
{
this.x=x;
this.y=y;
}
Gi s nu sa i constructor bng cch thay i nh sau:
public Point(double x,double y)
{
x=x;
y=y;
}
Khi bin dch chng trnh s bo li v c s nhp nhng trong cc lnh gn. Tham
chiu this khc phc c iu ny, this.x v this.y mun cp ti trng thng tin
ca lp Point cn x, y l tham bin truyn vo ca constructor.

2.4.2. Tha k trong Java


class Point3C extends Point2C
{
protected double z;
public Point3C(double x, double y, double z)
{
super(x,y);
this.z=z;
}
public void move(double dx, double dy, double dz)
{
super.move(dx,dy);
z+=dz;
}
public void print()
{
super.print();

21
Su tm bi: www.daihoc.com.vn

System.out.print(" z="+z);
}
public static void main(String[] args)
{
Point3C p=new Point3C(3.0,4.5,5.0);
System.out.println("Toa do ban dau:");
p.print();
System.out.println();
p.move(-1.0,0.5,-1.0);
System.out.println("Toa do sau khi tinh tien:");
p.print();
System.out.println();
}
}

T kha super

T kha super c s dng gi constructor ca lp cha hoc truy xut ti cc


thnh phn ca lp cha c che du bi mt thnh phn ca lp con.
trn ta xt hai on m, on m th nht khai bo lp Point2C biu din mt i
tng im hai chiu, on m th hai khai bo lp Point3C biu din mt i tng
im ba chiu. Lp Point3C c k tha lp t lp Point2C. Li gi super(x,y) trong
lp Point3C gi ti constructor Point2C hay super.move(dx,dy) gi ti phng thc
move(dx,dy) ca lp Point2C.
Bin dch chng trnh
C:\>javac Point3C.java
Thc thi chng trnh
C:\>java Point3C
Kt qu chng trnh
Toa do ban dau:
x=3.0, y=4.5 z=5.0
Toa do sau khi tinh tien:
x=2.0, y=5.0 z=4.0

2.4.3. Truyn tham s trong Java

22
Su tm bi: www.daihoc.com.vn

Thng thng, trong mt ngn ng lp trnh thng c hai cch truyn tham bin cho
mt th tc: truyn theo tham tr v truyn theo tham chiu.

Truyn theo tham tr

Phng thc s sao chp gi tr ca mt tham bin vo tham bin hnh thc ca th
tc. V vy, nhng thay i i vi tham s th tc s khng nh hng ti tham s
thc s.
class CallByValue
{

void test(int i,int j)


{
i*=2;
j*=2;
}
public static void main(String[] args)
{
CallByValue cbl=new CallByValue();
int a=10, b=30;
System.out.println("Gia tri a va b truoc khi goi phuong thuc:"+a+" "+b);
cbl.test(a,b);
System.out.println("Gia tri a va b truoc sau goi phuong thuc:"+a+" "+b);
}

}
C:\MyJava>javac CallByValue.java
C:\MyJava>java CallByValue
Gia tri a va b truoc khi goi phuong thuc:10 30
Gia tri a va b truoc sau goi phuong thuc:10 30
Tt c cc tham s i vi cc phng thc Java l gi theo tr. Ngha l, cc gi tr
ca cc bin tham s trong mt phng thc l cc bn sao ca cc gi tr do ngi gi
xc nh.
V d:
class TruyenThamTri
{
public static void main(String[] args)
{
double one =1.0;
System.out.println("Truoc khi goi ham:one="+one);

23
Su tm bi: www.daihoc.com.vn

chia(one);
System.out.println("Sau loi goi ham chia:one ="+one);
}
public static void chia(double x)
{
x/=2.0;
System.out.println("Sau khi chia:x="+x);
}
}
C:\MyJava\Baitap>java TruyenThamTri
Truoc khi goi ham:one=1.0
Sau khi chia:x=0.5
Sau loi goi ham chia:one =1.0
Truyn theo tham chiu
Mt tham chiu ti tham bin c truyn cho tham s. Bn trong th tc, tham chiu
ny c s dng truy xut ti tham s thc s c xc nh trong li gi. iu
ny ngha l nhng thay i i vi tham bin s nh hng ti tham s c s
dng gi phng thc.
Mng trong Java c xem l i tng. Cc phn t ca mng c th c kiu nguyn
thy hoc kiu tham chiu (kiu lp)
V d: Lc ra phn t ln nht ca mt mng v a v cui mng.
C:\MyJava\Baitap>java Loc
814325
143258
V trong Java cc li gi hm u thc hin theo tham tr (call by value) vi kiu nguyn
t v tham chiu i vi kiu lp nn hm doiCho() thay i c cc phn t ca day.

Cc tham bin final

Tham bin hnh thc c th c khai bo vi t kha final ng trc. Tham bin final
l tham bin khng c khi to gi tr cho n khi n c gn mt tr no v khi
c gn tr th khng th thay i gi tr c.
V d
class BienFinal
{
public static void main(String[] args)
{

24
Su tm bi: www.daihoc.com.vn

HangSX banh = new HangSX();


int

giaBan=20;

double tien = banh.tinh(10,giaBan);


System.out.println("Gia ban: "+giaBan);
System.out.println("Tien ban duoc: "+tien);
}
}
class HangSX
{
double tinh(int so, final double gia)
{
gia = gia/2.0;
return so*gia;
}
};
Khi bin dch hm tinh(), chng trnh dch s thng bo li v khng c php thay
i gi tr ca bin final gia.

Cc i trong chng trnh

Chng ta c th truyn cc tham s cho chng trnh trn dng lnh


V d
class TinhTong
{
public static void main(String[] args)
{
float s=0.0f;
for(int i=0; i<args.length;i++)
s+=Float.valueOf(args[i]).floatValue();
System.out.println("Tong cua day so la "+s);
}
}
Kt qu thc hin chng trnh
C:\MyJava\Baitap>java TinhTong 12 34 56
Tong cua day so la 102.0

25
Su tm bi: www.daihoc.com.vn

2.4.4. a hnh trong Java


Cc phng thc np chng (overloaded method)

Cc phng thc np chng l cc phng thc nm trong cng mt lp


c cng tn nhng khc nhau v danh sch tham s.

Cc phng thc np chng l mt dng ca tnh a hnh thi gian bin dch.
V d
class TinhToan
{
public static void main(String[] args)
{
Tinh c = new Tinh();
c.add(10,20);
c.add(40.0f,35.65f);
c.add("Good ","Morning");
}
}
class Tinh
{
public void add(int a, int b)
{
int c = a+b;
System.out.println("Phep cong hai so nguyen :"+c);
}
public void add(float a, float b)
{
float c = a+b;
System.out.println("Phep cong hai so dau phay dong :"+c);
}
public void add(String a, String b)
{
String c = a+b;
System.out.println("Phep cong hai xau :"+c);
}
};

26
Su tm bi: www.daihoc.com.vn

Kt qu:
C:\MyJava\Baitap>java TinhToan
Phep cong hai so nguyen :30
Phep cong hai so dau phay dong :75.65
Phep cong hai xau :Good Morning
Gii thch: Trong chng trnh trn phng thc add() l phng thc c np chng.
C ba phng thc c cng tn add() nhng c cc tham s khc nhau. Khi chng ta
gi phng thc add()????
2.4.5. Cc thnh phn static
i khi cc thnh phn static ta cn phi nh ngha cc thnh phn lp c s dng
c lp vi bt k i tng no ca lp. Thng thng mt thnh phn ca lp phi
c truy xut thng qua i tng ca lp. Tuy nhin, ta c th c th to ra mt
thnh phn m c s dng c lp. to ra mt thnh phn nh vy trc khai
bo ca mi thnh phn ta t mt t kha static. Khi mt thnh phn c khai bo
static, n c th c truy xut trc khi mt i tng c to ra v khng cn tham
chiu ti bt k i tng no. Cc thnh phn static bao gm: bin static, phng thc
static, khi static.

Bin static

Bin static v c bn l bin tng th. Khi cc i tng ca mt lp c khai bo,


khng c bn sao ca bin i tng no c to ra. Thay vo , tt c cc i
tng cng chung mt bin static.
V d v bin static
class StaticVariable {
static int count=20;
StaticVariable(){
count++;
}
public static void main(String[] args)
{
StaticVariable c1=new StaticVariable();
System.out.println("Bien dem count="+count);
StaticVariable c2=new StaticVariable();
System.out.println("Bien dem count="+count);
StaticVariable c3=new StaticVariable();
System.out.println("Bien dem count="+count);
}
}

27
Su tm bi: www.daihoc.com.vn

Bin count c khai bo l static nn n ch c mt bn sao trong mi i tng, v


vy khi i tng c to ra th cc bin count c tng ln 1 do trong hm
constructor bin count c tng ln 1.

Phng thc static

Cc phng thc c khai bo static c mt s hn ch sau:


o

Chng ch c th gi cc phng thc static khc.

Chng ch truy xut ti cc d liu static

Chng khng th tham chiu ti this v super

V d
class StaticMethod
{
public static void main(){
System.out.println("Hello");
}
public static void main(String[] args)
{
main();
System.out.println("Hello World!");
}
}
Trong v d ny ta thy khai bo hai phng thc main u l phng thc tnh.
Phng thc main ny gi ti phng thc main khc.

Khi static

Nu cn tnh ton khi to cc bin static, ta c th khai bo khi static n c th


x l ngay tc thi khi lp ln u tin c ti vo b nh. Cc khi static lun c
x l trc
V d
class StaticDemo
{
static{
System.out.println("Khoi static 1");
}
public static void main(String[] args)
{
System.out.println("Hello World!");

28
Su tm bi: www.daihoc.com.vn

}
static {
System.out.println("Khoi static 2");
}
}
V khi static lun c x l trc nn kt qu in ra ca chng trnh trn s l:
Khoi static 1
Hello World!
Khoi static 2

2.4.6. Cc thnh phn final


Bin final
Mt bin c khai bo final. Lm nh vy s ngn nga ni dung ca bin b sa i.
iu ny ngha l ta phi khai bo mt bin final khi n c khai bo.
V d

final double pi=3.1416;


S dng final vi tha k

Mc d np chng phng thc l mt trong cc c trng mnh ca Java, nhng s


c nhng lc ta cn ngn nga iu ny xy ra. khng cho php mt phng thc
c np chng, xc nh t kha final nh l mt b t ti u mi khai bo ca n.
Cc phng thc c khai bo l final khng th c np chng.
V d
class A {
final void method(){
}
}
class B extends A{
final void method(){
}
}
Khai bo lp B c li, v lp A, phng thc method c khai bo vi t kha
final nn n khng th c np chng trong lp B.
S dng t kha final cm tha k
i khi ta cn cm mt s lp khng c lp con. Ta c th thc hin iu ny bng
cch khai bo lp vi t kha final.
V d

29
Su tm bi: www.daihoc.com.vn

final class A {
}
Lc ny, cc lp khc khng th tha k t lp A.
2.5. Cc lp tru tng
Trong lp trnh Java, c nhng lc ta cn nh ngha lp cha v khai bo cu trc mt
cch khi qut m khng ci t c th cho tng phng thc. Cc lp cha s nh
ngha dng tng qut ha c dng chung bi cc lp con ca n, vic ci t chi tit
cc phng thc ny s c thc hin trong tng lp con c th.
V d:
abstract class Hinh2D
{
double a,b,r;
public abstract double dientich();
public abstract double chuvi();
}
class HinhTron extends Hinh2D
{
public HinhTron(double r)
{
this.r=r;
}
public double dientich()
{
return Math.PI*r*r;
}
public double chuvi()
{
return Math.PI*2*r;
}
}
class HinhChuNhat extends Hinh2D
{
public HinhChuNhat(double a,double b)
{
this.a=a;
this.b=b;

30
Su tm bi: www.daihoc.com.vn

}
public double dientich()
{
return a*b;
}
public double chuvi()
{
return (a+b)*2;
}
}
class AbstractDemo
{
public static void main(String args[])
{
Hinh2D ht=new HinhTron(1);
System.out.println("Dien tich hinh tron ban kinh 1.0 la:"+ht.dientich());
System.out.println("Chu vi hinh tron ban kinh 1.0 la:"+ht.chuvi());
Hinh2D hcn=new HinhChuNhat(3,4);
System.out.println("Dien tich hinh chu nhat la:"+hcn.dientich());
System.out.println("Chu vi hinh chu nhat la "+hcn.chuvi());
}
};
Kt qu thc hin chng trnh
C:\MyJava>java AbstractDemo
Dien tich hinh tron ban kinh 1.0 la:3.141592653589793
Chu vi hinh tron ban kinh 1.0 la:6.283185307179586
Dien tich hinh chu nhat la:12.0
Chu vi hinh chu nhat la 14.0
Trong chng trnh trn ta khai bo lp tru tng Hinh2D, lp ny c cc phng
thc tru tng l dientich() tnh din tch ca hnh v lp chuvi() tnh chu vi. Cc
lp tru tng khng c ci t m lnh.
Cc lp HinhTron v HinhChuNhat l cc lp con c th ca lp tru tng Hinh2D.
Cc lp ny ci t cc phng thc tnh din tch v chu vi c th
2.6. Giao tip (Interface)

31
Su tm bi: www.daihoc.com.vn

Tha k ng mt vai tr rt quan trng trong vic tit kim thi gian v cng sc ca
ngi lp trnh. Hu ht cc chng trnh trong thc t u s dng a tha k. Trong
a tha k, chng ta c th tha k cc phng thc v thuc tnh t mt s lp khc
nhau. Java khng h tr a tha k. Tuy nhin, nhn thy tm quan trng ca a tha
k trong Java, Java a ra khi nim interface. Vi giao tip ta c th xc nh mt
lp phi lm g nhng khng xc nh cch lm th no.

nh ngha

Mt giao tip l mt tp hp cc nh ngha phng thc (khng c ci t). Mt giao


tip cng c th nh ngha cc hng.
Ta cng c th t cu hi vy giao tip khc g so vi cc lp tru tng? Di y l
nhng s khc bit gia giao tip v cc lp tru tng:
Mt giao tip khng th thc thi bt k phng thc no, ngc li
mt lp tru tng c th thc thi mt s phng thc no .
o Mt lp c th thc thi nhiu giao tip nhng mt lp ch c mt lp
cha.
o Mt giao tip khng phi l b phn ca s phn cp lp, cc lp
c th thc thi cng mt giao tip.
Khai bo mt giao tip
o

C php chung khi khai bo mt giao tip l


public interface InterfaceName extends SuperInterfaces
{
//Thn giao tip
}
Hai thnh phn bt buc trong mt khai bo giao tip l-t kha interface v tn ca
giao tip. T kha b tr truy xut l public ch ra rng giao tip c th c s dng
bi bt k lp no bt k gi no. Nu khng xc nh giao tip l public th giao tip s
ch c th truy xut bi cc lp c nh ngha trong cng gi vi giao tip.
Mt khai bo giao tip c th c mt thnh phn khc: danh sch cc giao tip cha. Mt
giao tip c th tha k cc giao tip khc, ging nh mt lp c th tha k hoc l
lp ca lp khc. Danh sch cc giao tip cha c phn cch bi du phy.
Thn giao tip
Thn giao tip cha cc khai bo phng thc cho tt c cc phng thc c trong
giao tip. Mt khai bo phng thc trong mt giao tip kt thc bi du chm phy (;)
v mt giao tip khng cung cp cch ci t cho cc phng thc c khai bo trong
n.
Mt giao tip c th cha cc khai bo hng ngoi cc khai bo phng thc. Cc khai
bo thnh phn trong mt giao tip khng c php s dng mt s t kha b tr
nh private, protected transient, volatile, hoc synchronized trong cc khai bo thnh
phn ca mt giao tip.
Trong v d sau ta s tm hiu cch nh ngha mt giao tip v cch thc thi mt giao
tip trong.
public interface CalculatorInterface
{

32
Su tm bi: www.daihoc.com.vn

public double add(double x, double y);


public double sub(double x, double y);
public double mul(double x, double y);
public double div(double x, double y);
}

Thc thi giao tip

Mt giao tip nh ngha mt tp hp hp cc quy c v hnh vi. Mt lp thc thi mt


giao tip tun theo nhng quy c c khai bo trong giao tip . khai bo
mt lp thc thi mt giao tip, ta a vo mnh implements trong khai bo lp. Mt
lp c th thc thi nhiu giao tip (Java h tr a tha k giao tip), v vy sau t kha
implements l mt danh sch cc giao tip c thc thi bi mt lp.
Ch : Mnh implements ng sau mnh extends nu tn ti mnh extends.
class CalculatorTest implements CalculatorInterface
{
public double add(double x, double y)
{
return x+y;
}
public double sub(double x, double y)
{
return x-y;
}
public double mul(double x, double y)
{
return x*y;
}
public double div(double x, double y)
{return x/y;
}
public static void main(String[] args) throws Exception
{
CalculatorInterface cal=new CalculatorTest();
if(args.length!=2)
{

33
Su tm bi: www.daihoc.com.vn

System.out.println("Cach chay chuong trinh: java CalculatorImpl


so1 so2");
return;
}
else
{
double x,y,z;
x=Double.parseDouble(args[0]);
y=Double.parseDouble(args[1]);
System.out.println(x+"+"+y+"="+cal.add(x,y));
System.out.println(x+"-"+y+"="+cal.sub(x,y));
System.out.println(x+"*"+y+"="+cal.mul(x,y));
System.out.println(x+"/"+y+"="+cal.div(x,y));
}
}
}
Kt qu thc hin chng trnh l
C:\MyJava>java CalculatorTest 12 3
12.0+3.0=15.0
12.0-3.0=9.0
12.0*3.0=36.0
12.0/3.0=4.0
S dng giao tip nh l mt kiu
Khi ta nh ngha mt giao tip mi, ta c th nh ngha kiu d liu tham chiu mi.
Giao tip c th c s dng khi khai bo mt bin tham chiu. Gi s MyInterface l
mt giao tip th ta c th khai bo nh sau:
MyInterface mi;
2.7. Cc gi v s dng gi trong Java
Cc gi c cc thnh phn l cc lp, cc interface, v cc gi con c lin quan vi
nhau. Vic t chc thnh cc gi c mt s li ch sau y:
o

o
o

Cc gi cho php ta t chc cc lp thnh cc n v nh hn (nh


cc th mc), v gip cho vic nh v v s dng cc lp tng ng
tr nn d dng hn.
Trnh c cc vn v xung t tn.
Cho php ta bo v cc lp, d liu v cc phng thc theo mt
quy m ln hn so vi phm vi lp.

34
Su tm bi: www.daihoc.com.vn

o Cc tn gi c th c s dng nh danh cc lp ca bn.


Truy xut ti cc thnh phn ca gi trong Java

truy xut ti thnh phn ca gi trong Java ta c th s dng c php sau:


MyPackage.MyClass
MyPackage l tn gi, MyClass l tn lp nm trong gi MyPackage.

Khai bo cc gi trong chng trnh

c th s dng cc thnh phn ca mt gi trong chng trnh Java, ta cn phi


khai bo gi c th cha lp :
import ten_goi.*;// ten_goi: tn gi
Vi khai bo nh trn, ta c th truy xut ti tt c cc lp, cc interface nm trong gi
. khai bo s dng mt lp c th trong chng trnh ta khai bo dng lnh sau:
import ten_goi.ten_lop; // ten_lop: tn lp
Gi s ta c gi MyPackge, bn trong gi MyPackage li c mt s gi con nh
SubPackage1, SubPackage2,..ta c th khai bo s dng cc thnh phn trong gi con
SubPackage1 nh sau:

import MyPackage.SubPackage1.*;
Cch to ra cc gi trong Java

Bc 1: Khai bo mt gi trong Java


Gi s ta khai bo mt gi c tn l mypackage, bn trong gi ny c lp Calculator.
package mypackage;
public class Calculator
{
public double cong(double a,double b)
{
return a+b;
}
public double nhan(double a, double b)
{
return a*b;
}
public double tru(double a,double b)
{
return a-b;
}
public double chia(double a,double b) throws Exception
{

35
Su tm bi: www.daihoc.com.vn

return a/b;
}
}
Bc 2: Bin dch
C:\>javac -d C:\MyJava Calculator.java
Mt vi iu cn lu khi khai bo cc thnh vin ca gi.
Th nht, cc thnh phn ca gi cn c khai bo vi thuc tnh public, nu cn truy
xut chng t bn ngoi.
2.6. Qun l ngoi l (Exception Handling)
Khi nim
Trong qu trnh x l, cc ng dng c th bt ng gp cc li vi cc mc nghim
trng khc nhau. Khi mt phng thc tc ng trn mt i tng, i tng c th
pht hin cc vn trng thi bn trong (chng hn cc gi tr khng nht qun, nh
li chia 0), pht hin cc li vi cc i tng hay d liu m n thao tc (nh file hay
a ch mng) xc nh n vi phm cc qui tc c bn (nh c d liu t mt lung
b ng),...Rt nhiu ngi lp trnh khng th kim tra tt c cc trng thi li c th
xy ra.
Exception cung cp mt cch kim tra cc li m khng chia ct m. Exception cng
a ra mt c ch bo li mt cch trc tip ch khng s dng cc c hay cc hiu
ng ph.

Cc ngoi l trong Java

Trong Java c mt lp Exception, mi lp ngoi l l lp con ca lp ny. Lp


Exception l lp con ca lp Throwable

Throwable

Exception

36
Su tm bi: www.daihoc.com.vn

Hnh 2.7
Lp Throwable cha mt xu c s dng m t ngoi l. Ngoi l c phn
thnh hai loi: Ngoi l c kim tra (checked exception) v ngoi l khng c kim
tra (unchecked exception).
Ngoi l c kim tra l ngoi l m trnh bin dch s kim tra phng thc ca
ngi lp trnh v ch a ra ngoi l khi chng c thng bo a ra.
Ngoi l khng c kim tra l lp con ca cc lp Error; RuntimeException.
Java cung cp mt m hnh qun l cc ngoi l cho php kim tra cc li cc v tr c
lin quan.

Khi try v catch

C php
o Khi try
Bao gm mt tp hp cc lnh c th pht sinh ngoi l trong khi x l. Mt phng
thc, c th a ra mt ngoi l cng c t try
Cc khi try lng nhau
try{
stmt1;
stmt2;
try{
stmt3;
stmt4;
}
catch(Exception e)
{
}
}
catch(Exception e)
{
}
Khi cc khi try c lng nhau, khi try bn trong c x l trc v mt ngoi l
c a ra trong khi c n bt trong cc khi try catch con. Nu khi catch
bn trong khng tha mn th cc khi try bn ngoi c kim tra. Nu mt khi catch
ph hp c tm thy, th ngoi l c qun l trong khi ngc li th mi trng
Java Runtime qun l ngoi l.
try
{
doFileProcessing();

37
Su tm bi: www.daihoc.com.vn

displayResults();
}
catch(Exception e)
{
System. er.println(e.getMessage());
}
Bt k li no xy ra trong qu trnh x l doFileProcessing() hay displayResult() th s
c n bt bi khi catch v c x l.
Nu c li xy ra trong qu trnh x l doFileProcessing(), phng thc displayResult()
s khng bao gi c gi, v khi catch s c x l.
Mt khi try c th c nhiu khi catch v x l cc kiu khc nhau
try
{
}
catch(Exception e)
{
}
catch(Exception e)
{
}
finally
{
//Thc hin cng vic thu dn
}
V d:
class TryCatch
{
public static void main(String[] args)
{int x,y;
try{
x=Integer.parseInt(args[0]);
y=Integer.parseInt(args[1]);
x=x/y;
System.out.println("x="+x);
}

38
Su tm bi: www.daihoc.com.vn

catch(ArithmeticException e)
{
System.out.println("Khong the chia cho 0");
System.err.println(e);
}
}
}
Kt qu 1
C:\MyJava\Baitap>java TryCatch 18 9
x=2
Kt qu 2
C:\MyJava\Baitap>java TryCatch 9 0
Khong the chia cho 0
java.lang.ArithmeticException: / by zero
Khi finally
Khi finally l khi m chng ta thy cc lnh tr v cc ti nguyn cho h thng v cc
lnh khc in ra bt k thng bo no.
Cc lnh trong khi finanally c th l:
o

ng mt file.

ng mt resultset (Lp trnh c s d liu).

Ngt lin kt c thit lp vi c s d liu.

Khi finally lun c x l d ngoi l c xy ra hay khng

Mnh throw

Cc ngoi l c a ra bng cch s dng lnh throw, n nhn mt i tng lm


tham s, i tng thuc lp l lp con ca lp Throwable
V d:
class ArraySizeException extends NegativeArraySizeException
{
ArraySizeException()
{
super("Nhap kich thuoc mang khong hop le");
}
}

39
Su tm bi: www.daihoc.com.vn

class ThrowDemo
{
int size, a[];
ThrowDemo(int s)
{
size =s;
try{
checkSize();
}
catch(ArraySizeException e)
{
System.out.println(e);
}
}
void checkSize() throws ArraySizeException
{
if(size<0) throw new ArraySizeException();
a= new int[3];
for(int i=0;i<3;i++)a[i]=i+1;
}
public static void main(String[] args)
{
new ThrowDemo(Integer.parseInt(args[0]));
}
}
Kt qu thc hin chng trnh
C:\MyJava\Baitap>java ThrowDemo -1
ArraySizeException: Nhap kich thuoc mang khong hop le
Gii thch:
Chng ta to ra mt lp c tn ArraySizeException, lp ny l lp con ca lp
NegativeArraySizeException. Bng cch to ra mt i tng ca lp ny, chng ta
in ra thng bo ngoi l. Phng thc checkSize() c th a ra ngoi l
ArraySizeException.

try
khng c ngoi l

c ngoi l

Su tm bi: www.daihoc.com.vn

40

Hnh 2.8
V d:
class FinallyDemo
{
String name;
int x,y;
FinallyDemo(String s[])
{
try{
name = new String("try catch finally demo");
x = Integer.parseInt(s[0]);
y=Integer.parseInt(s[1]);
System.out.println(name);
System.out.println("Ket qua "+x/y);
}
catch(ArithmeticException e)
{
System.err.println("Khong the chia 0!");
}
finally
{
name = null;
System.out.println("Xu ly khoi finally");
}

41
Su tm bi: www.daihoc.com.vn

}
public static void main(String[] args)
{
new FinallyDemo(args);
}
}
Kt qu 1
C:\MyJava\Baitap>java FinallyDemo 16 0
try catch finally demo
Khong the chia 0!
Xu ly khoi finally
Kt qu 2
C:\MyJava\Baitap>java FinallyDemo 16 4
try catch finally demo
Ket qua 4
Xu ly khoi finally
Mt s ngoi l thng gp
o

RuntimeException

ArithmeticException

IllegalArgumentException

ArrayIndexOutOfBoundsException

NullPointerException

SecurityException

NoSuchElementException

ClassNotFoundException

AWTException

DataFormatException

SQLException

IOException

UnknownHostException

SocketException

42
Su tm bi: www.daihoc.com.vn

EOFException

MalformedURLException

FileNotFoundException

IllegalAccessException

NoSuchMethodException

43
Su tm bi: www.daihoc.com.vn

Chng 3

Cc lung vo ra
1. Khi nim v lung trong Java
Khi lp bt k chng trnh no trong mt ngn ng no th vn vo ra d liu gia
chng trnh v ngun d liu cng nh ch d liu l vn m ngi lp trnh cn phi
quan tm. Lm th no ta c th truyn d liu cho mt chng trnh Java. C hai cch
hiu qu thc hin iu ny:

Thng qua mt ti nguyn tun t no nh file hoc qua mt my tnh khc.

Thng qua giao din ngi my.

Mc ch ca chng ny l xem xt cch truyn d liu cho mt chng trnh thng


qua mt my tnh khc hay tp tin.
1.1. Khi nim lung (stream)
Theo ngha en lung l mt ng ng nc.
V mt thut ng chuyn ngnh ta c th hiu Cc lung l cc dy d liu c sp
th t.
Xt trn quan im ca chng trnh v ngun d liu (Data Soure) ta c th phn
loi lung thnh hai loi: Lung xut (output stream) v lung nhp (input stream). trc
quan hn chng ta xem hnh v d y:

InputStream
Data Source

Program
OutputStream

Hnh 3.1

Nh vy nu chng ta cn ly d liu t ngun vo chng trnh th cn phi s dng lung


nhp. Ngc li, nu ta cn ghi d liu t chng trnh ra ngun d liu th ta cn phi s
dng lung xut.
Ta c th thy rng c rt nhiu lung d li, chng hn nh t mt tp tin, t cc thit b
xut v nhp chun, t lin kt mng. Nh vy mt chng trnh c th truy xut ti nhiiu
ngun d liu.

59

Su tm bi: www.daihoc.com.vn

Console

Thit b

InputStream
Chng trnh
ng dng

Tp tin

OutputStream

Mng
Hnh 3.2

2. Lung xut nhp chun

System.out: Lung xut chun thng c s dng hin th kt qu u ra trn


mn hnh.

System.in: Lung nhp chun thng n t bn phm v c s dng hin cc


k t.

System.err: Lung li chun.

Cc lung trn cn c gi l cc lung h thng. Mc d cc lung ny rt c ch


khi lp trnh nhng chng khng mnh khi gii quyt cc vn vo ra quan trng khc.
Trong cc mc tip theo ta s tm hiu su mt s lung trong gi java.io

3. Lunng nh phn
3.1. Lp InputStream
Lp tru tng InputStream khai bo cc phng thc c d liu u vo t mt
ngun c th. Lp InputStream l lp c s ca hu ht cc lung nhp trong gi java.io, v
n h tr cc phng thc sau:
Cc phng thc:

public InpuStream()

InputStream ch h tr constructor khng tham s.

public abstract int read() throws IOException


Phng thc c bn ca lp InputStream l phng thc read(). Phng thc ny
c mt byte d liu t lung nhp v tr v mt s kiu nguyn int c gi tr nm
trong khong t 0 n 255. Gi tr tr v l -1 khi kt thc lung. Phng thc read()
ch v phong ta cc on m sau n cho ti khi mt byte d liu c c. Vic
nhp v xut din ra vi tc chm, v vy nu chng trnh ca ta thc hin mt
cng vic khc quan trng th tt nht l t cc lnh nhp xut vo mt tuyn on
ring ca n. Phng thc read() l phng thc tru tng bi v cc lp con cn
thay i thch ch vi mi trng c th.

public int read(byte[] b) throws IOException

Phng thc ny c mt dy cc byte d liu lin tc t mt ngun ca lung nhp


v lu vo mng b.

public int read(byte[] b, int offs, int len) throws IOException


Phng thc ny c mt dy cc byte d liu v lu vo mng b, v tr bt u lu
d liu l offs v lu len byte d liu

60

Su tm bi: www.daihoc.com.vn

public int available() throws IOException


Phng thc ny cho bit cn bao nhiu byte d liu trong lung.

public long skip(long count) throws IOException

Phng thc skip(long count) b qua long byte d liu


public synchronized void mark(int readLimit)

Phng thc ny c s dng dnh du v tr hin thi trong lung


public void reset() throws IOException

Phng thc ny xc nh li v tr lung l v tr nh du ln gn y nht.


public boolean markSupported()
Phng thc ny tr v gi tr true nu lung ny h tr nh du v false nu n
khng h tr nh du.

public void close() throws IOException

Khi lm vic xong vi mt lung, ta cn ng li lung . iu ny cho php h iu


hnh gii phng cc ti nguyn gn vi lung.
3.2. Lp OutputStream
Lp tru tng OutputStream khai bo cc phng thc ghi d liu ra lung.
Chng bao gm cc phng thc sau y:

public OuputStream()
Phng thc OutputStream h tr constructor khng tham s

public abstract void write(int b)throws IOException


Phng thc ny ghi mt byte khng du c gi tr trong khong t 0 n 255. Nu ta
truyn vo mt s c gi tr ln hn 255 hoc nh hn 0, n s thc hin php tnh
b =b mod 256 trc khi ghi gi tr vo lung.

public void write(byte[] b)throws IOException


Phng thc ny ghi d liu t lung vo ton b mng b.

public void write(byte[] b, int off, int len) throws IOException


Phng thc ny ch ghi mt on con ca mng d liu bt u t v tr offs v tip
tc cho ti khi ghi ht len byte.

public void close()


Phng thc ny ng mt lung. Phng thc ny c gi gii phng cc ti
nguyn gn vi lung.

public void flush()

Cc lung xut nhp khc c tha k t cc lung tru tng InputStream v


OutputStream. i vi mi kiu d liu v ngun d liu chng ta c th c cc kiu lung
xut v nhp ring, chng hn DataInputStream, DataOutputStream, FileInputStream,
FileOutputStream, Sau y chng ta s ln lt xem xt tng kiu lung c th.

61

Su tm bi: www.daihoc.com.vn

3.3. Cc lung xut nhp mng byte


xy dng mt xu k t biu din d liu c th c c hoc gii m d liu,
ngi ta xem cc mng byte nh l ngun ca cc lung nhp hoc ch ca cc lung
xut. Cc lung byte cung cp cc kh nng ny.

ByteArrayInputStream

ByteArrayOutputStream

Hnh 3.3
3.3.1. Lung nhp mng byte
Lp ByteArrayInputStream s dng mt mng byte nh l mt ngun d liu u vo.
N c hai constructor:
public ByteArrayInputStream(byte[] buf)

To ra mt i tng ByteArrayInputStream t mt mng xc nh. Mng u vo


c s dng mt cch trc tip. Khi kt thc buf ngha l kt thc nhp t lung.
public ByteArrayInputStream(byte[] buf, int offset, int length)

To ra mt i tng ByteArrayInputStream t mt mng xc nh, ch s dng mt


phn ca mng buf t buf[offset] n buff[offset+length-1] hoc kt thc mng.
ByteArrayInputStream to ra mt lung nhp t mt vng m trong b nh c
biu din bng mt mng byte. Lp ny khng h tr bt k phng thc mi no, n np
chng cc phng thc read(), skip(), available(), v reset() ca lp cha InputStream.
V d:
To mt mng gm 100 byte ri gn vo mng ny mt lung ByteArrayInputStream
ly d liu ra.
import java.io.*;
public class LuongNhapMang
{
public static void main(String[] args)
{
byte[] b = new byte[100];
for(byte i=0;i<b.length;i++) b[i]=i;
try{
InputStream is = new ByteArrayInputStream(b);
for(byte i=0;i<b.length;i++)

62

Su tm bi: www.daihoc.com.vn

System.out.print(is.read()+" ");
}
catch(IOException e)
{
System.err.println(e);
}
}
}
Kt qu thc hin chng trnh
C:\MyJava\Baitap>java LuongNhapMang
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99
Ch : Mi ln c lung bng phng thc read(), mt byte d liu khng cn trong
lung, nhng vn tn ti trong mng.
3.3.1. Lung nhp mng byte
ByteArrayOutputStream to ra mt lung xut trn mt mng byte. N cng cung cp
cc kh nng b sung.
Cc constructor:
public ByteArrayOutputStream()

To ra mt i tng ByteArrayOutputStream vi kch thc mc nh


public ByteArrayOutputStream(int size)

To ra mt i tng ByteArrayOutputStream vi kch thc xc nh ban u.


Cc phng thc mi ca lp ByteArrayOutputStream:
public synchronized byte[] toByteArray():

Phng thc ny tr v mt bn sao d liu ca lung v lu d liu vo mt mng


v c th sa i d liu trong mng ny m khng cn thay i cc byte ca lung xut.
public size()

Tr v kch thc hin thi ca vng m


public String toString(int hiByte)

To mt i tng String mi t ni dung ca lung xut mng byte


public String toString()

Phng thc chuyn i mt lung byte thnh mt i tng String


V d:
Vit chng trnh to lp mt lung xut mng (ByteArrayOutputStream) 100 byte.
Ghi vo lung xut mng 100 phn t t 0 n 99. d liu t lung xut mng vo mng
b. In d liu t mng b ra mn hnh.
import java.io.*;
class LuongXuatMang
{

63

Su tm bi: www.daihoc.com.vn

public static void main(String[] args)


{
try{
//Tao mot luong xuat mang 100 byte
ByteArrayOutputStream os = new ByteArrayOutputStream(100);
//Ghi du lieu vao luong
for(byte i=0;i<100;i++) os.write(i);
//Doc du lieu tu luong vao mang
byte[] b = os.toByteArray();
for(byte i=0;i<100;i++) System.out.print(b[i]+" ");
os.close();
}
catch(IOException e)
{
System.err.println(e);
}
}
}
Kt qu thc hin chng trnh:
C:\MyJava\Baitap>java LuongXuatMang
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99
3.4. Lung xut nhp tp tin
Phn ln vic nhp v xut d liu trong cc ng dng l c v ghi d liu t cc tp
tin v ghi vo d liu vo tp tin. Hai lung trong java.io thc hin vic xut nhp tp tin l
FileInputStream v FileOutputStream. Mi kiu lung c ba constructor.

Mt constructor nhn mt i tng String lm tn ca tp tin.

Mt constructor nhn mt i tng File tham chiu n tp tin.

Mt constructor nhn i tng FileDescriptor lm tham s.

FileDescriptor biu din mt gi tr ph thuc vo h thng m t mt tp ang m.


i vi lung xut nhp tp tin ta hnh dung nh sau: chng trnh Java l ni tiu th
d liu, tp tin l ni cung cp d liu. c d liu t tp tin vo b nh ta s dng lung
nhp tp tin FileInputStream. ghi d liu t b nh vo tp tin ta s dng lung xut tp
tin FileOutputStream.

64

Su tm bi: www.daihoc.com.vn

FileInputStream

FILE

FileOutputStream

Hnh 4.5
V d
import java.io.*;
public class FileIOExam
{
public static void main(String[] args)
{
//Tao mot file de ghi
try{
OutputStream os = new FileOutputStream(args[0]);
String s = "Thu nghiem voi luong xuat nhap tap tin";
for(int i=0;i<s.length();i++) os.write(s.charAt(i));
os.close();
//Mo de doc
InputStream is = new FileInputStream(args[0]);
int len = is.available();
System.out.println("Luong nhap co "+len+ " bytes");
byte b[] = new byte[len];
int sobyte = is.read(b,0,len);
System.out.println(sobyte+ " la so bytes da doc");
System.out.println(new String(b));
is.close();
}
catch(IOException e)
{
System.err.println(e);
}
}
}
Kt qu thc hin chng trnh

65

Su tm bi: www.daihoc.com.vn

C:\MyJava\Baitap>java FileIOExam abc.txt


Luong nhap co 38 bytes
38 la so bytes da doc
Thu nghiem voi luong xuat nhap tap tin
3.5. Truy nhp tp ngu nhin
RandomAccessFile cho php ta truy nhp trc tip vo cc tp, ngha l c th c,
ghi cc byte bt k v tr no trong tp.
Cc phng thc to lung truy nhp tp ngu nhin

RandomAccessFile(String name, String mode) throws IOException

RandomAccessFile(File file, String mode) throws IOException


Tp c xc nh bi tn hoc i tng File.
Tham s mode cho php xc nh m file c hay ghi.
-r: Dng c.
-rw: Dng ghi.
Cc phng thc khc

long getFilePointer() throws IOException : Tr v v tr ca con tr tp.

long length() throws IOException: cho bit s byte hay di ca tp.

void seek(long offset) throws IOException: Chuyn con tr tp i offset v tr k t u


tp.

void close() throws IOException: Khi khng cn truy nhp tp na th ng li.


V d:
import java.io.*;
public class RandomAccessDemo
{
static String filename="dayso.dat";
final static int INT_SIZE=4;
//Tao file de ghi
public void createFile() throws IOException
{
File datFile = new File(filename);
RandomAccessFile out_file = new RandomAccessFile(datFile,"rw");
for(int i=0;i<10;i++)out_file.writeInt(i*i);
out_file.close();
}
//Mo file de doc
public void readFile() throws IOException
{
File datFile = new File(filename);

66

Su tm bi: www.daihoc.com.vn

RandomAccessFile inp_file= new RandomAccessFile(datFile,"r");


System.out.println("Cac so doc tu file:");
long len = inp_file.length();
for(int i=INT_SIZE;i<len;i+=2*INT_SIZE)
{
inp_file.seek(i);
System.out.println(inp_file.readInt());
}
inp_file.close();
}
//Mo file de ghi
public void extendFile() throws IOException
{
RandomAccessFile out_file = new RandomAccessFile(filename,"rw");
for(int i=10;i<20;i++) out_file.writeInt(i*i);
out_file.close();
}
public static void main(String[] args)
{
try{
RandomAccessDemo rnd = new RandomAccessDemo();
rnd.createFile();
rnd.readFile();
rnd.extendFile();
rnd.readFile();
}
catch(IOException e)
{
System.err.println(e);
}
}
}

67

Su tm bi: www.daihoc.com.vn

3.5. Lung PrintStream


Lung PrintStream c s dng mi khi cn s dng cc phng thc print v
println trong chng trnh. Lp PrintStream l lp con ca lp InputStream, v vy ta c th
s dng lung ny lc cc byte. N cung cp cc phng thc print v println cho cc
kiu d liu sau:
char

int

char[ ] long

float

Object boolean

double

String

Ngoi ra phng thc println khng tham s c s dng kt thc mt dng.


PrintStream h tr hai constuctor. Constructor th nht nhn tham s l mt lung.
Constructor th hai c thm tham s iu khin vic y d liu ra khi lung.
Ngoi ra cn mt s kiu lung xut v nhp khc nh DataInputStream,
DataOutputStream,ty thuc vo tng tnh hung c th m chng ta c nhng la chn
cho ph hp.

4. Lung k t
Lung k t cung cp mt cch thc qun l vic vo ra vi cc k t. Cc lung ny s
dng tp k t Unicode v v th c th quc t ha. Trong mt s trng hp lm vic vi
cc lung k t hiu qu hn lung byte.
Cc lung k t chun vay mn t rt nhiu cc lp lung hng byte, bao gm
lung lc, lung m, v cc lung tp tin, v tt c cc lung c dn xut t cc lp cha
Reader v Writer. Ngoi ra, c hai lp ng vai tr cu ni gia cc lung byte v cc lung
k t. Hai lp ny kt hp cc hm chuyn i cc k t thnh cc byte v ngc li theo
mt kiu m ha c xc nh. iu ny cho php mt ngun d liu ASCII c
chuyn i d dng thnh mt lung k t Unicode v tng t cho d liu Unicode c
ghi mt cch d dng vo mt tp tin theo chun m ha cc b, cho d n l chun 8-bit,
UTF-8, hoc 16 bit.
72 105 33 8-bit

InputStream

InputStreamReader

16-bit Hi!

Hnh 4.6

Hi! 16-bit

OutputStreamWriter

OutputStream

255 254 0 105 0 33 0

Hnh 4.7
4.1. S tng ng gia lung byte v lung k t
Bng di y ch ra s tng ng gia lung byte v lung k t
Lung byte

Lung k t

OuputStream

Writer

InputStream

Reader

FileOutputStream

FileWriter

FileInputStream

FileReader

ByteArrayInputStream

CharArrayReader

68

Su tm bi: www.daihoc.com.vn

ByteArrayOutputStream

CharArrayWriter

StringWriter

StringBufferedInputStream StringReader
PipedOuputStream

PipedWriter

PipedInputStream

PipedReader

FilterOutputStream

FilterWriter

FilterInputStream

FilterReader

BufferedOuputStream

BufferedWriter

BufferedInputStream

BufferedReader

PushbackInputStream

PushbackReader

LineNumberInputStream

LineNumberReader

PrintStream

PrintWriter

DataOutputStream

DataInputStream

ObjectInputStream

ObjectOuputStream

SequenceInputStream

OuputStreamWriter

OutputStreamReader

Bng 3.1
4.2. M ha k t
Khi to cu ni gia mt lung k t v mt lung byte, cn thit phi xc nh cch
m ha c s dng bi cc lung byte; ngha l, cc k t c biu din bi tng byte
hoc tng nhm cc byte. Tn ca cch m ha cc byte c c t bi mt xu k t
c truyn cho constructor to cu ni OuputStreamReader v InputStreamReader.
M ha
US-ASCII
IBM-EBCDIC
ISO Latin
ISO Latin 2
UTF-8

Char
!
!

Bytes
33
90

Bng 3.2

69

Su tm bi: www.daihoc.com.vn

Cc phng thc hng k t ca cc lung byte tng ng vi latin 1, cn c


bit n nh l ISO Latin 1 hoc ISO 8859-1; ngha l cch m ha 8-bit tng ng vi 256
k t Unicode u tin. Cc tn kiu m ha k t thng l phn bit ch hoa v ch
thng.
4.3 Lp Writer
Writer l lp cha ca tt c cc lung xut k t. N cung cp cc phng thc tng
t nh lung OuputStream, nhng ch yu l ghi cc k t.
4.3.1. Cc constructor
C hai constructor c cung cp bi lp ny. Cc constructor ny l protected. Ta
khng th to cc i tng ca lp Writer nhng ta c th to ra cc i tng thuc lp
con ca lp ny.

protected Writer()

protected Writer(Object obj)

4.3.1. Cc phng thc


Lp Writer cung cp cc phng thc ghi cc k t, t mt mng, hoc mt phn
ca xu k t.

void write(int c) throws IOException


Phng thc ny ghi k t c vo knh truyn tin c biu din bi lung ny.

void write(char cbuff[]) throws IOException


Phng thc ny ghi mng k t vo lung

abstract void write(char cbuff[], int off, int len) throws IOException

Phng thc ny ghi len k t t mng cbuff ra lung gn vi mng, bt u t v tr


off. y l phng thc tru tng bi v n phi c ci t bi mt lp con gn vi
knh truyn tin thc s, nh tp tin hoc mt lung khc.

void write(String str) throws IOException.


Phng thc ny ghi mt xu k t str ra lung.

4.4. Lp Reader
Reader l lp cha ca tt c cc lung nhp k t. N cung cp cc phng thc
tng t nh lung InputStream, nhng ch yu phc v cho vic c cc k t.

protetected Reader()

protected Reader(Object lock)

4.4.1. Cc phng thc


Cc phng thc ca lp Reader ging nh cc phng thc ca lp InputStream
ngoi tr phng thc available() c thay th bi phng thc ready().

int read() throws IOException

Phng thc ny c mt k t t knh truyn tin c biu din bi lung ny v tr


v k t, hoc gi tr -1 nu kt thc lung.
int read(char cbuff[]) throws IOException
Phng thc ny c cc k t vo mng cbuff
4.5. Lp OutputStreamWriter
Lp ny cung cp mt cu ni Writer hng k t vi mt lung OutputStream. Cc
k t c ghi vo lp Writer c chuyn thnh cc byte tng ng vi mt kiu m ha
c xc nh trong constructor v sau c ghi vo lung OutputStream gn vi n.
Lp ny cung cp kh nng m d liu cho cc byte ghi vo lung.

70

Su tm bi: www.daihoc.com.vn

Cc constructor
public OutputStreamWriter(OutputStream out)

public OutputStreamWriter(OutputStream out, String encoding)

String getEncoding()

Phng thc ny tr v tn cch m ha cc byte c s dng chuyn i cc


k t thnh cc byte.
4.6. Lp InputStreamReader
Lp ny biu din mt cu ni hng k t ca mt lung nhp InputStream. Cc
byte c c t lung nhp v c chuyn thnh cc k t tng ng vi kiu m ha
c xc nh trong constructor.

InputStreamReader(InputStream in)

InputStreamReader(InputStream in, String enc)

String getEncoding()

Phng thc ny tr v tn ca cch m ha byte c s dng bi lung ny


chuyn i t cc byte thnh cc k t.
V d: Chuyn i cch m ha
import java.io.*;
public class Convert
{
public static void main(String[] args) throws Exception
{
if(args.length!=4)throw
<source> <dstEnc> <dst>");

new

IllegalArgumentException("Convert

<srcEnc>

FileInputStream fis=new FileInputStream(args[1]);


FileOutputStream fos=new FileOutputStream(args[3]);
InputStreamReader isr=new InputStreamReader(fis,args[0]);
OutputStreamWriter osw=new OutputStreamWriter (fos,args[2]);
char b[]=new char[16];
int num;
while((num=isr.read(b))>-1)osw.write(b,0,num);
osw.close();
isr.close();

}
}
4.7. Lp FileWriter
Lp Writer ny cung cp mt interface lung k t ghi cc tp tin vn bn bng
cch s dng m ha mc nh.
xc nh cch m ha c s dng m ha mt tp tin, ta s dng mt lung
OuputStreamWriter gn vi lung FileOutputStream.
Cc constructor

71

Su tm bi: www.daihoc.com.vn

To mt i tng FileWriter hon ton tng ng vi vic to ra mt i tng


OuputStreamWriter s dng cch m ha mc nh v gn n vi i tng
FileOuputStream
FileWriter(String filename)throws IOException.

Constructor ny to ra mt i tng FileWriter ghi thng tin vo mt tp tin c th


l fileName, s dng cch m ha k t mc nh. Bt k tp no c cng tn s b
xa.
FileWriter(File file)throws IOException.

Constructor ny to ra mt i tng FileWriter ghi thng tin vo mt tp tin c th,


s dng cch m ha k t mc nh. Bt k tp no c cng tn s b xa.
FileWriter(String fileName, boolean append) throws IOException.

Constructor ny to ra mt i tng FileWriter ghi thng tin vo mt tp tin c th,


s dng cch m ha k t mc nh. Bin boolean append xc nh cch thc ghi
vo tp tin: ghi mi hay b sung thm ni dng vo tp hin c.
Cc phng thc
Lp FileWriter cung cp tt c cc phng thc thng dng ca lp Writer. Vic ghi
cc k t vo mt lung FileWriter to ra cc k t c chuyn thnh cc byte tng ng
vi cch m ha c th v cc byte ny c ghi vo tp tin gn vi lung ny.
Ngoi l IOException s c a ra bi cc phng thc ca lp FileWriter nu gp
mt li trong qu trnh ghi tp tin, hoc khng to ra c i tng FileWriter th n a ra
ngoi l IOException.
4.8. Lp FileReader
Lp Reader ny cung cp mt interface lung k t c cc tp vn bn bng cch
s dng cch m ha k t mc nh. Lp ny cho php ta c cc tp tin vn bn nh c
cc lung k t Unicode m khng cn quan tm n cch thc m ha k t .
xc nh cch m ha c s dng gii m mt tp tin, ta s dng mt i
tng InputStreamReader gn vi it tng InputStreamReader.
Vic to ra mt i tng FileReader hon ton tng ng vi vic to ra mt i
tng InputStreamReader v sau gn n vi lung FileInputStream.
FileReader(String fileName)throws FileNotFoundException.

Constructor ny to ra mt i tng FileReader c ni dung ca mt tp tin c th,


c xc nh bi tham s fileName bng cch s dng cch m ha mc nh.
FileReader(File file)throws FileNotFoundException.

Constructor ny to mt i tng FileReader c ni dung ca mt tp tin c th


c xc nh bi tp tin file s dng cch thc m ha mc nh.
Cc phng thc
Lp FileReader cung cp cc phng thc ca lp Reader. c cc k t t mt i
tng FileReader.
V d minh ha
V d di y minh ha cch s dng cc lung FileWriter v FileReader.
import java.io.*;
public class TepKyTu
{
public static void main(String[] args) throws IOException
{

72

Su tm bi: www.daihoc.com.vn

FileReader fr=new FileReader(FileDescriptor.in);


FileWriter fw=new FileWriter(FileDescriptor.out);
char[] b=new char[256];
int num;
while((num=fr.read(b))>-1)
{
String upper=new String(b,0,num).toUpperCase();
fw.write(upper);
fw.flush();
}
}
}
Kt qu thc hin chng trnh l
C:\>java TepKyTu
Xin chao cac ban! Day la chuong trinh minh hoa FileReader va FileWriter
XIN CHAO CAC BAN! DAY LA CHUONG TRINH MINH HOA FILEREADER VA
FILEWRITER
Trong v d ny, ta gn FileReader vi FileDescriptor.in, lung ny gn vi bn phm.
Ta cng gn FileWriter vi FileDescriptor.out, lung ny gn vi mn hnh. Trong vng lp,
d liu c c t bn phm vo vng m b[], chuyn i cc k t ny thnh ch vit
hoa sau ghi d liu ra lung xut.

5. Lung m
Cc lung InputStream v OuptutStream l cc lung th. Chng c v ghi cc byte
theo tng nhm. Vic xc nh cc byte ny c ngha nh th no-chng l s nguyn hay
cc s du phy ng theo chun IEEE 754 hay l cc k t Unicode-iu ny hon ton
ph thuc vo ngi lp trnh. Tuy nhin, c nhng khun dng d liu rt ph bin
c ci t trong cc th vin lp. Java cung cp mt s lp lc ta gn cc lung d
liu th vi chng nhm mc ch chuyn i qua li gia cc byte v cc khun dng d
liu khc.
Cc lung lc cng c hai loi l:lung c (reader) v lung ghi (writer). Kt ni cc
lung lc vi nhau. Cc lung lc c kt ni vi cc lung thng qua cc constructor ca
chng.
V d
FileInputStream fis=new FileInputStream(data.txt);
BufferedInputStream bis=new BufferedInputStream(fis);
Trc tin, ta thy mt i tng FileInputStream c to ra vi tham s u vo l
mt tn tp tin data.txt. Sau , ta to tip i tng BufferedInputStream bis vi tham s
u vo ca constructor BufferedInputStream l fis. T thi im ny tr i, ta c th s
dng cc phng thc read() c c i tng fis v bis.
Ta cng c th xy dng trc tip mt lung bn trong mt lung khc.
DataOuputStream dos =new DataOutputStream(new BufferedOutputStream(new
FileOutputStream(data.txt)));

73

Su tm bi: www.daihoc.com.vn

Cc lung m
Lp BufferedOutputStream lu tr d liu c ghi vo trong mt vng m cho ti
khi vng m y hoc l lung b flush(). Sau n ghi d tt c d liu ra lung xut ng
mt ln. iu ny lm tng tc trao i d liu.
Lp BufferedInputStream cng c mt mng byte c s dng lm vng m.
Khi mt trong cc phng thc c lung read() c gi, trc tin n nhn d liu c
yu cu t vng m. Ch khi vng m ht d liu thc s n mi c d liu t ngun.
Lc ny, n c cng nhiu d liu t ngun vo vng m nu c th, cho d d liu c
cn ngay tc khc hay khng.

public BufferedInputStream(InputStream in)

public BufferedInputStream(InputStream in, int bufferSize)

public BufferedOutputStream(OutputSream out)

public BufferedOutputStream(OutputStream out, int bufferSize)

BufferedInputStream khng khai bo cc bt k phng thc mi no ca ring n.


N ch np chng cc phng thc t InputStream. N thc s h tr vic nh du v khi
to li lung.

public int read() throws IOException

public int read(byte[] input,

6. Lung vo ra mi New Input Output


Bt u t phin bn Java 1.4 Sun b sung thm mt cch mI qun l cc
thao tc vo ra.
6.1. Cn bn v NIO
H thng vo ra mI c xy dng da trn hai hng mc c bn l: buffer v
channel. Mt vng m (buffer) lu tr d liu. Mt knh (channel) biu din mt lin kt m
ti mt thit b vo ra mi, nh tp tin hoc mt socket. s dng h thng vo ra mi, ta
phi nhn mt knh truyn ti mt thit b vo ra v mt vng m lu tr d liu. Sau
ta c th thc hin thao tc trn vng m vo v ra d liu.
6.2. Buffer (Cc vng m)
Cc vng m c nh ngha trong gi java.io. Tt c cc vng m l cc lp con
ca lp con Buffer, lp ny nh ngha chc nng chnh dng chung cho tt c cc vng
m: v tr hin thi, gii hn, v dung lng. V tr hin ti l ch mc trong vng m m ti
thao tc c v ghi tip theo s din ra. Gii hn l ch mc cui cng ca vng m.
Dung lng l s phn t c trong vng m. Buffer cng h tr kh nng nh du v khi
to. Buffer nh ngha mt s phng thc.
Phng thc
Final int capacity()
Final Buffer clear()
Final Buffer flip()
Final boolean hasRemaining()
Abstract boolean isReadOnly()
Final int limit()
Final Buffer limit(int n)
Final Buffer mark()

M t
Tr v s phn t c trong vng m
Xa vng m
Thit lp gii hn ca vng m v v tr hin hnh v
thit lp li v tr hin hnh v 0
Phng thc ny tr v gi tr true nu cn cc phn
t trong vng m. Tr v gi tr false nu ngc li
Tr v gi tr true nu vng m l ch c. Tr v gi
tr false nu ngc li
Thit lp gii hn ca vng m l n
Thit lp gii hn ca vng m l n v tr v tham
chiu ti vng m c gi
Thit lp v tr nh du v tr v tham chiu ti vng

74

Su tm bi: www.daihoc.com.vn

m c gi
Tr v v tr hin hnh ca vng m
Thit lp v tr ca Buffer l n. Tr v mt tham chiu
ti vng m
Thit lp li v tr hin hnh ca vng m v v tr
nh du c thit lp trc . Tr v mt tham
chiu ti vng m
Thit lp v tr hin hnh ca vng m v 0
Bng 3.3

Final int Position()


Final Buffer position(int n)
Final Buffer reset()

Final Buffer rewind()

Lp Buffer c cc lp con cha cc kiu d liu nh sau:

ByteBuffer

IntBuffer

CharBuffer

LongBuffer

DoubleBuffer

MappedByteBuffer

FloatBuffer

ShortBuffer

Tt c cc phng thc get() v put() cho php ta nhn d liu t mt vng m v


t d liu vo mt buffer.
Phng thc
Abstract byte get()
ByteBuffer get(byte[] vals)

ByteBuffer get(byte vals[], int start, int


num)

Abstract byte get(int idx)


Abstract ByteBuffer put(byte b)
final ByteBuffer put(byte b[])

ByteBuffer put(byte b[], int start, int num)

BufferByte put(ByteBuffer bb)

Abstract ByteBuffer put(int idx, byte b)

M t
Tr v byte d liu ti v tr hin hnh
Sao chp d liu t vng m vo mt
mng c tham chiu bi mng vals. Tr
v mt tham chiu ti buffer
Sao chp num s phn t t buffer vo
mng c tham chiu bi vals, bt u
ti ch mc c xc nh bi tham s
start. Tr v tham chiu ti vng m. Nu
khng cn phn t no trong vng m,
ngoi l BufferUnderflowException
Tr v byte d liu ti v tr c xc nh
bi ch mc idx trong vng m
Sao chp byte d liu b vo ti v tr hin
hnh
Sao chp tt c cc phn t ca mng b
vo vng m, bt u t v tr hin hnh.
Tr v tham chiu ti vng m
Sao chp num phn t t mng b bt u
ti v tr start vo vng m. Tr v tham
chiu ti vng m. Nu vng m khng
cha c tt c cc phn t ca vng
m th ngoi l BufferOverflowException
s c a ra
Sao chp tt c cc phn t ca vng m
BufferByte gi, bt u t v tr hin hnh .
Nu vng m khng cha c tt c
cc phn t ca vng m th ngoi l
BufferOverflowException s c a ra
Sao chp byte d liu b ti v tr idx vo
vng m. Tr v tham chiu ti vng m

75

Su tm bi: www.daihoc.com.vn

Bng 3.4
Phng thc put()c nh ngha trong ByteBuffer. Tt c cc lp buffer cn h tr
cc phng thc thc hin cc thao tc khc nhau trn vng m.
6.3. Cc knh (Channel)
Cc knh c nh ngha trong gi java.io.channel. Mt knh biu din mt lin kt
m ti mt ngun hoc ch vo ra. Ta c th nhn c mt knh bng cch gi phng
thc getChannel() trn mt i tng h tr knh. Java 2 phin bn 1.4 a thm vo
phng thc getChannel() cho cc lp sau:

FileInputStream

FileOutputStream

RandomAccessFile

Socket

ServerSocket

DatagramSocket

nhn c mt knh, trc tin ta phi nhn mt i tng ca cc lp ny v


sau gi phng thc getChannel() trn i tng .
Kiu knh c th c tr v ph thuc vo kiu i tng chu tc ng ca phng
thc getChannel(). V d khi gi phng thc getChannel() trn i tng FileInputStream,
FileOutputStream hoc RandomFileAccess th knh tr v l FileChannel. Khi gi phng
thc getChannel() trn i tng Socket th kiu knh tr v l SocketChannel().
Cc knh FileChannel v SocketChannel h tr cc phng thc read() v write() cho
php ta thc hin cc thao tc vo ra thng qua knh. Di y l mt s phng thc
read() v write()c nh ngha trong FileChannel.

Phng thc
abstract int read(ByteBuffer bb)

abstract int read(ByteBuffer bb, long


start)

abstract int write(ByteBuffer bb)

abtsract int write(ByteBuffer bb, int


start)

M t
c cc byte t knh vo mt vng m bb
cho ti khi y vng m hoc khng cn d
liu trn knh. Kiu tr v l s byte thc s
c c
c cc byte t knh vo mt vng m, bt
u t v tr start cho ti khi y vng m
hoc khng cn d liu u vo. V tr hin
thi khng thay i. Tr v s byte c
c hoc 1 nu kt thc lung
Ghi ni dung ca vng m ra knh, bt u
ti v tr hin hnh. Tr v s byte c
ghi.
Ghi ni dung ca vng m ra knh. Bt u
ti v tr hin start. Tr v s byte c ghi
Bng 3.5

Tt c cc knh u h tr cc phng thc b tr cho php ta truy xut v iu


khin knh. V d, FileChannel h tr cc phng thc nhn v thit lp v tr hin hnh,
truyn thng tin qua li gia cc knh, nhn kch thc hin thi ca knh, kha
knh,..FileChannel cng cung cp phng thc map() nh x mt tp vo mt buffer.
6.4. Charset v Selector
Hai thc th khc c s dng bi NIO l cc CharSet v Selector.
CharSet xc nh cch nh x cc byte thnh cc k t. Ta c th m ha mt xu k
t bng cch s dng mt b m ha v cng c th gii m mt dy cc byte thnh cc k

76

Su tm bi: www.daihoc.com.vn

t bng cch s dng b gii m. Charset, encoder v decoder c h tr bi gi


java.nio.charset.
Selector h tr vo ra ghp knh, khng phong ta, da trn phm. Ngoi ra, selector
cn cho php ta lm vic vi nhiu knh. Selector c h tr bi cc lp trong gi
java.io.channels. Cc selector ng dng nhiu nht vi cc knh da trn lung.

6.5. S dng h thng vo ra mi


n v d liu vo ra ph bin nht l tp tin, trong phn ny ta s xem cch thc
truy xut ti cc tp tin trn a bng cch s dng h thng vo ra mi. Do hu ht cc
thao tc trn tp l mc byte nn kiu vng m c s dng s l ByteBuffer.
6.5.1. c tp
C mt s cch c d liu t mt tp tin bng cch s dng h thng vo ra mi.
Chng ta s xem xt hai cch. Cch th nht c mt tp tin bng cch nh x n vo mt
buffer v sau thc hin mt thao tc c. Cch th hai c mt tp tin l t ng ha
qu trnh c.
Cch 1:

Bc 1: M mt tp tin c bng cch s dng lung FileInputStream.


Bc 2: Nhn mt knh t i tng FileInputStream nh phng thc
FileChannel getChannel()
Bc 3: Xc nh kch thc ca tp tin bng cch gi phng thc size()
Long size() throws IOException
Bc 4:
Gi phng thc allocate() phn b mt vng m ln lu gi ni dung ca
tp.
static ByteBuffer allocate(int cap)
V d
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
public class ChannelRead
{
public static void main(String[] args)
{
FileInputStream fis;
FileChannel fc;
long fSize;
ByteBuffer bb;
try{
//Mo mot ep
fis=new FileInputStream(args[0]);
//Mo mot kenh toi tep
fc=fis.getChannel();

77

Su tm bi: www.daihoc.com.vn

//Nhan kich thuoc tep tin


fSize=fc.size();
//Phan bo mot vung dem co kich thuoc can thiet
bb=ByteBuffer.allocate((int)fSize);
//Doc tep tin vao vung dem
fc.read(bb);
//Mo tep de doc
bb.rewind();
for(int i=0;i<fSize; i++) System.out.print((char)bb.get());
fc.close();
fis.close();
}
catch(IOException e)
{
System.out.println(e);
}
}
}
Kt qu thc hin chng trnh
C:\MyJava>javac ChannelRead.java
C:\MyJava>java ChannelRead Bai3.java
class Bai3 {
public static void main( String args[] ) {
double x = 42 ;
System.out.println( x = 42 % 3 + 3 * 3 - 3 / 3 );
}
}

Cch 2

Mt cch d hn c mt tp tin l nh x vo mt vng m. u im cho ca


cch tip cn ny l vng m t ng lu ni dung ca tp tin. Khng cn thao tc c c
th no.
Cc bc thc hin
Bc 1: M mt tp tin bng cch s dng lung FileInputStream
Bc 2: Nhn mt knh ti tp tin bng cch gi phng thc getChannel() trn
i tng FileInputStream.
Bc 3: nh x knh vi mt vng m bng cch gi phng thc map() trn i
tng FileChannel. Phng thc map c dng nh sau:

78

Su tm bi: www.daihoc.com.vn

MappedByteBuffer map(FileChannel.MapMode how, long pos, long size) throws


IOException
Phng thc map() lm cho d liu trong tp tin c nh x vo vng m trong
b nh. Tham s how xc nh kiu thao tc c php thc hin trn tp tin:
MapMode.READ
MapMode.READ_WRITE
MapMode.PRIVATE
c mt tp tin ta dng ch MapMode.READ. c v ghi tp ta dng ch
MapMode.READ_WRITE. Ch MapMode.PRIVATE ch lm cho mt bn sao ring ca
mt tp b thay i v nhng thay i ny khng nh hng ti tp tin. V tr trong tp tin bt
u nh x c xc nh bi tham s pos v s byte nh x c xc nh bi size.
Phng thc tr v l mt tham chiu MappedByteBuffer, l mt lp con ca ByteBuffer.
Mi khi tp tin c nh x vo vng m ta c th c tp t vng m.
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
public class MappedChannelRead
{
public static void main(String[] args)
{
FileInputStream fis;
FileChannel fc;
MappedByteBuffer mbb;
long fSize;
try{
//Mo tep de doc
fis=new FileInputStream(args[0]);
//Mo kenh
fc=fis.getChannel();
//Nhan kich thuoc tep
fSize=fc.size();
// Anh xa file vao vung dem
mbb=fc.map(FileChannel.MapMode.READ_ONLY,0,fSize);
//Doc cac byte tu vung dem
for(int i=0; i<fSize;i++) System.out.print((char)mbb.get());
fc.close();
fis.close();
}
catch(IOException e)
{

79

Su tm bi: www.daihoc.com.vn

System.out.println(e.getMessage());
System.exit(1);
}
}
}
Kt qu thc hin
C:\MyJava>java MappedChannelRead Bai3.java
class Bai3 {
public static void main( String args[] ) {
double x = 42 ;
System.out.println( x = 42 % 3 + 3 * 3 - 3 / 3 );
}
}
6.5.2. Ghi tp tin
C mt s cch ghi tp thng qua mt knh. y, chng ta cng tm hiu hai
cch ghi tp. Cch th nht l ghi tp thng qua mt knh bng cch s dng cc thao tc
write. Cch th hai, nu tp tin c m thc hin cc thao tc c/ghi, ta c th nh x
tp vo mt vng m v sau ghi vo vng m. Nhng thay i vi vng m s c
t ng nh hng n tp tin. C hai cch u c m t trong mc ny.
ghi mt tp thng qua knh bng cch s dng cc li gi ti phng thc write(),
ta thc hin cc bc sau y.
Bc 1: M mt tp ghi.
Bc 2: Xc nh mt vng m byte ghi d liu vo vng m , sau gi
phng thc write().
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
public class ChannelWrite
{
public static void main(String[] args)
{
FileOutputStream fos;
FileChannel fc;
ByteBuffer bb;
try
{

String s="This is a test of NIO system";


fos=new FileOutputStream(args[0]);
fc=fos.getChannel();
bb=ByteBuffer.allocateDirect(s.length());

80

Su tm bi: www.daihoc.com.vn

//Ghi mot so byte vao vung dem


byte[] b=s.getBytes();
for(int i=0;i<b.length;i++)bb.put(b[i]);
bb.rewind();
fc.write(bb);
fc.close();
fos.close();
}
catch(Exception e)
{
System.err.println(e);
}

}
}
Sao chp mt tp bng cch s dng tin ch vo ra mi
H thng vo ra mi n gin ha mt s kiu thao tc trn tp tin. V d, chng
trnh di y sao chp mt tp tin.
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
public class NIOCopy
{
public static void main(String[] args)
{
FileOutputStream fos;
FileInputStream fis;
FileChannel fco,fci;
long fSize;
MappedByteBuffer mbb;
try{
fis=new FileInputStream(args[0]);
fos=new FileOutputStream(args[1]);
fci=fis.getChannel();
fco=fos.getChannel();

81

Su tm bi: www.daihoc.com.vn

fSize=fci.size();
mbb=fci.map(FileChannel.MapMode.READ_ONLY,0,fSize);
fco.write(mbb);
fci.close();
fco.close();
fos.close();
fis.close();
}
catch(Exception e)
}
}
}

7. Kt lun
Chng ny chng ta tm hiu cc khi nim cn bn v vo ra bng cch s
dng cc lung trong Java. Cng trong chng ny cc lung hng byte v cc lung
hng k t trong Java c gii thiu. Khi nim vo ra mi bng cch s dng cc
knh (channel) v vng m (buffer) cng c gii thiu trong chng ny. cc chng
tip theo cc bn s thy hu ht cc chng trnh lp trnh mng u vo ra d liu bng
cch s dng cc lung. Vic hiu bit su v lung vo ra s l mt li th bn c tip
cn vi cc chng tip theo.

82

Su tm bi: www.daihoc.com.vn

Chng 4

Lp trnh a tuyn on
1. Tng quan
Khi thc hin mt cng vic phc tp ngi ta thng chia cng vic ra thnh nhiu
phn v giao cng vic cho nhiu ngi cng thc hin, iu ny gip cho cng vic c
tin hnh nhanh chng. Cc ng dng phn mm s dng mt chin lc tng t c
gi l a tuyn on chia nh cc tc v thnh cc n v d qun l. Lp trnh a tuyn
on l mt khi nim quan trng trong lp trnh mng bng Java v cc client v server
thng phi thc hin mt s tc v ng thi ti cng mt thi im (v d lng nghe cc
yu cu v p ng cc yu cu, x l d liu v cp nht giao din ha ngi dng).
Trc khi i vo tm hiu lp trnh a tuyn on trong Java, ta cn hiu r s khc nhau
gia lp trnh n tuyn on, lp trnh a tin trnh v lp trnh a tuyn on.

1.1. Lp trnh n tuyn on


Khi nim a tuyn on l khi nim kh i vi nhng ngi mi bt u lm quen.
Rt nhiu ngn ng lp trnh v h iu hnh trc y khng h tr a tuyn on.
Phn mm truyn thng c vit bng cc ngn ng th tc c bin dch thnh
mt khun dng m my c th hiu c gi l m my. B x l trung tm c m ny v
x l cc lnh theo cu trc tun t ht lnh ny n lnh tip theo. Thi gian thc hin cc
lnh c th thay i ty thuc vo bn cht ca cc lnh.
u im chnh ca kiu lp trnh ny l tnh n gin ca n. Nu mt lnh khng
hon thnh th lnh tip theo s khng c x l. iu ny ngha l ngi lp trnh c th
d on trng thi ca my ti bt k thi im no cho trc.
1.2. Lp trnh a tin trnh
a nhim l kh nng ca mt h iu hnh my tnh chy nhiu chng trnh ng
thi trn mt CPU. iu ny c thc hin bng cch chuyn hot ng t mt chng
trnh ny sang chng trnh khc tng i nhanh to cho ngi s dng cm gic tt
c cc chng trnh ang c x l ng thi. C hai kiu a nhim:

a nhim u tin. Trong a nhim u tin, h iu hnh xc nh cch phn b cc


thi gian ca CPU cho tng chng trnh. Cui mi khong thi gian m CPU phn
b, chng trnh hin ang hot ng buc phi tr quyn iu khin cho h iu
hnh, d n c mun hay khng. Cc v d v h iu hnh h a nhim u tin l
Unix, Windows 95/98, Windows NT.

a nhim hp tc. Trong a nhim hp tc, mi chng trnh kim sot mt phn
thi gian CPU m n cn. iu ny ngha l mt chng trnh phi hp tc trao
quyn iu khin cho cc chng trnh khc, nu khng n s chim dng CPU. Cc
h iu hnh a nhim hp tc l Windows 3.1 v Mac OS 8.5.

Nhng ai quen lp trnh trn h thng Unix hn l quen vi khi nim lp trnh
a tin trnh. h tr a nhim, Unix s dng khi nim cc tin trnh. Mi ng dng ang
chy l mt tin trnh, vi b nh c phn b cho chng trnh v d liu. C nhiu tin
trnh chy trn cng mt my. H iu hnh s phn b thi gian cho tng tin trnh, dng
tin trnh khi ht thi gian v cho php tin trnh khc tip tc. i khi, mt tin trnh b phong
ta hoc c th t chn ginh thi gian CPU.
Lp trnh a tin trnh c cc li ch khc. Cc chng trnh t chng c th to ra cc
tin trnh mi , mt phn chng trnh thc hin mt tc v trong khi mt phn khc thc
hin cng vic khc. V d, khi ang kim tra email trn mt my xa, giao din ngi dng
c th hin th din tin ca thao tc v cho php ngi dng son tho cc thng ip v
c cc thng ip c ti v trc .
Mc d lp trnh a tin trnh hot ng tt, nhng n vn c nhng nhc im.
Trc ht, khi mt tin trnh phn nhnh thnh hai tin trnh, s dn n s chng cho gia

Su tm bi: www.daihoc.com.vn

vic lu tr d liu ca tin trnh ny vi tin trnh khc. Mi tin trnh cn c mt bn sao
d liu ca ring n, v vy nu c nhiu tin trnh th s cn nhiu b nh. Th hai l khng
c cch no mt tin trnh truy xut v sa i d liu ca mt tin trnh khc.

1.3. Lp trnh a tuyn on


a tuyn on m rng khi nim a nhim bng cch cho php mt chng trnh
thc hin mt s tc v ng thi. Mi tc v c xem nh l mt tuyn on v n c mt
lung iu khin ring. a tuyn on rt hu ch trong cc ng dng thc t. V d, nu
qu trnh np mt trang web vo trnh duyt qu lu, ngi s dng cn phi c kh nng
ngt vic np trang web bng cch n nt lnh stop. Giao din ngi dng c th tip tc
p ng cc yu cu ca ngi dng bng cch s dng mt tuyn on ring cho hot
ng np trang web.
lp trnh a tuyn on ta cn c mt cch nhn nhn v phn mm khc. Ngoi
vic x l tun t, cc tc v cn c th c x l ng thi-ngha l, nhiu tc v c
thc hin cng mt lc m khng cn i tc v ny hon thnh mi tin hnh tc v khc.
a tuyn on cn c ngha l nhiu tuyn x l, cho php mt chng trnh c nhiu th
hin cng hot ng, cng s dng chung b nh. Mt ng dng c th thc hin nhiu tc
v ng thi v cc tuyn on c th truy xut ti cc bin d liu dng chung cng lm
vic hp tc vi nhau.
Nu my tnh ch c mt CPU, th ch c mt tuyn on ang chy ti mt thi im
cho trc. H iu hnh duy tr mt hng i cc tuyn on v phn b thi gian CPU cho
chng. Tuy nhin, thi gian phn b thi gian cho mt tuyn on l cng bng trong nhiu
tnh hung, v n ngn cc tuyn on khc thc hin cng vic. (tnh trng ny cn c
gi l i tuyn on). Ta cn phi c mt cch no phn b thi gian CPU ginh cho
mi tuyn on l nh nhau.
Mc ch ca tin trnh v tuyn on u l cho php nhiu my tnh thc hin
nhiu tc v ng thi.
V d: A l mt ti khon ti ngn hng. Phng thc getBalance(): ly ra gi tr ca
ti khon. Phng thc setBalance(): chp li gi tr vo bn ghi ti khon. Xt v d tuyn
on di y

a=A.getBalance();

a+=deposit;

A.setBalance(a);

Hnh 4.1

Su tm bi: www.daihoc.com.vn

a=A.getBalance();
b=B.getBalance();
a+=deposit;
b+=deposit;
A.setBalance(a);
B.setBalance(a);

Hnh 4.2
a tuyn on (Multi-thread)
Mt ng dng c th c nhiu tuyn on. Kh nng lm vic vi nhiu tuyn on
c gi l a tuyn on. a tuyn on cho php bn vit cc chng trnh hiu qu tn
dng ti a CPU bng cch duy tr thi gian tr l ti thiu.
Ti cng mt thi im c hai khch hng cng ghi vo cng mt ti khon. Nu thc
hin nh vy th ch c tuyn on th hai mi thc s nh hng ti ti khon, kt qu ca
giao dch th nht s b mt. khc phc iu ny cn c mt c ch thng bo mt
i tng ang c s dng hay khng.
Vng i ca mt tuyn on
Mt tuyn on c th mt trong bn trng thi sau trong sut vng i ca n:

new-Mt tuyn on mi l mt tuyn on c to ra bng cch s dng ton t


new nhng vn cha c khi ng.

runnable-Mt tuyn on trng thi runnable mi khi phng thc start() ca n


c kch hot. iu ny ngha l m lnh trong phng thc run() c th c x
l bt k khi no ginh c quyn x l t h iu hnh.

blocked-(b phong ta)- Mt tuyn on chuyn vo trng thi blocked (b phong


ta) nu mt trong cc s kin sau xy ra:

Phng thc sleep() ca tuyn on c gi. Trong trng hp ny,


tuyn on vn trng thi blocked cho ti khi ht mt s ms (mili giy)
xc nh.

Tuyn on gi phng thc wait() ca mt i tng. Trong trng hp


ny tuyn on vn trng thi blocked cho ti khi phng thc notify()
hoc notifyAll() c gi t mt tuyn on khc. Cc phng thc
wait(), notify()v notifyAll() thng c tm thy trong cc phng thc
ng b synchronized ca i tng.

Tuyn on phong ta mt thao tc vo/ra. Trong trng hp ny, tuyn


on b phong ta cho ti khi hot ng vo ra hon thnh.

Dead (cht)-Mt tuyn on thng trng dead khi phng thc run() hon thnh
vic x l.

Su tm bi: www.daihoc.com.vn

2. To cc ng dng a tuyn on vi lp Thread


Lp java.lang.Thread cung cp cc phng thc khi ng (start()), tm dng
(suspend()), phc hi (resume()) v dng hn (stop()) mt tuyn on, cng nh kim sot
cc kha cnh khc nh u tin ca tuyn on hoc tn ca tuyn on gn vi n.
Cch n gin nht s dng lp Thread l tha k lp ny v np chng phng thc
run(), phng thc ny c gi khi tuyn on c khi ng ln u. Bng cch np
chng phng thc run(), mt tuyn on c th thc hin mt s tc v hu ch hu
trng.
Ch : Cn nh rng cc tuyn on khng chy t ng ti thi im chy. Thay vo
, ta phi gi phng thc Thread.start(), nu khng tuyn on s khng chy.
Khung dng chung to mt ng dng a tuyn on bng cch s dng lp
Thread
class C1 extends Thread
{
public C1(){this.start();}
public void run(){...}
}
V d: Vit chng trnh to lp mt ng dng a tuyn on. To lp ra hai tuyn
on mi tuyn on in ra mt t vi tc khc nhau bng cch tha k lp Thread
class PingPong extends Thread {
String word;
int delay;
PingPong(String s, int d)
{
word =s;
delay=d;
}
public void run()
{
try{
for(;;)
{
System.out.print(word+" ");
sleep(delay);
}
}
catch(InterruptedException e)
{
return;
}
}
public static void main(String[] args)
{
new PingPong("ping",33).start();
new PingPong("PONG",100).start();
}
}

Su tm bi: www.daihoc.com.vn

3. To ng dng a tuyn on vi giao tip Runnable


Tha k lp Thread l mt cch to ra ng dng a tuyn on nhng n khng
phi l gii php tt nht. Chng ta u bit rng Java ch h tr n tha k nn vic ci
t cc ng dng a tha k l khng th c nu to ng dng a tuyn on bng cch
tha k t lp Thread. Mt gii php c th khc phc iu ny l thc thi giao tip
java.lang.Runnable.
Giao tip Runnable nh ngha duy nht mt phng thc run(). Cc lp thc thi giao
tip ny ch ra rng chng c th chy c lp nh mt tuyn on ring. Giao tip ny
khng nh ngha bt k phng thc no khc hoc cung cp bt k chc nng tuyn on
c th no. Mc ch duy nht ca n l bo hiu cc lp thc thi giao tip ny c th chy
nh cc tuyn on. Khi mt i tng thc thi giao tip Runnale c truyn cho
constructor ca mt tuyn on, v cc phng thc start() ca tuyn on c gi,
phng thc run() s t ng c gi bi tuyn on va c to ra. Khi phng thc
run() kt thc x l, tuyn on s dng hot ng.
Vic s dng giao tip Runnable c mt s u im so vi tha k lp Thread. Trc
ht, lp thc thi giao tip Runnable c th t do tha k t mt lp khc. Th hai, cng mt
i tng Runnable c th c truyn cho nhiu tuyn on, v vy mt s tuyn on
tng tranh c th s dng chung m v thao tc trn cng d liu.
Khun dng chung to mt ng dng a tuyn on bng cch thc thi giao tip
Runnable
class C2() implements Runnable
{
public C2(){Thread t = new Thread(this);}
public void run(){...}
}
lp trnh tuyn on ta phi s dng gi java.lang, tuy nhin do gi ngy c mc
nh nn ta khng cn phi khai bo.
V d: Vit chng trnh to lp mt ng dng a tuyn on. To lp ra hai tuyn on
mi tuyn on in ra mt t vi tc khc nhau bng cch thc thi giao tip Runnable.
class RunPingPong implements Runnable
{
String word;
int delay;
RunPingPong(String w, int d)
{
word =w;
delay=d;
}
public void run(){
try{
for(;;){
System.out.println(word+" ");
Thread.sleep(delay);
}
}

Su tm bi: www.daihoc.com.vn

catch(InterruptedException e)
{
return;
}
}
public static void main(String[] args)
{
Runnable ping = new RunPingPong("ping",33);
Runnable pong = new RunPingPong("PONG",100);
new Thread(ping).start();
new Thread(pong).start();
}
}

4. S ng b ha (Synchronization)
Khi hai tuyn on cn s dng cng mt i tng, c mt kh nng c cc thao tc
an xen nhau lm ph hng d liu. a tuyn on c mt c ch ngn nga iu ,
bng cch s dng phng thc chim dng i tng. Nu mt i tng b phong ta bi
mt tuyn on no th ch c tuyn on mi c th truy cp ti i tng.
4.1. Cc phng thc synchronized

lm cho mt lp c th s dng c trong mi trng a tuyn on, cc


phng thc tng ng s c khai bo l synchronized.

Nu mt tuyn on kch hot mt phng thc synchronized trn mt i tng,


i tng s b chim dng bi tuyn on . Mt tuyn on khc kch hot
phng thc synchronized trn cng i tng s b phong ta cho ti khi kha
trn i tng c gii phng.

ch kha
a=A.getBalance();

a+=deposit;

A.setBalance(a);
a=A.getBalance();

a+=deposit;

A.setBalance(a);

Hnh 4.3

Su tm bi: www.daihoc.com.vn

V d: Ci t lp Account:
class Account{
private double balance;
public Account(double initialDeposit)
{
balance = initialDeposit;
}
public synchronized double getBalance()
{
return balance;
}
public synchronized void getBalance(double amount)
{
balance+=amount;
}
}
}
4.2.Lnh synchronized
Lnh synchronized cho php ng b ha mt i tng m khng cn yu cu bn
tc ng mt phng thc synchronized trn i tng .
C php

synchronized (expr)
statement
Khi c c kha, statement c x l ging nh n l mt phng thc
synchronized trn i tng .
V d: Chuyn cc phn t trong mng thnh cc s khng m
public static void abs(int[] v)
{
synchronized(v)
{
for(int i=0;i<v.length;i++)
{
if(v[i]<0) v[i]=-v[i];
}
}
}
Java c th chy trn c my n v my a x l, vi nhiu tuyn on hay n
tuyn on.

5. Phng thc wait v notify


C ch chim dng ng b ha ngn cho cc tuyn on chng cho nhau. Nhng
trong mt s trng hp ta cng cn phi cung cp mt cch no cc tuyn on
truyn tin vi nhau. Java cung cp cho ngi s dng cc phng thc cho php cc tuyn
on khng b x l chng cho m vn c th trao i thng tin vi nhau bng cch s
dng cc phng thc wait() v notify(). thc hin iu ny phng thc wait() c
nh ngha cho php mt tuyn on i cho ti khi mt iu kin no xy ra. Phng

Su tm bi: www.daihoc.com.vn

thc notify() c nh ngha bo cho cc tuyn on bit s kin no xy ra. Cc


phng thc ny c nh ngha trong lp Object v c tha k t cc lp Object.
public class WaitNotify extends Thread
{
public static void main(String args[]) throws Exception
{
Thread notificationThread = new WaitNotify();
notificationThread.start();
// Ch tuyn on cnh bo kch hot s kin
synchronized (notificationThread)
{
notificationThread.wait();
}
// Bo cho ngi dng bit phng thc wait hon thnh
System.out.println ("The wait is over");
}
public void run()
{
System.out.println ("Hit enter to stop waiting thread");
try
{
System.in.read();
}
catch (java.io.IOException ioe)
{
// no code req'd
}
// Notify any threads waiting on this thread
synchronized (this)
{
this.notifyAll();
}
}
}

Su tm bi: www.daihoc.com.vn

Mt s dng ca phng thc wait v notify


Tt c cc phng thc u c trong lp Object v hot ng trn i tng hin
thi:
public final void wait(long timeout) throws InterruptedException

Tuyn on hin thi ch cho ti khi c cnh bo hoc mt khong thi gian
timeout nht nh. Nu timeout bng 0 th phng thc s ch ch cho ti khi c cnh
bo v s kin.
public final void notify()

Cnh bo t nht mt tuyn on ang ch mt iu kin no thay i. Cc tuyn


on phi ch mt iu kin thay i trc khi c th gi phng thc wait no .
public final void notifyAll()

Phng thc ny cnh bo tt c cc tuyn on ang ch mt iu kin thay i.


Cc tuyn on ang ch thng ch mt tuyn on khc thay i iu kin no .
Trong s cc tuyn on c cnh bo, tuyn on no c u tin cao nht
th s chy trc tin.

6. Lp lch cho tuyn on


Chng trnh Java c th chy trn c cc my n x l v a x l vi nhiu tuyn
on hoc n tuyn on. Java gn cho mi tuyn on mt u tin xc nh cch
tuyn on c x l nh th no so vi cc tuyn on khc. u tin ca cc tuyn
on l cc s nguyn. Cc u tin ca tuyn on ch c tnh cht tng i so vi cc
tuyn on khc. Cc tuyn on c u tin cao nht s c x l trc tin nu khng
c g c bit. Cc tuyn on c u tin thp hn s ch chy khi cc tuyn on c
u tin cao hn b phong ta.
Vi mt tuyn on cho trc ta c th xc nh u tin ln nht v u tin nh
nht nh cc hng s Thread.MAX_PRIORITY, Thread.MIN_PRIORITY. u tin chun
cho mt tuyn on mc nh l Thread.NORM_THREAD. u tin ca tuyn on hin
thi c th b thay i bt k khi no nh phng thc setPriority(). nhn v u tin
ca mt tuyn on ta dng phng thc getPriority().
Mt s phng thc tnh ca lp Thread iu khin lch trnh ca tuyn on hin thi
public static void sleep(long ms) throws InterruptedException

Phng thc ny a tin on hin hnh vo trng thi ngh ti thiu l ms (mili
giy).
public static void yeild()

Phng ny ginh ly quyn thc thi ca tuyn on hin hnh cho mt trong cc
tuyn on khc.

7. B tc-Deadlock
Mt kiu li c bit m ta cn phi trnh c lin quan n a nhim l b tc
(deadlock), b tc xy ra khi hai tuyn on c mt s ph thuc xoay vng trn mt cp i
tng ng b. V d, gi s mt tuyn on chim dng i tng X v mt tuyn on
chim dng i tng Y. Nu tuyn on chim dng X c gng gi bt k phng thc
ng b trn Y, th n s b phong ta. Nu tuyn on chim dng Y gi phng thc ng
b trn X, tuyn on s ch v hn.
V d:
class A
{
synchronized void phuongthuc1(B b)

Su tm bi: www.daihoc.com.vn

{
String tenTD=Thread.currentThread().getName();
System.out.println(tenTD+" dang goi phuong thuc A.phuongthuc1()");
try{
Thread.sleep(1000);
}
catch(Exception e)
{
System.out.println("A bi ngat");
}
System.out.println(tenTD+" Dang thu goi B.phuongthuc4()");
b.phuongthuc4();
}
synchronized void phuongthuc2()
{
System.out.println("Ben tron phuong thuc A.phuongthuc2()");
}
}
class B
{
synchronized void phuongthuc3(A a)
{
String tenTD=Thread.currentThread().getName();
System.out.println(tenTD+" dang goi phuong thuc B.phuongthuc3");
try{
}
catch(Exception e)
{
System.out.println("B bi ngat");
}
System.out.println(tenTD+" Dang thu goi phuon thuc A.phuongthuc2()");
a.phuongthuc2();
}
synchronized void phuongthuc4(){
System.out.println("Ben trong phuong thuc B.phuongthuc4()");
}
}

Su tm bi: www.daihoc.com.vn

class Deadlock implements Runnable


{
A a=new A();
B b=new B();
Deadlock()
{
Thread.currentThread().setName("MainThread");
Thread t=new Thread(this,"RacingThread");
t.start();
a.phuongthuc1(b);
System.out.println("Trong tuyen doan main");
}
public void run()
{
b.phuongthuc3(a);
System.out.println("Trong tuyen doan main");
}
public static void main(String[] args)
{
new Deadlock();
}
};
Kt qu thc hin chng trnh
C:\MyJava>java Deadlock
MainThread dang goi phuong thuc A.phuongthuc1()
RacingThread dang goi phuong thuc B.phuongthuc3
RacingThread Dang thu goi phuon thuc A.phuongthuc2()
MainThread Dang thu goi B.phuongthuc4()
Chng trnh b treo hay ni cch khc hai tuyn on A v B ri vo tnh hung b
tc, tuyn on n ch tuyn on kia gii phng i tng m i tng kia ang chim
dng v ngc li, iu ny dn n ch i nhau m ta c th gi l tnh trng hoi vng.

8. iu khin tuyn on
8.1. Ngt mt tuyn on Thread
Khi gi phng thc Thread.sleep(int ) th phng thc ny s t tuyn on vo
trng thi ngh trong mt khong thi gian xc nh no . Tuy nhin kch hot mt
tuyn on sm hn ta phi s dng ngt tuyn on. Ta c ngt mt tuyn on bng
cch gi phng thc interrupt(). Tt nhin, iu ny cn mt tuyn on khc tham chiu
ti tuyn on hin thi.
public class SleepyHead extends Thread

Su tm bi: www.daihoc.com.vn

{
// Run method is executed when thread first started
public void run()
{
System.out.println ("I feel sleepy. Wake me in eight
hours");
try
{
// Sleep for eight hours
Thread.sleep( 1000*60 );
System.out.println ("That was a nice nap");
}
catch (InterruptedException ie)
{
System.err.println ("Just five more minutes....");
}
}
// Main method to create and start threads
public static void main(String args[]) throws java.io.IOException
{
// Create a 'sleepy' thread
Thread sleepy = new SleepyHead();
// Start thread sleeping
sleepy.start();
// Prompt user and wait for input
System.out.println

("Press

enter

to

interrupt

the

thread");
System.in.read();
//

Interrupt the thread


sleepy.interrupt();

}
}
8.2 Kt thc vic thc thi mt tuyn on
i khi cn thit phi kt thc mt tuyn on trc khi tc v ca n hon thnh. V
d, nu mt client ang gi cc thng ip ti mt mail server trong mt tuyn on th hai,
v ngi s dng mun hy b thao tc, tuyn on phi c dng li ngay tc thi. Mt
tuyn on c th gi mt yu cu ngng vic thc thi tuyn on ti mt tuyn on khc
nh phng thc Thread.stop(). iu ny i hi tuyn on iu khin duy tr mt tham
chiu ti tuyn on m n mun dng.

Su tm bi: www.daihoc.com.vn

V d di y minh ha cch s dng phng thc stop:


public class StopMe extends Thread
{
// Run method is executed when thread first started
public void run()
{
int count = 1;
System.out.println ("I can count. Watch me go!");
for (;;)
{
// Print count and increment it
System.out.print (count++ + " ");
// Sleep for half a second
try { Thread.sleep(500); }
catch(InterruptedException ie) {}
}
}
// Main method to create and start threads
public static void main(String args[]) throws java.io.IOException
{
// Create and start counting thread
Thread counter = new StopMe();
counter.start();
// Prompt user and wait for input
System.out.println ("Press any enter to stop the thread ounting");
System.in.read();
// Interrupt the thread
counter.stop();
}
}

C:\MyJava>java StopMe
Press any enter to stop the thread ounting
I can count. Watch me go!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
Chng trnh trn s tip tc bin m cho ti khi ta nhn mt phm bt k dng
vic x l ca tuyn on.
8.3. Tm dng v phc hi vic x l cc tuyn on

Su tm bi: www.daihoc.com.vn

Trc Java 2, ta c th c php tm dng vic x l ca mt tuyn on. iu ny


c th thc hin nh phng thc Thread.suspend() v phc hi hot ng ca tuyn on
nh Thread.resume(). Tuy nhin trong cc phin bn Java 2 ngi ta khuyn co khng nn
s dng cc phng thc ny v chng c dn n tnh trng hoi vng (deadlock).

9. Nhm cc tuyn on ThreadGroup


Cc tuyn on c th c to ra v c chy ring theo tng tuyn on, song
i khi lm vic vi mt nhm cc tuyn on s d dng hn so vi lm vic vi tng tuyn
on ring r ti tng thi im. Cc thao tc nh hng ti cc tuyn on, nh tm dng
v phc hi hot ng ca cc tuyn on, dng hn hoc ngt cc tuyn on, c th
c thc hin trn tng tuyn on, nhng iu ny i hi cc lp trnh vin phi duy tr
mt danh sch cc tuyn on (bng cch s dng cc cu trc d liu nh vector hoc
mng). Khi mt thao tc c thc hin, mi tuyn on trong danh sch phi c duyt
v c x l ring. iu ny to ra mt khi lng cng vic kh ln cho ngi lp trnh v
cn phi vit nhiu on m phc tp. Mt gii php thay th l nhm cc tuyn on vi
nhau v p dng mt thao tc trn nhm m khng phi thc hin thao tc trn tng tuyn
on ring l.
Java API h tr kh nng lm vic vi cc nhm tuyn on nh lp ThreadGroup.
Mc ch ca lp ThreadGroup l biu din mt tp hp cc tuyn on, v cung cp cc
phng thc tc ng nhanh trn tng tuyn on ring trong nhm. N cn cung cp cc
cch thc tp hp cc thng tin v cc tuyn on c lin quan ni chung. Nu cn truy
xut ti tng tuyn on ring l, ta c th truy xut thng qua ThreadGroup.
Khi JVM khi ng ng dng ln u tin, tuyn on chnh s chy phng thc
main(). Sau , ng dng to ra cc nhm tuyn on mt cch t do, hoc to ra cc tuyn
on ring khng gn vi mt nhm no c. Mt nhm c th bao gm nhiu tuyn on v
ta c th b sung thm tuyn on vo nhm trong qu trnh x l tuyn on khi cn. Tuy
nhin khng c cch no g b tuyn on ra khi mt nhm.
Mt nhm cc tuyn on c th cha cc nhm tuyn on khc c gi l cc
nhm tuyn con cc tuyn on. Cc thao tc nh dng hoc tm dng c th c thc
hin trn cc nhm con hoc nhm cha. Khi mt thao tc c p dng cho nhm cha, thao
tc s c lan truyn ti nhm con . iu ny c ngha l mt thao tc c th c tc
ng n nhiu tuyn on. iu ny khin cho vic thit k ng dng tr nn n gin
hn.

Hnh 4.4

Su tm bi: www.daihoc.com.vn

9.1. To mt nhm Thread


Cc constructor
Lp ThreadGroup cung cp mt s constructor sau:

public ThreadGroup(String name) throws java.lang.SecurityException

Constructor ny to ra mt nhm tuyn on mi, nhm ny c tn c xc nh bi


mt xu k t truyn vo nh mt tham s.

ThreadGroup(ThreadGroup
java.lang.SecurityException

parentGroup,String

name)

throws

To ra mt nhm tuyn on mi c nh danh bi tn name. N cho php mt


nhm c lu tr nh l mt nhm con.
S dng mt ThreadGroup
Mi khi c to ra, mt nhm tuyn on c th c s dng nh mt tuyn on
bnh thng. Ta c th tm dng, phc hi, ngt hoc dng nhm tuyn on bng cch gi
phng thc thch hp. s dng nhm tuyn on hiu qu th tuyn on phi khc
rng .
Cc tuyn on khng c gn vi mt nhm c th ti thi im to ra chng. V
th, khng th gn mt tuyn on cho mt nhm sau , hoc chuyn mt tuyn on t
nhm ny sang nhm khc. C ba constructor thc hin iu ny

Thread(ThreadGroup group, Runnable runnbale)


Thread(ThreadGroup group, Runnable name)
Thread(ThreadGroup group, Runnable runnbale, String name)

Mi khi to ra mt nhm cc tuyn on ta c th tc ng cc phng thc trn nhm.


Cc phng thc
int activeCount(): tr v s tuyn on trong nhm, v cc nhm con.

int activeGroupCount(): tr v s nhm con cc tuyn on

boolean allowThreadSuspension(): ch ra tuyn on b tm ngng hay khng.

void checkAccess():

void destroy(): hy b nhm tuyn on

int enumerate(Thread[] threadList): a cc tuyn on trong nhm vo mt mng


cc tuyn on.

int enumerate(Thread[] threadList, boolean subgroupFlag): a cc tuyn on trong


nhm vo mt mng cc tuyn on. Phng thc ny a cc tuyn on trong
nhm bao gm c cc tuyn on nhm con nu bin logic boolean subgroupFlag
c thit lp l true.

int enumerate(ThreadGroup[] groupList): t tt c cc nhm con vo mng

9.2. Minh ha v lp ThreadGroup


public class GroupDemo implements Runnable{
public static void main(String args[]) throws Exception
{
// Create a thread group
ThreadGroup parent = new ThreadGroup("parent");
// Create a group that is a child of another thread group
ThreadGroup subgroup = new ThreadGroup(parent, "subgroup");

Su tm bi: www.daihoc.com.vn

// Create some threads in the parent, and subgroup class


Thread t1 = new Thread ( parent, new GroupDemo() );
t1.start();
Thread t2 = new Thread ( parent, new GroupDemo() );
t2.start();
Thread t3 = new Thread ( subgroup, new GroupDemo() );
t3.start();
// Dump the contents of the group to System.out
parent.list();
// Wait for user, then terminate
System.out.println ("Press enter to continue");
System.in.read();
System.exit(0);
}
public void run(){
// Do nothing
for(;;)
{
Thread.yield();
}
}
}
Kt qu thc hin chng trnh
C:\MyJava>java GroupDemo
java.lang.ThreadGroup[name=parent,maxpri=10]
Thread[Thread-0,5,parent]
Thread[Thread-1,5,parent]
java.lang.ThreadGroup[name=subgroup,maxpri=10]
Thread[Thread-2,5,subgroup]
Press enter to continue

10. Mt v d minh ha vic s dng tuyn on


V d
Chng trnh v ng h s s dng tuyn on v applet
import java.awt.*;
import java.util.Date;
import java.applet.*;
public class Clock extends Applet implements Runnable
{
Font f = new Font("Times New Roman",Font.BOLD,24);
Date d = new Date();

Su tm bi: www.daihoc.com.vn

Thread t;
public void init()
{
resize(400,400);
}
public void start()
{
if(t==null)
{
t= new Thread(this);
t.start();
}
}
public void stop()
{
if(t==null)
{
t.stop();
t=null;
}
}
public void run()
{
while(true)
{
d= new Date();
repaint();
try{
Thread.sleep(1000);
}
catch(InterruptedException e)
{
return;
}
}
}
public void paint(Graphics g)
{
g.setFont(f);

Su tm bi: www.daihoc.com.vn

g.drawString(d.toString(),10,50);
}
}
<HTML>
<HEAD>
<TITLE> Clock </TITLE>
</HEAD>
<BODY>
<APPLET CODE ="Clock.class" WIDTH =200 HEIGHT = 100>
</APPLET>
</BODY>
</HTML>
Thc hin chng trnh
appletviewer Clock.html
Kt qu thc hin

Hnh 4.5

11. Kt lun
Nhng hiu bit v lp trnh a tuyn on c tm quan trng i vi cc ng dng v
cc applet, c bit l i vi mi trng mng. Cc mng my tnh thng rt chm v c
tin cy khng cao, v vy chng trnh mng nn chy trong mt tuyn on ring bit
tch bit vi giao din ngi dng. Hn th na, phn mm mng tng tc vi nhiu client
hoc server, ngoi tr cc thao tc c bit nhanh (nh nhn v gi mt gi tin). Chng
trnh cn c nhiu tuyn on cc tng tc c th xy ra ng thi. Trong cc chng
sau chng ta s xem xt cch ng dng tuyn on trong vic xy dng cc chng trnh
mng c x l tng tranh.

Su tm bi: www.daihoc.com.vn

Su tm bi: www.daihoc.com.vn

Chng 5

Lp trnh mng vi cc lp InetAddress,


URL v URLConnection
1. Lp InetAddress
Cc thit b c kt ni vi mng LAN c a ch vt l duy nht. iu ny gip
cho cc my khc trn mng trong vic truyn cc gi tin n ng v tr. Tuy nhin, a
ch ny ch c ch trong mng LAN. Mt my khng th xc nh c v tr trn Internet
bng cch s dng cc a ch vt l, v cc a ch vt l khng ch ra v tr ca my. Hn
na, cc my thng di chuyn t v tr ny sang v tr khc, trong trng hp ca my
xch tay hoc my palm chng hn.
Nhng ngi lp trnh mng khng cn phi quan tm n tng chi tit d liu
c nh tuyn nh th no trong mt mng LAN. Hn na, Java khng cung cp kh
nng truy xut ti cc giao thc tng lin kt d liu mc thp c s dng bi LAN.
Vic h tr nh vy l rt kh khn. V mi kiu giao thc s dng mt kiu a ch khc
nhau v c cc c trng khc nhau, chng ta cn phi cc chng trnh khc nhau cho
mi kiu giao thc mng khc nhau. Thay vo , Java h tr giao thc TCP/IP, giao
thc ny c nhiu v lin kt cc mng vi nhau.
Cc thit b c mt kt ni Internet trc tip c cung cp mt nh danh duy nht
c gi l a ch IP. Cc a ch IP c th l tnh hoc ng. Cc a ch IP c cp
pht ng thng c s dng khi nhiu thit b cn truy cp Internet trong khong thi
gian nht nh. Mt a ch IP ch c th gn vi mt my, n khng th dng chung. a
ch ny c s dng bi giao thc IP nh tuyn cc datagram ti ng v tr. Khng
c a ch, ta khng th lin lc c vi my ; v th tt c cc my tnh u phi c
mt a ch IP duy nht.
Lp java.net.InetAddress biu din mt a ch Internet. N bao gm hai trng
thng tin: hostName (mt i tng kiu String) v address (mt s kiu int). Cc trng
ny khng phi l trng public, v th ta khng th truy xt chng trc tip. Lp ny
c s dng bi hu ht cc lp mng, bao gm Socket, ServerSocket, URL,
DatagramSocket, DatagramPacket,
1.1. To cc i tng InetAddress
Lp InetAddress c s dng biu din cc a ch IP trong mt ng dng
mng s dng Java. Khng ging vi cc lp khc, khng c cc constructor cho lp
InetAddress. Tuy nhin, lp InetAddress c ba phng thc tnh tr v cc i tng
InetAddress
Cc phng thc trong lp InetAddress

public static InetAddress InetAddress.getByName(String hostname)

public static InetAddress[] InetAddress.getAllByName(String hostname)

public static InetAddress InetAddress.getLocalHost()

Tt c cc phng thc ny u thc hin kt ni ti server DNS cc b bit


c cc thng tin trong i tng InetAddress
Ta xt phng thc u tin. Phng thc ny nhn tn ca hostname lm tham
s v tr v i tng kiu InetAddress
V d:
try{
InetAddress dc =InetAddress.getByName(www.microsoft.com);
System.out.println(dc);

102

Su tm bi: www.daihoc.com.vn

}
catch(UnknownHostException e)
{
System.err.println(e);
}
V d 1:Vit chng trnh nhn hostname t i dng lnh v in ra a ch IP tng
ng vi hostname .
import java.net.*;
public class TimDCIP
{
public static void main(String[] args)
{
try{
if(args.length!=1)
{
System.out.println("Cach

su

dung:

java

TimDCIP

<Hostname>");
}
InetAddress host = InetAddress.getByName(args[0]);
String hostName = host.getHostName();
System.out.println("Host name:"+hostName);
System.out.println("Dia chi IP:"+host.getHostAddress());
}
catch(UnknownHostException e)
{
System.out.println("Khong tim thay dia chi");
return;
}
}
}
1.2. Nhn cc trng thng tin ca mt i tng InetAddress
Ch c cc lp trong gi java.net c quyn truy xut ti cc trng ca lp
InetAddress. Cc lp trong gi ny c th c cc trng ca mt i tng InetAddress
bng cch gi phng thc getHostname v getAddress().

public String getHostName(): Phng thc ny tr v mt xu biu din hostname


ca mt i tng InetAddress. Nu my khng c hostname, th n s tr v a
ch IP ca my ny di dng mt xu k t.

public byte[] getAddress() : Nu bn mun bit a ch IP ca mt my, phng


thc getAddress() tr v mt a ch IP di dng mt mng cc byte.

103

Su tm bi: www.daihoc.com.vn

Mt s a ch IP v mt s m hnh a ch c cc ngha c bit. V d,


127.0.0.1 l a ch loopback. Cc a ch IPv4 trong khong 224.0.0.0 ti
239.255.255.255 l cc a ch multicast.

Java 1.5 thm vo hai phng thc cho lp InetAddress cho php cc ng dng
kim tra liu mt nt c th c n c hay khng vi nt xut pht l nt hin hnh;
ngha l kim tra xem mt lin kt mng c thit lp hay cha. Cc lin kt c th b
phong ta v nhiu nguyn nhn nh firewall, cc server y quyn, cc router hot ng
sai chc nng, dy cp b t, hoc host xa khng bt.

public boolean isReachable(int timeout) throws IOException

public boolean isReachable(NetworkInterface interface, int ttl, int timeout) throws


IOException

Cc phng thc ny c gng kt ni trn cng echo trn host xa tm xem n


c th n c hay khng. Nu host p ng trong khong thi gian timeout mili giy,
cc phng thc ny tr v gi tr true nu n c, ngc li n tr v gi tr false.

1.3. Mt s chng trnh minh ha


V d 2 :Vit chng trnh nhp mt hostName t i dng lnh v in ra dng
thng bo cho bit a ch IP tng ng vi a ch IP thuc lp no.
import java.net.*;
public class PhanLoaiDCIP
{
public static void main(String[] args)
{
try{
if(args.length!=1)
{
System.out.println("Cach

su

dung:

java

TimDCIP

<Hostname>");
}
InetAddress host = InetAddress.getByName(args[0]);
String hostName = host.getHostName();
System.out.println("Host name:"+hostName);
System.out.println("Dia chi IP:"+host.getHostAddress());
byte[] b=host.getAddress();
int i=b[0]>=0?b[0]:256+b[0];
if((i>=1)&(i<=126)) System.out.println(host+" thuoc dia chi lop A");
if((i<=191)&(i>=128)) System.out.println(host+" thuoc dia chi lop
B");
if((i<=223)&(i>=192)) System.out.println(host+" thuoc dia chi lop
C");
}
catch(UnknownHostException e)

104

Su tm bi: www.daihoc.com.vn

{
System.out.println("Khong tim thay dia chi");
return;
}
}
}
Trong chng trnh ny ta ch cn lu dng lnh int i=b[0]>=0?b[0]:256+b[0]. V
ta bit trong Java kiu byte l kiu s nguyn c du c khong gi tr l t -128 n 127.
Do vy, dng lnh int i=b[0]>=0?b[0]:256+b[0] lm nhim v chuyn i s nguyn c du
dng b 2 v dng s nguyn khng du

2. Lp URL
Cch n gin nht mt chng trnh Java nh v v tm kim d liu l s
dng mt i tng URL. Bn khng cn phi lo lng ti cc chi tit bn trong ca giao
thc ang c s dng, khun dng d liu c nhn, hay lm th no truyn tin
vi server; bn ch cn cho bit URL, Java s ly d liu v cho bn.
Lp java.net.URL l mt khi nim v b nh v ti nguyn thng nht. Nu lu
tr URL di dng mt i tng String s khng c li so vi vic t chc URL nh
mt i tng vi cc trng : giao thc (protocol), hosname, cng (port), ng dn
(path), tn tp tin (filename), mc ti liu (document section), mi trng c th c
thit lp mt cch c lp.
2.1. To cc URL
C bn constructor, khc nhau v thng tin m n cn. Constructor m bn s
dng ph thuc vo thng tin m bn c, v khun dng trong URL . Tt c cc
constructor ny s a ra ngoi l MalformedURLException (URL khng ng khun
dng) nu ta to ra mt URL cho mt giao thc m n khng c h tr.URL cung cp
cc hm cu t sau:

public URL(String url) throws MalformedURLException


y l constructor n gin nht; tham s ca n ch l mt URL dng xu.

V d
try{
URL u = new URL(http://www.sun.com/index.html);
}
catch(MalformedURLException e)
{
System.err.println(e);
}
public
URL(String
protocol,
String
host,
String
file)
throws
MalformedURLException
Constructor ny xy dng mt URL t cc xu phn bit xc nh giao thc,
hostname, v tp tin. Port c thit lp bng -1 v vy cng mc nh cho giao thc s
c s dng.

V d

105

Su tm bi: www.daihoc.com.vn

try{
URL u = new URL(http,/www.sun.com,index.html);
}
catch(MalformedURLException e){
System.err.println(e);
}
public URL(String protocol,
MalformedURLException

String

host,

int

port,

String

file)

throws

Trong mt s t trng hp khi cng mc nh khng cn ng, constructor ny


cho php bn xc nh cng mt cch r rng, l mt s kiu int. Cc tham s khc ging
nh trn.
V d
try{
URL u = new URL(http,/www.sun.com,80,index.html);
}
catch(MalformedURLException e){
System.err.println(e);
}
public URL(URL u, String s) throws MalformedURLException

Hm cu t ny xy dng mt URL tuyt i t URL tng i; c th l y l


constructor bn s s dng thng xuyn.
V d
URL u1,u2;
try{
URL u1= new URL(http://www.macfaq.com/index.html);
URL u2 = new URL(u1,vendor.html);
}
catch(MalformedURLException e)
{
System.err.println(e);
}
Tn file c loi khi ng dn ca u1, v tn file mi vendor.html c gn
vo to ln u2. Constructor ny c bit hu ch khi bn mun duyt qua mt danh
sch cc file m tt c cng nm trong mt th mc.
2.2. Phn tch mt URL thnh cc thnh phn
C su trng thng tin trong lp URL: giao thc, port, file, mc tham chiu ti liu.

public String getProtocol()


Phng thc getProtocol() tr v mt xu k t biu din phn giao thc ca URL

public String getHost()

106

Su tm bi: www.daihoc.com.vn

Phng thc getHost() tr v mt xu k t biu din phn hostname ca URL.

public int getPort()

Phng thc getPort() tr v mt s nguyn kiu int biu din s hiu cng c
trong URL.

public int getDefaultPort()


Phng thc getDefautlPort() tr v s hiu cng mc nh cho giao thc ca URL

public String getFile()

Phng thc getFile() tr v mt xu k t cha phn ng dn ca mt URL;


Java khng phn chia mt URL thnh cc phn ng dn v phn tp tin ring bit.

public String getRef()


Phng thc ny tr v phn nh danh on ca URL

V d: Vit chng trnh nhp vo mt URL t i dng lnh v hin th tng thnh phn
to nn URL ln mn hnh.
//Chng trnh ly thng tin ca URL vi cc thng tin nhp t bn phm
import java.net.*;
class getURLParts{
public static void main(String[] args)
{
try
{
URL u = new URL(args[0]);
System.out.println("URL is "+u);
System.out.println("The protocol part is "+u.getProtocol());
System.out.println("The host part is "+u.getHost());
System.out.println("The file part is "+u.getFile());
System.out.println("The reference part is "+u.getRef());
}
catch(MalformedURLException e)
{
System.err.println(e);
}
}
}
Kt qu thc hin chng trnh nh sau:

107

Su tm bi: www.daihoc.com.vn

Hnh 5.1
2.3. Tm kim d liu t mt URL
Nu ch c URL thun ty th khng c g th v. iu th v l d liu nm trong
cc tp tin m n tr ti. Lp java.net.URL c ba phng thc tm kim d liu t mt
URL
public final InputStream openStream() throws java.io.IOException

Phng thc ny kt ni ti mt ti nguyn c tham chiu bi mt URL, thc


hin c ch bt tay cn thit gia client v server, v tr v mt lung nhp InputStream.
Ta s dng lung ny c d liu. D liu nhn t lung ny l d liu th ca mt
tp tin m URL tham chiu (m ASCII nu c mt tp vn bn, m HTML nu c mt
ti liu HTML, mt nh nh phn nu ta c mt file nh). N khng c cc thng tin
header v cc thng tin c lin quan n giao thc
public URLConnection openConnection() throws java.io.IOException

Phng thc opeConnection() m mt socket ti mt URL xc nh v tr v mt


i tng URL. Mt i tng URLConnection biu din mt lin kt m ti mt ti
nguyn mng. Nu li gi phng thc tht bi n a ra ngoi l IOException.
public final Object getConetent() throws java.io.IOException

Phng thc ny cung cp cch th ba ti d liu c tham chiu bi mt


URL. Phng thc getContent() tm kim d liu c tham chiu bi mt URL v
chuyn n thnh mt kiu i tng no . Nu i tng tham chiu ti mt kiu i
tng vn bn no nh tp tin ASCII hoc tp HTML, i tng c tr v thng
thng s l mt kiu lung nhp InputStream no . Nu URL tham chiu ti mt i
tng nh nh nh GIF hoc JPEG th phng thc getContent() tr v i tng
java.awt.ImageProducer
V d:Vit chng trnh nhp mt URL t bn phm, kt ni vi Internet v hin th
m ngun ca trang Web ln mn hnh.
import java.net.*;
import java.io.*;
public class ViewSource
{
public static void main(String[] args)
{
URL u;
String thisLine;
if(args.length>0){

108

Su tm bi: www.daihoc.com.vn

try{
u =new URL(args[0]);
try{
DataInputStream

dis

new

DataInputStream(u.openStream());
while((thisLine=dis.readLine())!=null)
System.out.println(thisLine);
}
catch(IOException e)
{
System.err.println(e);
}
}
catch(MalformedURLException e){
System.err.println(e);
}
}
}
}
Kt qu thc hin chng trnh
2.4. Cc phng thc tin ch
Lp URL cung cp hai phng thc tin ch thc hin cc thao tc trn URL.
Phng thc sameFile() xc nh xem hai URL c cng tr ti mt ti liu hay khng.
Phng thc toExternalForm() chuyn i mt i tng URL thnh mt xu k t c
s dng trong mt lin kt HTML hoc hp thoi ca trnh duyt.

public boolean sameFile(URL other)

3. Lp URLConnection
URLConnection l mt lp tru tng biu din mt lin kt tch cc ti mt ti
nguyn c xc nh bi mt URL.
Lp URLConnection c hai mc ch khc nhau nhng lin quan vi nhau.

Th nht, n cung cp nhiu kh nng iu khin hn thng qua vic tng tc


vi mt server ch khng phi lp URL. Vi URLConnection ta c th kim tra
cc headerMIME c gi bi mt Http Server phn ng tng ng. Ta cng c
th s dng lp URLConnection ti v cc tp nh phn. Ngoi ra
URLConnection cho php bn gi d liu tr li Web server bng lnh POST.
Chng ta s xem tt c cc k thut trong chng ny.

Th hai, URLConnection l mt phn ca c ch qun tr giao thc, c ch ny


cn bao gm c lp URLStreamHandler. tng ng sau cc trnh qun tr giao
thc rt n gin: chng cho php bn phn tch cc chi tit x l mt giao thc
vi vic x l cc kiu d liu c th, cung cp cc giao din ngi dng, v thc

109

Su tm bi: www.daihoc.com.vn

hin cc cng vic khc m mt trnh duyt thng lm. Lp c s


URLConnection l mt lp tru tng; ci t mt giao thc c th bn cn
phi vit mt lp con. Cc lp con ny c th c ti bi cc ng dng ca ring
bn hay bi cc trnh duyt HotJava; trong tng lai, cc ng dng Java c th ti
v cc trnh qun tr giao thc khi cn.
M cc URLConnection
Mt chng trnh s dng lp URLConnection trc tip theo mt dy cc bc c
bn sau:

Xy dng mt i tng URL.

Gi phng thc openConnection() ca i tng URL tm kim mt i tng


URLConnection cho URL .

Cu hnh i tng URL.

c cc trng header.

Nhn mt lung nhp v c d liu.

Nhn mt lung xut v ghi d liu.

ng lin kt.

Tuy nhin, khng phi lc no ta cng phi thc hin tt c cc bc ny.


V d:M mt URLConnection ti http:// www.microsoft.com
import java.net.*;
import java.io.*;
public class getURLConnection
{
public static void main(String[] args)
{
URL u;
URLConnection uc;
try
{
u= new URL("http://www.microsoft.com");
try
{
uc=u.openConnection();
}
catch(IOException e)
{
System.err.println(e);
}
}
catch(MalformedURLException e)
{

110

Su tm bi: www.daihoc.com.vn

System.err.println(e);
}
}
}
Mc d lp URLConnection l mt lp tru tng nhng n c mt phng thc
c ci t. Phng thc l connect(); phng thc ny to mt lin kt ti mt
server; v vy n ph thuc vo kiu dch v m ta ci t (HTTP, FTP,..). Tt nhin, ta c
th cm thy tin li hay cn thit phi np chng cc phng thc ny trong lp.
Rt nhiu cc phng thc v cc trng trong lp URLConnection c l phng
thc protected. Mt khc ta ch c th truy cp ti chng thng qua cc th hin ca lp
URLConnection hoc cc lp con ca n. Rt t khi chng ta khi to v truy cp trc tip
cc i tng; thay vo , mi trng thi gian chy s to ra cc i tng khi cn ty
thuc vo giao thc s dng. Sau lp s c khi to bng cch s dng cc
phng thc forName() v newInstance() ca lp java.lang.Class.

public abstract void connect() throws IOException


Phng thc connect() l mt phng thc tru tng m mt lin kt ti mt
server. Tn ca server c ly ra t mt URL c lu tr nh l mt trng
trong URLConnection, v c thit lp bi constructor ca lp. Cc lp con ca
lp URLConnection np chng cc phng thc ny qun l mt kiu lin kt
c th. V d, mt phng thc connect() ca lp FileURLConnection chuyn i
URL thnh mt filename trong th mc tng ng, to ra thng tin MIME cho file,
v m mt lung FileInputStream ti file. Phng thc connect() ca lp
HttpURLConnection to ra mt i tng HttpClient kt ni vi server. Phng
thc openConnection() ca i tng URL gi phng thc connect() tng ng,
v tr v lin kt c m. V vy ta him khi cn phi gi phng thc
connect() mt cch trc tip.

c d liu t mt server
Di y l cc bc ti thiu cn tm kim d liu t mt URL bng cch s
dng i tng URLConnection:

Bc 1: Xy dng mt i tng URL.

Bc 2: Gi phng thc openConnection() ca lp URL tm kim mt


i tng URL Connection cho i tng URL .

Bc 3: Gi phng thc getInputStream().

Bc 4: c t lung nhp bng cch s dng API.

public Object getContent() throws IOException

Phng thc v mt o gic ging nh phng thc getContent() ca lp URL.


Thc t, phng thc URL.getContent() ch vic gi phng thc getContent() ti v i
tng c chn bi URL ca URLConnection ny. phng thc getContent() hot
ng, mi trng cn nhn dng v hiu kiu ni dung. Hin nay ch c mt s kiu ni
dung c hiu l text/plain, image/gif, v image/jpeg. Bn c th ci t thm cc kiu
trnh qun l ni dung khc c th hiu cc kiu ni dung khc. Phng thc
getContent() ch lm vic vi cc giao thc nh HTTP m c mt s hiu bit r rng v
cc kiu ni dung MIME. Nu kiu ni dung khng c bit trc, hoc giao thc khng
hiu cc kiu ni dung, th ngoi l UnknownServicException c a ra.
public InputStream getInputStream()
Phng thc getContent() ch lm vic khi Java c mt trnh qun l ni dung cho
kiu ni dung. Nu khng phi trng hp ny, bn c l s cn mt lung
InputStream chung, lung ny cho php bn t c v phn tch d liu. lm

111

Su tm bi: www.daihoc.com.vn

nh vy, cn gi phng thc getInputStream(). Phng thc ny cng hu ch


khi trnh qun l ni dung c sn khng thc hin chnh xc ci m bn mun.
V d: Ti v mt trang web thng qua mt URL.
import java.net.*;
import java.io.*;
public class viewsource
{
public static void main(String[] args)
{
String thisLine;
URL u;
URLConnection uc;
if(args.length>0)
{
try{
u =new URL(args[0]);
try{
uc=u.openConnection();
DataInputStream
DataInputStream(uc.getInputStream());

theHtml

new

try{
while((thisLine=theHtml.readLine())!=null)
{
System.out.println(thisLine);
}
}
catch(Exception e)
{
System.err.println(e);
}
}
catch(Exception e)
{
System.err.println(e);
}
}
catch(MalformedURLException e)
{
System.err.println(args[0]+" is not a parseable URL");

112

Su tm bi: www.daihoc.com.vn

System.err.println(e);
}
}
}
}
Phng thc openStream() ca lp URL tr v i tng InputStream t i
tng URLConnection.

public OutputStream getOutputStream()


i khi bn cn phi ghi d liu vo mt URLConnection-chng hn khi bn mun
gi d liu ti mt web server s dng lnh POST. Phng thc
getOutputStream() tr v mt lung OutputStream trn bn c th ghi d liu
truyn ti mt server. V mt URLConnection khng cho php xut kt qu ra ch
mc nh, bn phi gi phng thc setDoOutput() trc khi yu cu mt lung
xut. Mi khi bn c mt lung OutputStream thng thng bn phi gn n vi
lung DataOutputStream hoc mt lp con khc ca lp OutputStream m a ra
nhiu c trng hn. V d:
try{
URL u = new URL(http:// www.somehost.com/cgi-bin/acgi);
URLConnection uc = u.openConnection();
uc.setDoOutput(true);
DataOutputStream dos = new DataOutputStream(uc.getOutputStream());
dos.writeByte(Herre is some data);
}
catch(Exception e)
{
System.err.println(e);
}
S khc bit gia URL v URLConnection l:

URLConnection cho php truy xut ti header HTTP.

URLConnection c th cu hnh cc tham s yu cu c gi cho server.

URLConnection c th ghi d liu ln server cng nh c d liu t server.

3.1. Phn tch Header


HTTP Server cung cp mt s lng thng tin ng k trong cc header MIME
trc mi p ng. Thng tin trong cc header MIME c th bao gm c ch m ha ni
dung c s dng, ngy v gi, chiu di ca ni dung c tr v bng byte, ngy ht
hn ca ni dung, ngy m ni dung c sa i ln cui. Tuy nhin, thng tin c gi
ph thuc vo server; mt server no gi tt c cc thng tin ny cho mi yu cu, cc
server khc gi cc thng tin no , v mt s t server khng gi thng tin no. Cc
phng thc ca mc ny cho php ta truy vn mt URLConnection tm ra thng tin
MIME no m server cung cp.

113

Su tm bi: www.daihoc.com.vn

Ngoi HTTP, rt t giao thc s dng cc header MIME. Khi vit lp con ca lp
URLConnection, thng thng cn phi np chng cc phng thc ny sao cho chng
tr v cc gi tr c ngha. Phn thng tin quan trng nht bn c th thiu l kiu ni
dung MIME. URLConnection cung cp mt s phng thc tin ch no m tr gip
bn on nhn ra kiu ni dung, da trn tn file ca n hoc mt s byte u tin ca
chnh d liu.

public String getContentType()

Phng thc tr v kiu ni dung MIME ca d liu. N ph thuc vo web server


gi mt header MIME tng ng, bao gm mt kiu ni dung xc thc. N khng
a ra ngoi l v tr v gi tr null nu kiu ni dung khng c. text/htm s l kiu
ni dung m bn thng xuyn gp nht khi kt ni vi web server. Cc kiu ni
dung ph bin khc bao gm: text/plain, image/gif, image/jpeg.
public int getContentLength()
Phng thc ny cho ta bit ni dung c kch thc bao nhiu byte. Rt nhiu
server ch gi cc header di ni dung khi chng truyn mt file nh phn, ch
khng phi khi truyn mt file vn bn. Nu khng c chiu di ni dung, phng
thc getContentLength() tr v -1. Phng thc ny khng a ra ngoi l. N
c s dng khi ta cn bit cn c bao nhiu byte, hoc khi ta cn to ra mt
buffer ln lu tr d liu.

public String getContentEncoding()


Phng thc ny tr v String cho ta bit cch thc m ha. Nu ni dung c
gi khng c m ha (nh trong trng hp ca HTTP server), phng thc
ny tr v gi tr null. N khng a ra ngoi l.

public long getDate()


Phng thc getDate() tr v mt s nguyn kiu long cho bn bit ti liu
c gi khi no. Ta c th chuyn i n sang mt i tng kiu java.util.Date.
V d:
Date docSent = new Date(uc.getDate());
y l thi gian ti liu c gi trn server. Nu header MIME khng c mt
header Date.

public long getExpiration()

public long getLastModified()


Phng thc date, getLastModified(), tr v ngy m ti liu c sa i ln
cui

V d: c cc URL t dng lnh, v s dng 6 phng thc in ra kiu ni dung,


chiu di ni dung, m ha ni dung, ngy sa i cui cng, ngy ht hn, v ngy hin
hnh.
3.2. Tm kim cc trng Header MIME
Su phng thc cui cng i hi cc trng nht nh t header MIME, nhng
khng c gii hn no v s cc trng header m mt thng ip MIME c th c. Nm
phng thc tip theo kim tra cc trng nht nh trong header MIME.
FileURLConnection khng c cc header MIME thc s , v vy tt c cc phng
thc ny tr v gi tr null khi bn ang lm vic vi mt file: URL, hnh vi mc nh ca
chng. HttpURLConnections tm ra mt trng header tha mn yu cu ca bn.
Nu c tm thy, n c tr v, ngc li n tr v gi tr null.

public String getHeaderField(String name)

114

Su tm bi: www.daihoc.com.vn

Phng thc getHeaderField() tr v gi tr ca trng header MIME c t tn.


Tn ca header khng phn bit ch hoa v ch thng v khng cha du kt
thc.
V d, tm gi tr ca cc trng header Content-type, Content-encoding ca
mt i tng URLConnection uc bn c th vit:
uc.getHeaderField(content-type);
uc.getHeaderField(content-encoding);
nhn thng tin v cc trng Date, Content-length, hoc Expiration bn cng
thc hin tng t:
uc.getHeaderField(date);
uc.getHeaderField(expires);
uc.getHeaderField(Content-length);
Tt c cc phng thc ny u tr v cc String, khng phi int cng khng phi
long nh cc phng thc getContentLength(); getExpirationDate(), getLastModified(), v
getDate(). Nu bn quan tm n mt gi tr s, bn phi chuyn i String thnh long
hoc int.

public String getHeaderFieldKey(int n)


Phng thc ny tr v kha (ngha l tn trng: v d, Content-length hoc
Server) ca trng header th n. Header u tin l 0. V d, nhn kha th 6
ca header MIME ca URLConnection, bn vit:
String header5=uc.getHeaderFieldKey(5);

public String getHeaderField(int n)


Phng thc ny tr v gi tr trng header MIME th n. Header MIME u tin
l mt.

V d: S dng phng thc kt hp vi phng thc getHeaderFieldKey() in ra


header MIME.

public long getHeaderFieldDate(String name, long default)


Phng thc ny trc ht tm kim trng header c xc nh bi tham s
name v c gng chuyn i xu ny sang kiu long.

3.3. Cc phng thc RequestProperty


Bn phng thc sau khng thc hin bt k cng vic g trong lp c s
URLConnection, cng khng c ci t trong cc lp FileURLConnection hoc
HttpConnection. Bn c th mong mun np chng chng trong mt lp con ci t
phng thc tra cu bng bm, chng hn xy dng mt bng bm cha tt c cc
header MIME ca yu cu.

public String getRequestProperty(String property_name)


Phng thc ny a ra mt ngoi l IllegalAccesError nu lin kt l m, ngc
li phng thc tr v gi tr null. Nu bn np chng n, cc phng thc ca
bn cn tr v gi tr gn vi mt thuc tnh cho trc nh l mt xu.

public static void


property_value)

setDefaultRequestProperty(String

property_name,

String

Phng thc ny khng thc hin cng vic g. Nu bn np chng phng thc
ny, bn s s dng n lu tr mt gi tr mc nh cho thuc tnh cho trc.

115

Su tm bi: www.daihoc.com.vn

public void setRequestProperty(String property_name, String property_value)

Phng thc ny tr v ngoi l IllegalAccessError nu lin kt ang m. Ngc


li n khng thc hin g. Nu bn np chng n, bn s s dng n lu tr gi
tr ca mt thuc tnh cho trc.
public String getDefaultRequest(String property_name)

Phng thc ny lun tr v gi tr null. Nu bn np chng phng thc ny, bn


cn tr v gi tr mc nh c gn cho mt thuc tnh cho trc nh l mt String.
protected URLConnection(URL u)

Contructor trong URLConnection nhn mt tham s l URL thc hin vic lin
kt. Tt c cc tnh cht khc ca mt URLConnection ban u c thit lp l
cc gi tr mc nh ca chng v bn c th thay i chng bng tp cc phng
thc. V constructor c tnh cht protected, ch c cc i tng trong gi java.net
mi c th to ra mt URLConnection. URLConnection l mt lp tru tng v
vy bn ch c th gi constructor ca n t constructor ca mt trong cc lp con
ca n.
Nu bn ang to ra lp con ca lp URLConnection, bn phi gi constructor ny
trong dng u ca constructor ca lp con nh sau:
myURLConnection(URL u)
{
super(u);
}
Nu bn khng a vo mt li gi c th ti constructor trong lp con ca bn,
Java c gng to ra mt constructor khng tham s ca lp cha: v d URLConnection().
V lp URLConnection khng cung cp cc constructor khng tham s, loi b li gi c
th s gy ra li bin dch.
3.4. Cc trng v cc phng thc c lin quan
C mi ba trng trong lp java.net. URLConnection. By trng l cc bin tnh
nh ngha cc gi tr mc nh cho cc th hin ca lp URLConnection. Su phng
thc khc nh ngha trng thi ca mt i tng URLConnection c th. Mt vi
phng thc get v set thay i cc gi tr ca chng.
Hu ht cc phng thc thit lp cc trng a ra ngoi l
IllegalAccessExceptions nu bn gi chng trong khi lin kt ang m. Nhn chung, bn
ch c th thit lp cc thuc tnh ca mt i tng URLConnection trong khi lin kt
ng.
protected URL url
public URL getURL()

Trng url xc nh URL m URLConnection lin kt ti n. N c thit lp bi


constructor khi bn to ra mt URLConnection, v khng cn thay i. Bn c th tm
kim gi tr bng cch gi phng thc getURL().
import java.net.*;
import java.io.IOException;
public class printURLConnection
{
public static void main(String[] args)
{

116

Su tm bi: www.daihoc.com.vn

URL u;
URLConnection uc;
try{
u = new URL("http://www.ora.com/");
try
{
uc=u.openConnection();
System.out.println(uc.getURL());
}
catch(IOException e)
{
System.err.println(e);
}
}
catch(MalformedURLException e)
{
System.err.println(e);
}
}
}

protected boolean connected

Trng connected l ng nu lin kt l m v l sai nu lin kt ng. V bn


khng m lin kt khi mt i tng URLConnection c to ra, gi tr ban u ca n
l false. Bn ch c th truy cp ti bin ny thng qua cc th hin ca lp
URLConnection v cc lp con ca n. Khng c cc phng thc c hoc thay i gi
tr ca n. Khi vit mt trnh qun tr giao thc, bn c nhim v thit lp gi tr ca bin
ny l true v thit lp li n bng gi tr false khi lin kt ng. Rt nhiu phng thc
trong gi java.net. URLConnection c bin ny xc nh xem chng c th thc hin
vic g. Nu vic thit lp khng chnh xc chng trnh ca bn s gp cc li khng d
chun on.

protected boolean allowUserInteraction

public void setAllowUserInteraction(boolean allowuserinteraction)

public boolean getAllowUserInteraction()

Mt s URLConnection cn tng tc vi ngi dng. V d, mt trnh duyt web


c th yu cu username v password. Tuy nhin, rt nhiu ng dng khng th khng
nh mt ngi s dng ang c mt tng tc vi n. Nh ngha ca tn,
allowUserInteraction xc nh xem liu tng tc ngi s dng c c php hay
khng. ch mc nh n c thit lp l false. V bin ny l protected, ta c th s
dng phng thc getAllowUserInteraction() c gi tr ca n v s dng phng
thc setAllowUserInteraction() thit lp gi tr ca n. Gi tr true ch ra rng tng tc
vi ngi s dng l c php; gi tr false ch ra rng khng c tng tc vi ngi
dng. Gi tr c th c c bt k thi im no, nhng n ch c th c thit lp

117

Su tm bi: www.daihoc.com.vn

khi lin kt b ng. Gi phng thc setAllowUserInteraction() khi lin kt m s a ra


ngoi l IllegalAccessError (ch khng phi l IllegalAccessException). Cc chng trnh
thng khng n bt cc li (khng ging nh cc ngoi l); mt li khng c n bt
thng buc chng trnh phi kt thc.

118

Su tm bi: www.daihoc.com.vn

Chng 6

Lp trnh Socket cho giao thc TCP


1. M hnh client/server
M hnh c ph bin nht v c chp nhn rng ri trong cc h thng phn tn
l m hnh client/server. Trong m hnh ny s c mt tp cc tin trnh m mi tin trnh
ng vai tr nh l mt trnh qun l ti nguyn cho mt tp hp cc ti nguyn cho trc v
mt tp hp cc tin trnh client trong mi tin trnh thc hin mt tc v no cn truy
xut ti ti nguyn phn cng hoc phn mm dng chung. Bn thn cc trnh qun l ti
nguyn cn phi truy xut ti cc ti nguyn dng chung c qun l bi mt tin trnh
khc, v vy mt s tin trnh va l tin trnh client va l tin trnh server. Cc tin trnh
pht ra cc yu cu ti cc server bt k khi no chng cn truy xut ti mt trong cc ti
nguyn ca cc server. Nu yu cu l ng n th server s thc hin hnh ng c
yu cu v gi mt p ng tr li ti tin trnh client.
M hnh client/server cung cp mt cch tip cn tng qut chia s ti nguyn
trong cc h thng phn tn. M hnh ny c th c ci t bng rt nhiu mi trng
phn cng v phn mm khc nhau. Cc my tnh c s dng chy cc tin trnh
client/server c nhiu kiu khc nhau v khng cn thit phi phn bit gia chng; c tin
trnh client v tin trnh server u c th chy trn cng mt my tnh. Mt tin trnh server
c th s dng dch v ca mt server khc.
M hnh truyn tin client/server hng ti vic cung cp dch v. Qu trnh trao i d
liu bao gm:
1. Truyn mt yu cu t tin trnh client ti tin trnh server
2. Yu cu c server x l
3. Truyn p ng cho client
M hnh truyn tin ny lin quan n vic truyn hai thng ip v mt dng ng b
ha c th gia client v server. Tin trnh server phi nhn thc c thng ip c yu
cu bc mt ngay khi n n v hnh ng pht ra yu cu trong client phi c tm
dng (b phong ta) v buc tin trnh client trng thi ch cho t khi n nhn c p
ng do server gi v bc ba.
M hnh client/server thng c ci t da trn cc thao tc c bn l gi (send)
v nhn (receive).

119

Su tm bi: www.daihoc.com.vn

Client
Server

Request message

Wait

Reply Execution

Request message

Tin trnh ang x l

Tin trnh ang phong ta


Hnh 4.1
Qu trnh giao tip client v server c th din ra theo mt t rong hai ch : b phong
ta (blocked) v khng b phong ta (non-blocked).
Ch b phong ta (blocked):
Trong ch b phong ta, khi tin trnh client hoc server pht ra lnh gi d liu
(send), vic thc thi ca tin trnh s b tm ngng cho ti khi tin trnh nhn pht ra lnh
nhn d liu (receive).
Tng t i vi tin trnh nhn d liu, nu tin trnh no (client hoc server) pht
ra lnh nhn d liu, m ti thi im cha c d liu gi ti th vic thc thi ca tin
trnh cng s b tm ngng cho ti khi c d liu gi ti.
Ch khng b phong ta (non-blocked)
Trong ch ny, khi tin trnh client hay server pht ra lnh gi d liu thc s, vic
thc thi ca tin trnh vn c tin hnh m khng quan tm n vic c tin trnh no pht
ra lnh nhn d liu hay khng.
Tng t cho trng hp nhn d liu, khi tin trnh pht ra lnh nhn d liu, n s
nhn d liu hin c, vic thc thi ca tin trnh vn c tin hnh m khng quan tm n
vic c tin trnh no pht ra lnh gi d liu tip theo hay khng.

2. Cc kin trc Client/Server


2.1. Client/Server hai tng (two-tier client/server)
Kin trc client/server n gin nht l kin trc hai tng. Trong thc t hu ht cc
kin trc client/server l kin trc hai tng. Mt ng dng hai tng cung cp nhiu trm lm
vic vi mt tng trnh din thng nht, tng ny truyn tin vi tng lu tr d liu tp trung.
Tng trnh din thng thng l client, v tng lu tr d liu l server.
Hu ht cc ng dng Internet nh l email, telnet, ftp thm ch l c Web l cc ng
dng hai tng. Phn ln cc lp trnh vin trnh ng dng vit cc ng dng client/server c
xu th s dng kin trc ny.

120

Su tm bi: www.daihoc.com.vn

Trong ng dng hai tng truyn thng, khi lng cng vic x l c dnh cho
pha client trong khi server ch n gin ng vai tr nh l chng trnh kim sot lung
vo ra gia ng dng v d liu. Kt qu l khng ch hiu nng ca ng dng b gim i do
ti nguyn hn ch ca PC, m khi lng d liu truyn i trn mng cng tng theo. Khi
ton b ng dng c x l trn mt PC, ng dng bt buc phi yu cu nhiu d liu
trc khi a ra bt k kt qu x l no cho ngi dng. Nhiu yu cu d liu cng lm
gim hiu nng ca mng. Mt vn thng gp khc i vi ng dng hai tng l vn
bo tr. Ch cn mt thay i nh i vi ng dng cng cn phi thay i li ton b ng
dng client v server.

Hnh 4.2
2.2. Client/Server ba tng
Ta c th trnh c cc vn ca kin trc client/server hai tng bng cch m
rng kin trc thnh ba tng. Mt kin trc ba tng c thm mt tng mi tc bit vic x l
d liu v tr trung tm.

Hnh 4.3

121

Su tm bi: www.daihoc.com.vn

Theo kin trc ba tng, mt ng dng c chia thnh ba tng tch bit nhau v mt
logic. Tng u tin l tng trnh din thng bao gm cc giao din ha. Tng th hai,
cn c gi l tng trung gian hay tng tc nghip. Tng th ba cha d liu cn cho ng
dng. Tng th ba v c bn l chng trnh thc hin cc li gi hm tm kim d liu
cn thit. Tng trnh din nhn d liu v nh dng n hin th. S tch bit gia chc
nng x l vi giao din to nn s linh hot cho vic thit k ng dng. Nhiu giao din
ngi dng c xy dng v trin khai m khng lm thay i logic ng dng.
Tng th ba cha d liu cn thit cho ng dng. D liu ny c th bao gm bt k
ngun thng tin no, bao gm c s d liu nh Oracale, SQL Server hoc ti liu XML.
2.3. Kin trc n-tng
Kin trc n-tng c chia thnh cc tng nh sau:
Tng giao din ngi dng: qun l tng tc ca ngi dng vi ng dng

Tng logic trnh din: Xc nh cch thc hin th giao din ngi dng v cc yu
cu ca ngi dng c qun l nh th no.

Tng logic tc nghip: M hnh ha cc quy tc tc nghip,

Tng cc dch v h tng: Cung cp mt chc nng b tr cn thit cho ng dng


nh cc thnh phn (truyn thng ip, h tr giao tc).

3. M hnh truyn tin socket


Server

Client

Socket()

Socket()

Bind()

Bind()

Listen()

3
4

Connect()

Accept()

Cc chc
nng gi
v nhn

Cc chc
nng gi
v nhn

Close()

Close()

Hnh 4.4

122

Su tm bi: www.daihoc.com.vn

Khi lp trnh, ta cn quan tm n ch b phong ta, v n c th dn n tnh


hung mt tin trnh no s ri vo vng lp v hn ca qu trnh gi hoc nhn.
Trong chng 1 chng ta bit hai giao thc TCP v UDP l cc giao thc tng
giao vn truyn d liu. Mi giao thc c nhng u v nhc im ring. Chng hn,
giao thc TCP c tin cy truyn tin cao, nhng tc truyn tin b hn ch do phi c giai
on thit lp v gii phng lin kt khi truyn tin, khi gi tin c li hay b tht lc th giao
thc TCP phi c trch nhim truyn li,Ngc li, giao thc UDP c tc truyn tin rt
nhanh v n ch c mt c ch truyn tin rt n gin: khng cn phi thit lp v gii phng
lin kt. Khi lp trnh cho TCP ta s dng cc socket lung, cn i vi giao thc UDP ta
s s dng lp DatagramSocket v DatagramPacket.
Truyn tin hng lin kt ngha l cn c giai on thit lp lin kt v gii phng lin
kt trc khi truyn tin. D liu c truyn trn mng Internet di dng cc gi (packet)
c kch thc hu hn c gi l datagram. Mi datagram cha mt header v mt
payload. Header cha a ch v cng cn truyn gi tin n, cng nh a ch v cng xut
pht ca gi tin, v cc thng tin khc c s dng m bo tin cy truyn tin,
payload cha d liu. Tuy nhin do cc datagram c chiu di hu hn nn thng phi
phn chia d liu thnh nhiu gi v khi phc li d liu ban u t cc gi ni nhn.
Trong qu trnh truyn tin c th c th c mt hay nhiu gi b mt hay b hng v cn phi
truyn li hoc cc gi tin n khng theo ng trnh t. trnh nhng iu ny, vic phn
chia d liu thnh cc gi, to cc header, phn tch header ca cc gi n, qun l danh
sch cc gi nhn c v cc gi cha nhn c, ... rt nhiu cng vic cn phi thc
hin, v i hi rt nhiu phn mm phc tp.
Tht may mn, ta khng cn phi t thc hin cng vic ny. Socket l mt cuc cch
mng ca Berkeley UNIX. Chng cho php ngi lp trnh xem mt lin kt mng nh l
mt lung m c th c d liu ra hay ghi d liu vo t lung ny.
V mt lch s Socket l mt s m rng ca mt trong nhng tng quan trng
nht ca UNIX: tt c cc thao tc vo/ra ging nh vo ra tp tin i vi ngi lp trnh,
cho d ta ang lm vic vi bn phm, mn hnh ha, mt file thng thng, hay mt lin
kt mng. Cc Socket che du ngi lp trnh khi cc chi tit mc thp ca mng nh mi
kiu ng truyn, cc kch thc gi, yu cu truyn li gi, cc a ch mng...
Mt socket c th thc hin by thao tc c bn:

Kt ni vi mt my xa (v d, chun b gi v nhn d liu)

Gi d liu

Nhn d liu

Ngt lin kt

Gn cng

Nghe d liu n

Chp nhn lin kt t cc my xa trn cng c gn

Lp Socket ca Java c s dng bi c client v server, c cc phng thc


tng ng vi bn thao tc u tin. Ba thao tc cui ch cn cho server ch cc client
lin kt vi chng. Cc thao tc ny c ci t bi lp ServerSocket. Cc socket cho
client thng c s dng theo m hnh sau:

Mt socket mi c to ra bng cch s dng hm Socket().

Socket c gng lin kt vi mt host xa.

Mi khi lin kt c thit lp, cc host xa nhn cc lung vo v lung ra t


socket, v s dng cc lung ny gi d liu cho nhau. Kiu lin kt ny c gi

123

Su tm bi: www.daihoc.com.vn

l song cng (full-duplex)-cc host c th nhn v gi d liu ng thi. ngha ca


d liu ph thuc vo giao thc.
Khi vic truyn d liu hon thnh, mt hoc c hai pha ngt lin kt. Mt s giao
thc, nh HTTP, i hi mi lin kt phi b ng sau mi khi yu cu c phc v.
Cc giao thc khc, chng hn FTP, cho php nhiu yu cu c x l trong mt
lin kt n.

4. Socket cho Client


4.1. Cc constructor
public Socket(String host, int port) throws UnknownHostException, IOException

Hm ny to mt socket TCP vi host v cng xc nh, v thc hin lin kt vi host


xa.
V d:
try{
Socket s = new Socket( www.vnn.vn,80);
}
catch(UnknownHostException e){
System.err.println(e);
}
catch(IOException e){
System.err.println(e);
}
Trong hm ny tham s host l hostname kiu String, nu host khng xc nh hoc
my ch tn min khng hot ng th constructor a ra ngoi l UnknownHostException.
V mt l do no m khng th m c socket th constructor s a ra ngoi l
IOException. C nhiu nguyn nhn khin cho mt lin kt tht bi: host m ta ang c gng
kt ni ti khng chp nhn lin kt, kt ni Internet c th b ngt, hoc vn nh tuyn
c th ngn nga cc gi tin ca ta ti ch.
V d: Vit chng trnh kim tra trn 1024 cng u tin nhng cng no ang c
server hot ng
import java.net.*;
import java.io.*;
class PortScanner
{
public static void main(String[] args)
{
String host="localhost";
if(args.length>0){
host=args[0];
}
for(int i=0;i<1024;i++){
try{
Socket s=new Socket(host,i);
System.out.println("Co mot server dang hoat dong tren cong:"+i);

124

Su tm bi: www.daihoc.com.vn

}
catch(UnknownHostException e){
System.err.println(e);
}
catch(IOException e){
System.err.println(e);
}
}
}
}

public Socket(InetAddress host, int port)throws IOException


Tng t nh constructor trc, constructor ny to mt socket TCP vi thng tin l
a ch ca mt host c xc nh bi mt i tng InetAddres v s hiu cng
port, sau n thc hin kt ni ti host. N a ra ngoi l IOException nhng
khng a ra ngoi l UnknownHostException. Constructor a ra ngoi l trong
trng hp khng kt ni c ti host.

public Socket (String host, int port, InetAddress interface, int localPort) throws
IOException, UnknownHostException
Constructor ny to ra mt socket vi thng tin l a ch IP c biu din bi mt
i tng String v mt s hiu cng v thc hin kt ni ti host . Socket kt ni
ti host xa thng qua mt giao tip mng v s hiu cng cc b c xc nh bi
hai tham s sau. Nu localPort bng 0 th Java s la chn mt cng ngu nhin c
sn nm trong khong t 1024 n 65535.

public Socket (InetAddress host, int port, InetAddress interface, int localPort) throws
IOException, UnknownHostException
Constructor ch khc constructor trn ch a ch ca host lc ny c biu din
bi mt i tng InetAddress.

4.2. Nhn cc thng tin v Socket


i tng Socket c mt s trng thng tin ring m ta c th truy nhp ti chng
thng qua cc phng thc tr v cc thng tin ny.

public InetAddress getInetAddress()


Cho trc mt i tng Socket, phng thc getInetAddress() cho ta bit host xa
m Socket kt ni ti, hoc lin kt b ngt th n cho bit host xa m Socket
kt ni ti

public int getPort()


Phng thc ny cho bit s hiu cng m Socket kt ni ti trn host xa.

public int getLocalPort()


Thng thng mt lin kt thng c hai u: host xa v host cc b. tm ra s
hiu cng pha host cc b ta gi phng thc getLocalPort().

public InetAddress getLocalAddress()


Phng thc ny cho ta bit giao tip mng no m mt socket gn kt vi n.

public InputStream getInputStream() throws IOException

125

Su tm bi: www.daihoc.com.vn

Phng thc geInputStream() tr v mt lung nhp c d liu t mt socket vo


chng trnh. Thng thng ta c th gn kt lung nhp th InputStream ti mt
lung lc hoc mt lung k t nhm a cc chc nng tin ch (chng hn nh cc
lung InputStream, hoc InputStreamReader). tng cao hiu nng, ta c th m
d liu bng cch gn kt n vi lung lc BufferedInputStream hoc
BufferedReader.

public OutputStream getOutputStream() throws IOException


Phng thc getOutputStream() tr v mt lung xut th ghi d liu t ng dng
ra u cui ca mt socket. Thng thng, ta s gn kt lung ny vi mt lung tin
li hn nh lp DataOuputStream hoc OutputStreamWriter trc khi s dng n.
tng hiu qu ghi.

Hai phng thc getInputStream() v getOutputStream() l cc phng thc cho


php ta ly v cc lung d liu nhp v xut. Nh cp chng 3 vo ra trong Java
c tin hnh thng qua cc lung, vic lm vic vi cc socket cng khng phi l mt
ngoi l. nhn d liu t mt my xa ta nhn v mt lung nhp t socket v c d
liu t lung . ghi d liu ln mt my xa ta nhn v mt lung xut t socket v ghi
d liu ln lung. Di y l hnh v ta hnh dung trc quan hn.

OutputStream

Socket

Chng
trnh
InputStream
Hnh 4.5
4.3. ng Socket

n thi im ta c y cc thng tin cn thit trin khai mt ng dng pha


client. Khi vit mt chng trnh ng dng pha client tt c mi cng vic u chuyn v
vic qun l lung v chuyn i d liu t lung thnh dng thc m ngi s dng c th
hiu c. Bn thn cc socket rt n gin bi v cc phn vic phc tp c che du
i. y chnh l l do socket tr thnh mt la chn c tnh chin lc cho lp trnh
mng.

public void close() throws IOException

Cc socket c ng mt cch t ng khi mt trong hai lung ng li, hoc khi


chng trnh kt thc, hoc khi socket c thu hi bi gabbage collector. Tuy nhin, thc
t cho thy vic cho rng h thng s t ng socket l khng tt, c bit l khi cc
chng trnh chy trong khong thi gian v hn. ng mt socket ta c th dng
phng thc close().
Mi khi mt Socket b ng li, ta vn c th truy xut ti cc trng thng tin
InetAddress, a ch cc b, v s hiu cng cc b thng qua cc phong thc
getInetAddress(), getPort(), getLocalHost(), v getLocalPort(). Tuy nhin khi ta gi cc
phng thc getInputStream() hoc getOutputStream() c d liu t lung c
InputStream hoc ghi d liu OuputStream th ngoi l IOException c a ra.

126

Su tm bi: www.daihoc.com.vn

Cc socket ng mt na (Half-closed socket)


Phng thc close() ng c cc lung nhp v lung xut t socket. Trong mt s
trng hp ta ch mun ng mt na kt ni, hoc l lung nhp hoc l lung xut. Bt
u t Java 1.3, cc phng thc shutdownInput() v shutdownOutput() cho php ta thc
hin iu ny.

public void shutdownInput() throws IOException

public void shutdownOutput() throws IOException

Cc phng thc ny khng thc s ngt lin kt. Tuy nhin, n ch iu chnh lung
kt ni ti n sao cho.
Trong Java 1.4 a thm vo hai phng thc cc lung nhp v lung xut m hay
ng

public boolean isInputShutdown()

public boolean isOutputShutdown()

4.4. Thit lp cc ty chn cho Socket


4.4.1. TCP_NODELAY
public void setTcpNoDelay(boolean on) throws SocketException

public boolean getTcpNoDelay() throws SocketException

Thit lp gi tr TCP_NODELAY l true m bo rng cc gi tin c gi i nhanh


nht c th m khng quan tm n kch thc ca chng. Thng thng, cc gi tin nh
c kt hp li thnh cc gi tin ln hn trc khi c gi i. Trc khi gi i mt gi tin
khc, host cc b i nhn cc xc thc ca gi tin trc t h thng xa.
4.4.2. SO_LINGER
public void setSoLinger(boolean on, int seconds) throws SocketException

public int getSoLinger() throws SocketException

Ty chn SO_LINGER xc nh phi thc hin cng vic g vi datagram vn cha


c gi i khi mt socket b ng li. ch mc nh, phng thc close() s c
hiu lc ngay lp tc; nhng h thng vn c gng gi phn d liu cn li. Nu
SO_LINGER c thit lp bng 0, cc gi tin cha c gi i b ph hy khi socket b
ng li. Nu SO_LINGER ln hn 0, th phng thc close() phong ta ch cho d liu
c gi i v nhn c xc thc t pha nhn. Khi ht thi gian qui nh, socket s b
ng li v bt k phn d liu cn li s khng c gi i.
4.4.3. SO_TIMEOUT
public void setSoTimeout(int milliseconds) throws SocketException

public int getSoTimeout() throws SocketException

Thng thng khi ta c d liu t m socket, li gi phng thc phong ta cho ti


khi nhn s byte. Bng cch thit lp phng thc SO_TIMEOUT, ta s m bo rng li
gi phng thc s khng phong ta trong khong thi gian qu s giy quy nh.
4.5. Cc phng thc ca lp Object
Lp Socket np chng phng thc chun ca lp java.lang.Object, toString(). V cc
socket l cc i tng tm thi v thng ch tn ti khi lin kt tn ti.

public String toString()


Phng thc toString() to ra mt xu k t nh sau:
Socket[addr=www.oreilly.com/198.122.208.11,port=80,localport=50055]
Phng thc ny thng hu ch cho vic g ri.

127

Su tm bi: www.daihoc.com.vn

4.6. Cc ngoi l Socket


Hu ht cc phng thc ca lp Socket c khai bo a ra ngoi l IOException,
hoc lp con ca lp IOExcepton l lp SocketException.
4.7. Cc lp SocketAddress
Lp SocketAddress bt u c t phin bn Java 1.4, biu din mt u cui ca lin
kt. Lp SocketAddress l mt lp tru tng m khng c phng thc no ngoi
construtor mc nh. Lp ny c th c s dng cho c cc socket TCP v socket khng
phi l TCP. Cc lp con ca lp SocketAddress cung cp thng tin chi tit hn thch hp
cho kiu socket. Trong thc t, ch h tr TCP/IP.
Mc ch chnh ca lp SocketAddress l cung cp mt ni lu tr cc thng tin lin
kt socket tm thi (nh a ch IP v s hiu cng) c th c s dng li to ra socket
mi.

public SocketAddress getRemoteSocketAddress()

public SocketAddress getLocalSocketAddress()


C hai phng thc ny tr v gi tr null nu socket vn cha kt ni ti.

5. Lp ServerSocket
Lp ServerSocket c mi th ta cn vit cc server bng Java. N c cc
constructor to cc i tng ServerSocket mi, cc phng thc lng nghe cc lin
kt trn mt cng xc nh, v cc phng thc tr v mt Socket khi lin kt c thit lp,
v vy ta c th gi v nhn d liu.
Vng i ca mt server
1. Mt ServerSocket mi c to ra trn mt cng xc nh bng cch s dng
mt constructor ServerSocket.
2. ServerSocket lng nghe lin kt n trn cng bng cch s dng phng
thc accept(). Phng thc accept() phong ta cho ti khi mt client thc hin
mt lin kt, phng thc accept() tr v mt i tng Socket m lin kt
gia client v server.
3. Ty thuc vo kiu server, hoc phng thc getInputStream(),
getOutputStream() hoc c hai c gi nhn cc lung vo ra truyn
tin vi client.
4. server v client tng tc theo mt giao thc tha thun sn cho ti khi ngt
lin kt.
5. Server, client hoc c hai ngt lin kt
6. Server tr v bc hai v i lin kt tip theo.
5.1. Cc constructor

public ServerSocket(int port) throws IOException, BindException

Constructor ny to mt socket cho server trn cng xc nh. Nu port bng 0, h


thng chn mt cng ngu nhin cho ta. Cng do h thng chn i khi c gi l cng v
danh v ta khng bit s hiu cng. Vi cc server, cc cng v danh khng hu ch lm v
cc client cn phi bit trc cng no m n ni ti (ging nh ngi gi in thoi ngoi
vic xc nh cn gi cho ai cn phi bit s in thoi lin lc vi ngi ).

128

Su tm bi: www.daihoc.com.vn

V d: to mt server socket cho cng 80


try{
ServerSocket httpd = new ServerSocket(80);
}
catch(IOException e)
{
System. err.println(e);
}
Constructor a ra ngoi l IOException nu ta khng th to v gn Socket cho cng
c yu cu. Ngoi l IOException pht sinh khi:

Cng c s dng

Khng c quyn hoc c lin kt vi mt cng nm gia 0 v 1023.


V d;
import java.net.*;
import java.io.*;
public class congLocalHost
{
public static void main(String[] args)
{
ServerSocket ss;
for(int i=0;i<=1024;i++)
{
try{
ss= new ServerSocket(i);
ss.close();
}
catch(IOException e)
{
System.out.println("Co mot server tren cong "+i);
}
}
}
}

public ServerSocket(int port, int queuelength, InetAddress bindAddress)throws


IOException

Constructor ny to mt i tng ServerSocket trn cng xc nh vi chiu di


hng i xc nh. ServerSocket ch gn cho a ch IP cc b xc nh. Constructor ny hu
ch cho cc server chy trn cc h thng c nhiu a ch IP.

129

Su tm bi: www.daihoc.com.vn

5.2. Chp nhn v ngt lin kt


Mt i tng ServerSocket hot ng trong mt vng lp chp nhn cc lin kt. Mi
ln lp n gi phng thc accept(). Phng thc ny tr v mt i tng Socket biu
din lin kt gia client v server. Tng tc gi client v server c tin hnh thng qua
socket ny. Khi giao tc hon thnh, server gi phng thc close() ca i tng socket.
Nu client ngt lin kt trong khi server vn ang hot ng, cc lung vo ra kt ni server
vi client s a ra ngoi l InterruptedException trong ln lp tip theo
public Socket accept() throws IOException

Khi bc thit lp lin kt hon thnh, v ta sn sng chp nhn lin kt, cn gi
phng thc accept() ca lp ServerSocket. Phng thc ny phong ta; n dng qu trnh
x l v i cho ti khi client c kt ni. Khi client thc s kt ni, phng thc accept()
tr v i tng Socket. Ta s dng cc phng thc getInputStream() v
getOutputStream() truyn tin vi client.
V d:
try{
ServerSocket theServer = new ServerSocket(5776);
while(true)
{
Socket con = theServer.accept();
PrintStream p = new PrintStream(con.getOutputStream());
p.println(Ban da ket noi toi server nay. Bye-bye now.);
con.close();
}
}
catch(IOException e)
{
System.err.println(e);
}

public void close() throws IOException


Nu ta kt thc lm vic vi mt i tng server socket th cn phi ng li i
tng ny.
V d: Ci t mt server daytime
import java.net.*;
import java.io.*;
import java.util.Date;
public class daytimeServer{
public final static int daytimePort =13;
public static void main(String[]args)
{
ServerSocket theServer;
Socket con;

130

Su tm bi: www.daihoc.com.vn

PrintStream p;
try{
theServer = new ServerSocket(daytimePort);
try{
p= new PrintStream(con.getOutputStream());
p.println(new Date());
con.close();
}
catch(IOException e)
{
theServer.close();
System. err.println(e);
}
}
catch(IOException e)
{
System. err.println(e);
}
}
}
public void close() throws IOException

Nu hon thnh cng vic vi mt ServerSocket, ta cn phi ng n li, c bit


nu chng trnh ca ta tip tc chy. iu ny nhm to iu kin cho cc chng
trnh khc mun s dng n. ng mt ServerSocket khng ng nht vi vic ng
mt Socket.
Lp ServerSocket cung cp mt s phng thc cho ta bit a ch cc b v cng
m trn i tng server ang hot ng. Cc phng thc ny hu ch khi ta m
mt i tng server socket trn mt cng v danh v trn mt giao tip mng khng
public InetAddress getInetAddress()

Phng thc ny tr v a ch c s dng bi server (localhost). Nu localhost


c a ch IP, a ch ny c tr v bi phng thc InetAddress.getLocalHost()
V d:
try{
ServerSocket httpd = new ServerSocket(80);
InetAddress ia = httpd.getInetAddress();
}
catch(IOException
{

e)

public int getLocalHost()

131

Su tm bi: www.daihoc.com.vn

Cc contructor ServerSocket cho php ta nghe d liu trn cng khng nh trc
bng cch gn s 0 cho cng. Phng thc ny cho php ta tm ra cng m server
ang nghe.

6. Cc bc ci t chng trnh pha Client bng Java


Sau khi tm hiu cc lp v cc phng thc cn thit ci t chng trnh
Socket. mc 6 v mc 7 chng ta s i vo cc bc c th ci t cc chng trnh
Client v Server.
Cc bc ci t Client
Bc 1:To mt i tng Socket

Socket client =new Socket(hostname,portName);


Bc 2:To mt lung xut c th s dng gi thng tin ti Socket

PrintWriter out=new PrintWriter(client.getOutputStream(),true);


Bc 3:To mt lung nhp c thng tin p ng t server

BufferedReader
in=new
InputStreamReader(client.getInputStream()));

BufferedReader(new

Bc 4:Thc hin cc thao tc vo/ra vi cc lung nhp v lung xut

i vi cc lung xut, PrintWriter, ta s dng cc phng thc print v


println, tng t nh System.out.println.
i vi lung nhp, BufferedReader, ta c th s dng phng thc read()
c mt k t, hoc mt mng cc k t, hoc gi phng thc readLine()
c vo mt dng k t. Cn ch rng phng thc readLine() tr v
null nu kt thc lung.
Bc 5: ng socket khi hon thnh qu trnh truyn tin

V d: Vit chng trnh client lin kt vi mt server. Ngi s dng nhp vo mt dng k
t t bn phm v gi d liu cho server.
import java.net.*;
import java.io.*;
public class EchoClient1
{
public static void main(String[] args)
{
String hostname="localhost";
if(args.length>0)
{
hostname=args[0];
}
PrintWriter pw=null;
BufferedReader br=null;
try{
Socket s=new Socket(hostname,2007);
br=new BufferedReader(new InputStreamReader(s.getInputStream()));

132

Su tm bi: www.daihoc.com.vn

BufferedReader
InputStreamReader(System.in));

user=new

BufferedReader(new

pw=new PrintWriter(s.getOutputStream());
System.out.println("Da ket noi duoc voi server...");
while(true)
{
String st=user.readLine();
if(st.equals("exit"))
{
break;
}
pw.println(st);
pw.flush();
System.out.println(br.readLine());
}
}
catch(IOException e)
{
System.err.println(e);
}
finally{
try{
if(br!=null)br.close();
if(pw!=null)pw.close();
}
catch(IOException e)
{
System.err.println(e);
}
}
}
}
Chng trnh EchoClient c vo hostname t i dng lnh. Tip theo ta to mt
socket vi hostname xc nh trn cng s 2007. Tt nhin cng ny hon ton do ta la
chn sao cho n khng trng vi cng c dch v hot ng. Vic to socket thnh cng
c ngha l ta lin kt c vi server. Ta nhn lung nhp t socket thng qua phng
thc getInputStream() v gn kt n vi cc lung k t v lung m nh lnh:
br=new BufferedReader(new InputStreamReader(s.getInputStream());
Tng t ta ly v lung xut thng qua phng thc getOuputStream() ca socket.
Sau gn kt lung ny vi lung PrintWriter gi d liu ti server

133

Su tm bi: www.daihoc.com.vn

pw=new PrintWriter(s.getOutputStream());
c d liu t bn phm ta gn bn phm vi cc lung nhp nh cu lnh:
BufferedReader user=new BufferedReader(new InputStreamReader(System.in));
Sau i to c cc lung th vn nhn v gi d liu tr thnh vn n
gin l c d liu t cc lung nhp br, user v ghi d liu ln lung xut pw.

7. Cc bc ci t chng trnh Server bng Java


ci t chng trnh Server bng ServerSocket ta thc hin cc bc sau:
Bc 1

To mt i tng ServerSocket
ServerSocket ss=new ServerSocket(port)
Bc 2:

To mt i tng Socket bng cch chp nhn lin kt t yu cu lin kt ca


client. Sau khi chp nhn lin kt, phng thc accept() tr v i tng Socket th
hin lin kt gia Client v Server.
while(condion)
{
Socket s=ss.accept();
doSomething(s);
}
Ngi ta khuyn co rng chng ta nn giao cng vic x l i tng s cho mt
tuyn on no .
Bc 3: To mt lung nhp c d liu t client

BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));


Bc 4: To mt lung xut gi d liu tr li cho server
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
Trong tham s true c s dng xc nh rng lung s c t ng y ra.

Bc 5: Thc hin cc thao tc vo ra vi cc lung nhp v lung xut

Bc 6: ng socket s khi truyn tin xong. Vic ng socket cng ng ngha vi


vic ng cc lung.

V d: Vit chng trnh server EchoServer phc v chng trnh EchoClient1 vit
bc 5
import java.net.*;
import java.io.*;
public class EchoServer1
{
public final static int DEFAULT_PORT=2007;
public static void main(String[] args)
{ int port=DEFAULT_PORT;
try{
ServerSocket ss=new ServerSocket(port);

134

Su tm bi: www.daihoc.com.vn

Socket s=null;
while(true)
{
try{
s=ss.accept();
PrintWriter
OutputStreamWriter(s.getOutputStream()));

pw=new

BufferedReader
InputStreamReader(s.getInputStream()));

br=new

PrintWriter(new
BufferedReader(new

while(true){
String line=br.readLine();
if(line.equals("exit"))break;
String upper=line.toUpperCase();
pw.println(upper);
pw.flush();
}
}
catch(IOException e)
{
}
finally{
try{
if(s!=null){
s.close();
}
}
catch(IOException e){}
}
}
}
catch(IOException e)
{
}
}
}

135

Su tm bi: www.daihoc.com.vn

Chng trnh bt u bng vic to ra mt i tng ServerSocket trn cng xc


nh. Server lng nghe cc lin kt trong mt vng lp v hn. N chp nhn lin kt bng
cch gi phng thc accept(). Phng thc accept() tr v mt i tng Socket th hin
mi lin kt gia client v server. Ta cng nhn v cc lung nhp v lung xut t i
tng Socket nh cc phng thc getInputStream() v getOuputStream(). Vic nhn yu
cu t client s thng qua cc lung nhp v vic gi p ng ti server s thng qua lung
xut.
Khi ng chng trnh server
start java EchoServer1

Hnh 4.6
Khi ng client
C:\MyJava>start java EchoClient1

Hnh 4.7

8. ng dng a tuyn on trong lp trnh Java


Cc server nh vit trn rt n gin nhng nhc im ca n l b hn ch v
mt hiu nng v n ch qun l c mt client ti mt thi im. Khi khi lng cng vic
m server cn x l mt yu cu ca client l qu ln v khng bit trc c thi im
hon thnh cng vic x l th cc server ny l khng th chp nhn c.
khc phc iu ny, ngi ta qun l mi phin ca client bng mt tuyn on
ring, cho php cc server lm vic vi nhiu client ng thi. Server ny c gi l server
tng tranh (concurrent server)-server to ra mt tuyn on qun l tng yu cu, sau
tip tc lng nghe cc client khc.
Chng trnh client/server chng ta xt m mc 6 v mc 7 l chng trnh
client/server n tuyn on. Cc server n tuyn on ch qun l c mt lin kt ti
mt thi im. Trong thc t mt server c th phi qun l nhiu lin kt cng mt lc.
thc hin iu ny server chp nhn cc lin kt v chuyn cc lin kt ny cho tng tuyn
on x l.
Trong phn di y chng ta s xem xt cch tin hnh ci t mt chng trnh
client/server a tuyn on.
Chng trnh pha server
import java.io.*;
import java.net.*;
class EchoServe extends Thread

136

Su tm bi: www.daihoc.com.vn

{
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public EchoServe (Socket s) throws IOException
{
socket = s;
System.out.println("Serving: "+socket);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// Cho php auto-flush:
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream())), true);
// Nu bt k li gi no trn a ra ngoi l
// th chng trnh gi c trch nhim ng socket. Ngc li tuyn on s
// s ng socket
start();
}
public void run()
{
try
{
while (true)
{
System.out.println("....Server is waiting...");
String str = in.readLine();
if (str.equals(exit) ) break;
System.out.println("Received: " + str);
System.out.println("From: "+ socket);
String upper=str.toUpperCase();
// gi li cho client
out.println(upper);
}
System.out.println("Disconnected with.."+socket);
}
catch (IOException e) {}
finally
{
try
{

137

Su tm bi: www.daihoc.com.vn

socket.close();
}
catch(IOException e) {}
}
}
}
public class TCPServer1
{
static int PORT=0; .
public static void main(String[] args) throws IOException
{
if (args.length == 1)
{
PORT=Integer.parseInt(args[0]); // Nhp s hiu cng t i dng lnh
}
// To mt i tng Server Socket
ServerSocket s = new ServerSocket(PORT);
InetAddress addrs= InetAddress.getLocalHost();
System.out.println("TCP/Server running on : "+ addrs +" ,Port "+s.getLocalPort());
try
{
while(true)
{
// Phong ta cho ti khi c mt lin kt n
Socket socket = s.accept();
try
{
new EchoServe(socket); // To mt tuyn on qun l ring tng lin kt
} catch(IOException e) {
socket.close();
}
}
}
finally {
s.close();

138

Su tm bi: www.daihoc.com.vn

}
}
}
Chng trnh pha client
import java.net.*;
import java.io.*;
public class TCPClient1
{
public static void main(String[] args) throws IOException
{
if (args.length != 2)
{
System.out.println("S dng: java TCPClient hostid port#");
System.exit(0);
}
try
{
InetAddress addr = InetAddress.getByName(args[0]);
Socket socket = new Socket(addr, Integer.parseInt(args[1]));
try
{
System.out.println("socket = " + socket);
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
// Output is automatically flushed by PrintWriter:
PrintWriter out =new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),true);
// c dng k t t bn phm
DataInputStream
BufferedInputStream(System.in));

myinput

new

DataInputStream(new

try
{

139

Su tm bi: www.daihoc.com.vn

for(;;)
{
System.out.println("Type anything followed by RETURN, or Exit to
terminate the program.");
String strin=myinput.readLine();
// Quit if the user typed ctrl+D
if (strin.equals("exit")) break;
else
out.println(strin);
String strout = in.readLine();

// Send the message


// Recive it back

if ( strin.length()==strout.length())
{ // Compare Both Strings
System.out.println("Received: "+strout);
}
else
System.out.println("Echo bad -- string unequal"+ strout);
} // of for ;;
}
catch (IOException e)
{
e.printStackTrace();
}
// User is exiting
}
finally
{
System.out.println("EOF...exit");
socket.close();
}
}
catch(UnknownHostException e)
{
System.err.println("Can't find host");
System.exit(1);
}
catch (SocketException e)

140

Su tm bi: www.daihoc.com.vn

{
System.err.println("Can't open socket");
e.printStackTrace();
System.exit(1);
}
}
}

9. Kt lun
Chng ta tm hiu cch lp trnh mng cho giao thc TCP. Cc Socket cn c
gi l socket lung v gi v nhn d liu u c tin hnh thng qua vic c ghi cc
lung. Ta c cng tm hiu c ch hot ng ca socket v cch thc lp cc chng
trnh server v client. Ngoi ra, chng ny cng gii thch to sao cn c ci t server
a tuyn on v tm hiu cch thc lp cc chng trnh client/server a tuyn on.
Trong chng tip theo chng ta s hc cch xy dng mt chng trnh client/server cho
giao thc UDP, mt giao thc gn vi giao thc TCP.

141

Su tm bi: www.daihoc.com.vn

Chng 7

Lp trnh ng dng cho giao thc UDP


1. Tng quan v giao thc UDP
TCP/IP l mt h cc giao thc c gi l h giao thc IP, bao gm bn tng. Cn
nh rng TCP/IP khng phi l mt giao thc m thc s l mt h cc giao thc, v bao
gm cc giao thc mc thp khc nh IP, TCP, v UDP. UDP nm tng giao vn, pha
trn giao thc IP. Tng giao vn cung cp kh nng truyn tin gia cc mng thng qua cc
gateway. N s dng cc a ch IP gi cc gi tin trn Internet hoc trn mng thng qua
cc trnh iu khin thit b khc nhau. TCP v UDP l mt phn ca h giao thc TCP/IP;
mi giao thc c nhng u v nhc im ring ca n.

Giao thc UDP l giao thc n gin, phi lin kt v cung cp dch v trn tng giao
vn vi tc nhanh. N h tr lin kt mt-nhiu v thng c s dng thng xuyn
trong lin kt mt-nhiu bng cch s dng cc datagram multicast v unicast.
Giao thc IP l giao thc c bn ca Internet. TCP v UDP u l hai giao thc tng
giao thc vn trn c s ca giao thc IP. Hnh di y ch ra cch nh x m hnh OSI
nh x vo kin trc TCP/IP v h giao thc TCP/IP.
Cc tng OSI

H giao thc
TCP

TCP/IP Stack

Tng phin

Tng giao vn

Tng giao vn

Tng mng

Tng Internet

ICMP,IP, IGMP

Tng lin kt d liu

Tng vt l

Tng mng

Ethernet, ATM, Frame


Relay,..

TCP

DNS

Tng ng dng

RIP

Tng trnh din

SMTP

FTP

Tng ng dng
HTTP

UDP

Bng 7.1
1.1. Mt s thut ng UDP
Trc khi kim tra xem giao thc UDP hot ng nh th no, chng ta cn lm quen
vi mt s thut ng. Trong phn di y, chng ta s nh ngha mt s thut ng c bn
c lin quan n giao thc UDP.

Packet

Trong truyn s liu, mt packet l mt dy cc s nh phn, biu din d liu v cc


tn hiu iu khin, cc gi tin ny c chuyn i v chuyn ti ti host. Trong gi tin,
thng tin c sp xp theo mt khun dng c th.

Datagram

Mt datagram l mt gi tin c lp, t cha, mang y d liu nh tuyn t


ngun ti ch m khng cn thng tin thm.

171
Su tm bi: www.daihoc.com.vn

MTU

MTU l vit tt ca Maximum Transmission Unit. MTU l mt c trng ca tng lin


kt m t s byte d liu ti a c th truyn trong mt gi tin. Mt khc, MTU l gi d liu
ln nht m mi trng mng cho trc c th truyn. V d, Ethernet c MTU c nh l
1500 byte. Trong UDP, nu kch thc ca mt datagram ln hn MTU, IP s thc hin
phn on, chia datagram thnh cc phn nh hn (cc on), v vy mi on nh c kch
thc nh hn MTU.

Port

UDP s dng cc cng nh x d liu n vo mt tin trnh c th ang chy trn


mt my tnh. UDP nh ng i cho packet ti v tr xc nh bng cch s dng s hiu
cng c xc nh trong header ca datagram. Cc cng c biu din bi cc s 16-bit,
v th cc cng nm trong di t 0 n 65535. Cc cng cng c xem nh l cc im
cui ca cc lin kt logic, v c chia thnh ba loi sau:
o

Cc cng ph bin: T 0 n 1023

Cc cng ng k: 1024 n 49151

Cc cng ng/dnh ring 49152 n 65535

Ch rng cc cng UDP c th nhn nhiu hn mt thng ip mt thi im.


Trong mt s trng hp, cc dch v TCP v UDP c th s dng cng mt s hiu cng,
nh 7 (Echo) hoc trn cng 23 (Telnet).
UDP c cc cng thng dng sau:
Cng UDP

M t

15

Netstat- Network Status-Tnh trng mng

53

DNS-Domain Name Server

69

TFTP-Trivial File Transfer Protocol


Giao thc truyn tp thng thng

137

NetBIOS Name Service

138

Dch v Datagram NetBIOS

161

SNMP
Bng 7.2

TTL (Time To Live)

Gi tr TTL cho php chng ta thit lp mt gii hn trn ca cc router m mt


datagram c th i qua. Gi tr TTL ngn nga cc gi tin khi b kt trong cc vng lp nh
tuyn v hn. TTL c khi to bi pha gi v gi tr c gim i bi mi router qun l
datagram. Khi TTL bng 0, datagram b loi b.

Multicasting

Multicasting l phng php da trn chun c tnh cht m phn phi cc thng tin
ging nhau n nhiu ngi dng. Multicasting l mt c trng chnh ca giao thc UDP.
Multicasting cho php chng ta truyn tin theo kiu mt nhiu, v d gi tin hoc th in t
ti nhiu ngi nhn, i pht thanh trn Internet, hoc cc chng trnh demo trc tuyn.
1.2. Hot ng ca giao thc UDP
Khi mt ng dng da trn giao thc UDP gi d liu ti mt host khc trn mng,
UDP thm vo mt header c di 8 byte cha cc s hiu cng ngun v ch, cng vi

172
Su tm bi: www.daihoc.com.vn

tng chiu di d liu v thng tin checksum. IP thm vo header ca ring n vo u mi


datagram UDP to ln mt datagram IP:
1.3. Cc nhc im ca giao thc UDP
So vi giao thc TCP, UDP c nhng nhc im sau:

Thiu cc tn hiu bt tay. Trc khi gi mt on, UDP khng gi cc tn hiu bt


tay gia bn gi v bn nhn. V th pha gi khng c cch no bit datagram
n ch hay cha. Do vy, UDP khng m bo vic d liu n ch hay cha.

S dng cc phin. TCP l hng lin kt, cc phin c duy tr gia cc host.
TCP s dng cc ch s phin (session ID) duy tr cc lin kt gia hai host. UDP
khng h tr bt k phin no do bn cht phi lin kt ca n.

tin cy. UDP khng m bo rng ch c mt bn sao d liu ti ch. gi d


liu ti cc h thng cui, UDP phn chia d liu thnh cc on nh. UDP khng
m bo rng cc on ny s n ch ng th t nh chng c to ra
ngun. Ngc li, TCP s dng cc s th t cng vi s hiu cng v cc gi tin
xc thc thng xuyn, iu ny m bo rng cc gi tin n ch ng th t m
n c to ra.

Bo mt. TCP c tnh bo mt cao hn UDP. Trong nhiu t chc, firewall v router
cm cc gi tin UDP, iu ny l v cc hacker thng s dng cc cng UDP.

Kim sot lung. UDP khng c kim sot lung; kt qu l, mt ng dng UDP c
thit k ti c th lm gim bng thng ca mng.

1.4. Cc u im ca UDP

Khng cn thit lp lin kt. UDP l giao thc phi lin kt, v th khng cn phi thit
lp lin kt. V UDP khng s dng cc tn hiu handshaking, nn c th trnh c
thi gian tr. chnh l l do ti sao DNS thng s dng giao thc UDP hn l
TCP-DNS s chm hn rt nhiu khi dng TCP.

Tc . UDP nhanh hn so vi TCP. Bi v iu ny, nhiu ng dng thng c


ci t trn giao thc UDP hn so vi giao thc TCP.

H tr hnh trng (Topology). UDP h tr cc lin kt 1-1, 1-n, ngc li TCP ch h


tr lin kt 1-1.

Kch thc header. UDP ch c 8 byte header cho mi on, ngc li TCP cn cc
header 20 byte, v vy s dng bng thng t hn.

Bng di y tng kt nhng s kc nhau gia hai giao thc TCP v UDP:
Cc c trng

UDP

TCP

Hng lin kt

Khng

S dng phin

Khng

tin cy

Khng

Xc thc

Khng

nh th t

Khng

iu khin lung

Khng

Nhiu hn

Bo mt

173
Su tm bi: www.daihoc.com.vn

Bng 7.3
1.5. Khi no th nn s dng UDP
Rt nhiu ng dng trn Internet s dng UDP. Da trn cc u v nhc im ca
UDP chng ta c th kt lun UDP c ch khi:

S dng cho cc phng thc truyn broadcasting v multicasting khi chng ta mun
truyn tin vi nhiu host.

Kch thc datagram nh v trnh t on l khng quan trng

Khng cn thit lp lin kt

ng dng khng gi cc d liu quan trng

Khng cn truyn li cc gi tin

Bng thng ca mng ng vai tr quan trng

Vic ci t ng dng UDP trong Java cn c hai lp l DatagramPacket v


DatagramSocket. DatagramPacket ng gi cc byte d liu vo cc gi tin UDP c gi l
datagram v cho php ta m cc datagram khi nhn c. Mt DatagramSocket ng thi
thc hin c hai nhim v nhn v gi gi tin. gi d liu, ta t d liu trong mt
DatagramPacket v gi gi tin bng cch s dng DatagramSocket. nhn d liu, ta
nhn mt i tng DatagramPacket t DatagramSocket v sau c ni dung ca gi tin.
UDP khng c bt k khi nim no v lin kt gia hai host. Mt socket gi tt c d
liu ti mt cng hoc nhn tt c d liu t mt cng m khng cn quan tm host no gi.
Mt DatagramSocket c th gi d liu ti nhiu host c lp hoc nhn d liu t nhiu
host c lp. Socket khng dnh ring cho mt lin kt c th th no c nh trong giao thc
TCP. Cc socket TCP xem lin kt mng nh l mt lung: ta gi v nhn d liu vi cc
lung nhp v lung xut nhn c t socket. UDP khng cho php iu ny; ta phi lm
vic vi tng gi tin. Tt c d liu c t trong datagram c gi i di dng mt gi
tin. Gi tin ny cng c th nhn c bi mt nhm hoc cng c th b mt. Mt gi tin
khng nht thit phi lin quan n gi tin tip theo. Cho trc hai gi tin, khng c cch no
bit c gi tin no c gi trc v gi tin no c gi sau.

2. Lp DatagramPacket
Cc datagram UDP a rt t thng tin vo datagram IP. Header UDP ch a tm
byte vo header IP. Header UDP bao gm s hiu cng ngun v ch, chiu di ca d liu
v header UDP, tip n l mt checksum ty chn. V mi cng c biu din bng hai
byte nn tng s cng UDP trn mt host s l 65536. Chiu di cng c biu din bng
hai byte nn s byte trong datagram ti a s l 65536 tr i tm 8 byte dnh cho phn thng
tin header.

174
Su tm bi: www.daihoc.com.vn

Trong Java, mt datagram UDP c biu din bi lp DatagramPacket:

public final class DatagramPacket extends Object

Lp ny cung cp cc phng thc nhn v thit lp cc a ch ngun, ch t


header IP, nhn v thit lp cc thng tin v cng ngun v ch, nhn v thit lp di d
liu. Cc trng thng tin cn li khng th truy nhp c t m Java thun ty.
DatagramPacket s dng cc constructor khc nhau ty thuc vo gi tin c s
dng gi hay nhn d liu.
2.1. Cc constructor nhn datagram
Hai constructor to ra cc i tng DatagramSocket mi nhn d liu t mng:

public DatagramPacket(byte[] b, int length)

public DatagramPacket(byte[] b, int offset, int length)

Khi mt socket nhn mt datagram, n lu tr phn d liu ca datagram trong


vng m b bt u ti v tr b[0] v tip tc cho ti khi gi tin c lu tr hon ton hoc
cho ti khi lu tr ht length byte. Nu s dng constructor th hai, th d liu c lu tr
bt u t v tr b[offset]. Chiu di ca b phi nh hn hoc bng b.length-offset. Nu ta xy
dng mt DatagramPacket c chiu di vt qu chiu di ca vng m th constructor s
a ra ngoi l IllegalArgumentException. y l kiu ngoi l RuntimeException nn
chng trnh ca ta khng cn thit phi n bt ngoi l ny.
V d, xy dng mt DatagramPacket nhn d liu c kch thc ln ti 8912 byte
byte b[]=new byte[8912];
DatagramPacket dp=new DatagramPacket(b,b.length);
2.2. Constructor gi cc datagram

175
Su tm bi: www.daihoc.com.vn

Bn constructor to cc i tng DatagramPacket mi gi d liu trn mng:

public DatagramPacket(byte[] b, int length, InetAddress dc, int port)

public DatagramPacket(byte[] b, int offset, int length, InetAddress dc, int port)

public DatagramPacket(byte[] b, int length, SocketAddress dc, int port)

public DatagramPacket(byte[] b, int offset, int length, SocketAddress dc, int port)

Mi constructor to ra mt DatagramPacket mi c gi i ti mt host khc. Gi


tin c in y d liu vi chiu di l length byte bt u t v tr offset hoc v tr 0 nu
offset khng c s dng.
V d gi i mt xu k t n mt host khc nh sau:
String s=This is an example of UDP Programming;
byte[] b= s.getBytes();
try{
InetAddress dc=InetAddress.getByName(www.vnn.vn);
int port =7;
DatagramPacket dp=new DatagramPacket(b,b.length,dc,port);
//Gi gi tin
}
catch(IOException e){
System.err.println(e);
}
Cng vic kh khn nht trong vic to ra mt i tng DatagramPacket chnh l vic
chuyn i d liu thnh mt mng byte. on m trn chuyn i mt xu k t thnh mt
mng byte gi d liu i
2.3. Cc phng thc nhn cc thng tin t DatagramPacket
DatagramPacket c su phng thc tm cc phn khc nhau ca mt datagram:
d liu thc s cng vi mt s trng header. Cc phng thc ny thng c s dng
cho cc datagram nhn c t mng.

public InetAddress getAddress()

Phng thc getAddress() tr v mt i tng InetAddress cha a ch IP ca host


xa. Nu datagram c nhn t Internet, a ch tr v chnh l a ch ca my gi
datagram (a ch ngun). Mt khc nu datagram c to cc b c gi ti my
xa, phng thc ny tr v a ch ca host m datagram c nh a ch.

public int getPort()

Phng thc getPort() tr v mt s nguyn xc nh cng trn host xa. Nu


datagram c nhn t Internet th cng ny l cng trn host gi gi tin i.

public SocketAddress()

Phng thc ny tr v mt i tng SocketAddress cha a ch IP v s hiu cng


ca host xa.

public byte[] getData()

176
Su tm bi: www.daihoc.com.vn

Phng thc getData() tr v mt mng byte cha d liu t datagram. Thng


thng cn phi chuyn cc byte ny thnh mt dng d liu khc trc khi chng trnh x
l d liu. Mt cch thc hin iu ny l chuyn i mng byte thnh mt i tng
String s dng constructor sau y:

public String(byte[] buffer,String encoding)

Tham s u tin, buffer, l mng cc byte cha d liu t datagram. Tham s th hai
cho bit cch thc m ha xu k t. Cho trc mt DatagramPacket dp c nhn t
mng, ta c th chuyn i n thnh xu k t nh sau:
String s=new String(dp.getData(),ASCII);
Nu datagram khng cha vn bn, vic chuyn i n thnh d liu Java kh khn
hn nhiu. Mt cch tip cn l chuyn i mng byte c tr v bi phng thc
getData() thnh lung ByteArrayInputStream bng cch s dng constructor ny:

public ByteArrayInputStream(byte[] b, int offset, int length)


b l mng byte c s dng nh l mt lung nhp InputStream

public int getLength()


Phng thc getLength() tr v s bytes d liu c trong mt datagram.

public getOffset()

Phng thc ny tr v v tr trong mng c tr v bi phng thc getData() m


t d liu trong datagram xut pht.
Cc phng thc thit lp gi tr cho cc trng thng tin
Su constructor trn l to lp ra cc datagram. Tuy nhin, Java cung cp mt
s phng thc thay i d liu, a ch ca my xa, v cng trn my xa sau khi
datagram c to ra. Trong mt s trng hp vic s dng li cc DatagramPacket
c sn s nhanh hn vic to mi cc i tng ny.

public void setData(byte[] b): Phng thc ny thay i d liu ca datagram

public void setData(byte[] b, int offset, int length)

Phng thc ny a ra gii php gi mt khi lng d liu ln. Thay v gi ton
b d liu trong mng, ta c th gi d liu trong tng on ca mng ti mi thi im.
V d on m sau y s gi d liu theo tng on 512 byte:
int offset=0;
DatagramPacket dp=new DatagramPacket(b,offset,512);
int bytesSent=0;
while(bytesSent<b.length)
{
ds.send(dp);
bytesSent+=dp.getLength();
int bytesToSend=b.length-bytesSent;
int size=(bytesToSend>512):512:bytesToSend;
dp.setData(b,byteSent,512);
}

177
Su tm bi: www.daihoc.com.vn

public void setAddress(InetAddress dc)

Phng thc setAddress() thay i a ch ca my m ta s gi gi tin ti. iu ny


s cho php ta gi cng mt datagram n nhiu ni nhn.

public void setPort(int port)


Phng thc ny thay i s hiu cng gi ti ca gi tin.

pubic void setAddress(SocketAddress sa)

public void setLength(int length)


Phng thc ny thay i s byte d liu c th t trong vng m.

3. Lp DatagramSocket
gi hoc nhn mt DatagramPacket, bn phi m mt DatagramSocket. Trong
Java, mt datagram socket c to ra v c truy xut thng qua i tng
DatagramSocket
public class DatagramSocket extends Object
Tt c cc datagram c gn vi mt cng cc b, cng ny c s dng lng
nghe cc datagram n hoc c t trn cc header ca cc datagram s gi i. Nu ta
vit mt client th khng cn phi quan tm n s hiu cng cc b l bao nhiu
DatagramSocket c s dng gi v nhn cc gi tin UDP. N cung cp cc
phng thc gi v nhn cc gi tin, cng nh xc nh mt gi tr timeout khi s dng
phng php vo ra khng phong ta (non blocking I/O), kim tra v sa i kch thc ti
a ca gi tin UDP, ng socket.
Cc phng thc

void close(): ng mt lin kt v gii phng n khi cng cc b.

void connect(InetAddress remote_address, int remote_port)-

InetAddress getInetAddress():phng thc ny tr v a ch remote m socket kt


ni ti, hoc gi tr null nu khng tn ti lin kt.

InetAddress getLocalAddress(): tr v a ch cc b

Int getSoTimeOut() tr v gi tr ty chn timeout ca socket. Gi tr ny xc nh thi


gian m thao tc c s phong ta trc khi n a ra ngoi l InterruptedException.
ch mc nh, gi tr ny bng 0, ch ra rng vo ra khng phong ta c s
dng.

void receive(DatagramPacket dp) throws IOException:phng thc c mt gi tin


UDP v lu n dung trong packet xc nh.

void send(DatagramSocket dp) throws IOException:phng thc gi mt gi tin

void setSoTimeOut(int timeout): thit lp gi tr ty chn ca socket.

4. Nhn cc gi tin
Trc khi mt ng dng c th c cc gi tin UDP c gi bi cc my xa, n
phi gn mt socket vi mt cng UDP bng cch s dng DatagramSocket, v to ra mt
DatagramPacket s ng vai tr nh l mt b cha cho d liu ca gi tin UDP. Hnh v
di y ch ra mi quan h gia mt gi tin UDP vi cc lp Java khc nhau c s dng
x l n v cc ng dng thc t.

178
Su tm bi: www.daihoc.com.vn

packet
c

gi tin
Chuyn gi tin vo
DatagramSocket

DatagramSocket

ng dng UDP

DatagramPacket

Hnh 7.1
Khi mt ng dng mun c cc gi tin UDP, n gi phng thc
DatagramSocket.receive(), phng thc ny sao chp gi tin UDP vo mt DatagramPacket
xc nh. X l ni dung ni tin v tin trnh lp li khi cn
DatagramPacket dp=new DatagramPacket(new byte[256],256);
DatagramSocket ds=new DatagramSocket(2000);
boolean finished=false;
while(!finished)
{
ds.receive(dp);
//X l gi tin
}
ds.close();
Khi x l gi tin ng dng phi lm vic trc tip vi mt mng byte. Tuy nhin nu
ng dng l c vn bn th ta c th s dng cc lp t gi vo ra chuyn i gia
mng byte v lung stream v reader. Bng cch gn kt lung nhp ByteArrayInputStream
vi ni dung ca mt datagram v sau kt ni vi mt kiu lung khc, khi bn c th
truy xut ti ni dung ca gi UDP mt cch d dng. Rt nhiu ngi lp trnh thch dng
cc lung vo ra I/O x l d liu, bng cch s dng lung DataInputStream hoc
BufferedReader truy xut ti ni dung ca cc mng byte.
InputStream

DatagramPacket
a ch IP

ByteArrayInputStream

a ch cng

D liu gi tin
byte[]={,}

hoc

InputStreamReader

179
Su tm bi: www.daihoc.com.vn

Hnh 7.2
V d, gn kt mt lung DataInputStream vi ni dung ca mt DatagramPacket,
ta s dng on m sau:
ByteArrayInputStream bis=new ByteArrayInputStream(dp.getData());
DataInputStream dis=new DataInputStream(bis);
//c ni dung ca gi tin UDP

5. Gi cc gi tin
Lp DatagramSocket cng c s dng gi cc gi tin. Khi gi gi tin, ng dng
phi to ra mt DatagramPacket, thit lp a ch v thng tin cng, v ghi d liu cn truyn
vo mng byte. Nu mun gi thng tin phc p th ta cng bit a ch v s hiu cng
ca gi tin nhn c. Mi khi gi tin sn sng gi, ta s dng phng thc send() ca
lp DatagramSocket gi gi tin i.

DatagramSocket

Gn cng UDP
Gi DatagramPacket
bng cch s dng
DatagramSocket

ng dng
UDP

Packet

Xy dng gi tin

DatagramPacket

Hnh 7.3
//Socket lng nghe cc gi tin n trn cng 2000
DatagramSocket socket = new DatagramSocket(2000);
DatagramPacket packet = new DatagramPacket (new byte[256], 256);
packet.setAddress ( InetAddress.getByName ( somehost ) );
packet.setPort ( 2000 );
boolean finished = false;
while !finished )
{
// Ghi d liu vo vng m buffer

180
Su tm bi: www.daihoc.com.vn

.........
socket.send (packet);
// Thc hin hnh ng no , chng hn nh c gi tin khci hoc kim tra xemor
// cn gi tin no cn gi i hay khng
.........
}
socket.close();

6. V d minh ha giao thc UDP


minh ha cc gi tin UDP c gi v nhn nh th no, chng ta s vit, bin
dch v chy ng dng sau.
Vit chng trnh theo m hnh Client/Server :
Client thc hin cc thao tc sau y:

Client gi mt xu k t do ngi dng nhp t bn phm cho server

Client nhn thng tin phn hi tr li t Server v hin th thng tin trn mn hnh
Server thc hin cc thao tc sau:

Server nhn xu k t do client gi ti v in ln mn hnh

Server bin i xu k t thnh ch hoa v gi tr li cho Client


import java.net.*;
import java.io.*;
public class UDPClient
{
public final static int CONG_MAC_DINH=9;
public static void main(String args[])
{
String hostname;
int port=CONG_MAC_DINH;
if(args.length>0)
{
hostname=args[0];
try{
}
catch(Exception e){
port =Integer.parseInt(args[1]);
}

181
Su tm bi: www.daihoc.com.vn

}
else
{
hostname="127.0.0.1";
}
try{
InetAddress dc=InetAddress.getByName(hostname);
BufferedReader
InputStreamReader(System.in));

userInput=new

BufferedReader(new

DatagramSocket ds =new DatagramSocket(port);


while(true){
String line=userInput.readLine();
if(line.equals("exit"))break;
byte[] data=line.getBytes();
DatagramPacket
DatagramPacket(data,data.length,dc,port);

dp=new

ds.send(dp);
dp.setLength(65507);
ds.receive(dp);
ByteArrayInputStream

bis

=new

ByteArrayInputStream(dp.getData());
BufferedReader

dis

=new

BufferedReader(new

InputStreamReader(bis));
System.out.println(dis.readLine());
}
}
catch(UnknownHostException e)
{
System.err.println(e);
}
catch(IOException e)
{
System.err.println(e);
}
}

182
Su tm bi: www.daihoc.com.vn

import java.net.*;
import java.io.*;
public class UDPServer
{
public final static int CONG_MAC_DINH=9;
public static void main(String args[])
{
int port=CONG_MAC_DINH;
try{
}
catch(Exception e){
port =Integer.parseInt(args[1]);
}
try{
DatagramSocket ds =new DatagramSocket(port);
DatagramPacket

dp=new

DatagramPacket(new

byte[65507],65507);
while(true){
ds.receive(dp);
ByteArrayInputStream

bis

=new

ByteArrayInputStream(dp.getData());
BufferedReader

dis

=new

BufferedReader(new

InputStreamReader(bis));
String s=dis.readLine();
System.out.println(s);
s.toUpperCase();
dp.setData(s.getBytes());

183
Su tm bi: www.daihoc.com.vn

dp.setLength(s.length());
dp.setAddress(dp.getAddress());
dp.setPort(dp.getPort());
ds.send(dp);
}
}
catch(UnknownHostException e)
{
System.err.println(e);
}
catch(IOException e)
{
System.err.println(e);
}
}
}
C:\>start java UDPServer
C:\>start java UDPClient

Hnh 7.4
Chng trnh Client/Server s dng a tuyn on
import java.net.*;
import java.io.*;
public abstract class UDPServer extends Thread
{
private int bufferSize;
protected DatagramSocket ds;

184
Su tm bi: www.daihoc.com.vn

public UDPServer(int port, int bufferSize) throws SocketException


{
this.bufferSize=bufferSize;
this.ds=new DatagramSocket(port);
}
public UDPServer(int port)throws SocketException
{
this(port,8192);
}
public void run()
{
byte[] buffer=new byte[bufferSize];
while(true)
{
DatagramPacket dp=new DatagramPacket(buffer,buffer.length);
try{
ds.receive(dp);
this.respond(dp);
}
catch(IOException e)
{
System.err.println(e);
}
}
}
public abstract void respond(DatagramPacket req);
}
Server Echo
import java.net.*;
import java.io.*;
public class UDPEchoServer extends UDPServer
{

185
Su tm bi: www.daihoc.com.vn

public final static int DEFAULT_PORT=7;


public UDPEchoServer()throws SocketException
{
super(DEFAULT_PORT);
}
public void respond(DatagramPacket dp)
{
try{
DatagramPacket outdp=new
DatagramPacket(dp.getData(),dp.getLength(),dp.getAddress(),dp.getPort());
ds.send(outdp);
}
catch(IOException e)
{
System.err.println(e);
}
}
public static void main(String[] args)
{
try
{
UDPServer server=new UDPEchoServer();
server.start();
System.out.println("Server dang da san sang lang nghe lien ket...");
}
catch(SocketException e)
{
System.err.println(e);
}
}
}
Client
import java.net.*;
import java.io.*;

186
Su tm bi: www.daihoc.com.vn

public class ReceiverThread extends Thread


{
private DatagramSocket ds;
private boolean stopped=false;
public ReceiverThread(DatagramSocket ds) throws SocketException
{
this.ds=ds;
}
public void halt(){
this.stopped=true;
}
public void run()
{
byte buffer[]=new byte[65507];
while(true)
{
if(stopped) return;
DatagramPacket dp=new DatagramPacket(buffer,buffer.length);
try{
ds.receive(dp);
String s=new String(dp.getData(),0,dp.getLength());
System.out.println(s);
Thread.yield();
}
catch(IOException e)
{
System.err.println(e);
}
}
}
}
import java.net.*;
import java.io.*;

187
Su tm bi: www.daihoc.com.vn

public class SenderThread extends Thread


{
private InetAddress server;
private DatagramSocket ds;
private boolean stopped=false;
private int port;
public SenderThread(InetAddress address, int port) throws SocketException
{
this.server=address;
this.port=port;
this.ds=new DatagramSocket();
this.ds.connect(server,port);
}
public void halt(){
this.stopped=true;
}
public DatagramSocket getSocket()
{
return this.ds;
}
public void run()
{
try{
BufferedReader userInput=new BufferedReader(new
InputStreamReader(System.in));
while(true)
{
if(stopped) return;
String line=userInput.readLine();
if(line.equals("exit"))break;
byte[] data=line.getBytes();
DatagramPacket dp=new
DatagramPacket(data,data.length,server,port);
ds.send(dp);
Thread.yield();
}
}

188
Su tm bi: www.daihoc.com.vn

catch(IOException e)
{
System.err.println(e);
}
}
}
Client Echo
import java.net.*;
import java.io.*;
public class UDPEchoClient
{
public final static int DEFAULT_PORT=7;
public static void main(String[] args)
{
String hostname="localhost";
int port= DEFAULT_PORT;
if(args.length>0)
{
hostname=args[0];
}
try{
InetAddress ia=InetAddress.getByName(args[0]);
SenderThread sender=new SenderThread(ia,DEFAULT_PORT);
sender.start();
ReceiverThread receiver=new ReceiverThread(sender.getSocket());
receiver.start();
}
catch(UnknownHostException e)
{
System.err.println(e);
}
catch(SocketException e)
{

189
Su tm bi: www.daihoc.com.vn

System.err.println(e);
}
}
}
7. Kt lun
Trong chng ny, chng ta tho lun nhng khi nim cn bn v giao thc
UDP v so snh n vi giao thc TCP. Chng ta cp ti vic ci t cc chng trnh
UDP trong Java bng cch s dng hai lp DatagramPacket v DatagramSocket. Mt s
chng trnh mu cng c gii thiu bn c tham kho v gip hiu su hn v cc
vn l thuyt.

190
Su tm bi: www.daihoc.com.vn

Chng 8

Phn tn i tng trong Java bng RMI


1. Tng quan
RMI l mt c ch cho php mt i tng ang chy trn mt my o Java ny (
Java Virtual Machine) gi cc phng thc ca mt i tng ang tn ti trn mt my
o Java khc (JVM).
Thc cht RMI l mt c ch gi phng thc t xa c thc hin v tch hp
trong ngn ng Java. V Java l mt ngn ng lp trnh hng i tng, nn phng
php lp trnh trong RMI l phng php hng i tng do cc thao tc hay cc li
gi phng thc u lin quan n i tng. Ngoi ra, RMI cn cho php mt Client c
th gi ti mt i tng n cho Server x l, v i tng ny cng c th c xem
l tham s cho li gi hm t xa, i tng ny cng c nhng d liu bn trong v cc
hnh vi nh mt i tng thc s.
So snh gi gi phng thc t xa vi cc li gi th tc t xa
Gi phng thc t xa khng phi l mt khi nim mi. Thm ch trc khi ra i
lp trnh hng i tng phn mm c th gi cc hm v cc th tc t xa. Cc h
thng nh RPC c s dng trong nhiu nm v hin nay vn c s dng.
Trc ht, Java l mt ngn ng c lp vi nn v cho php cc ng dng Java
truyn tin vi cc ng dng Java ang chy trn bt k phn cng v h iu hnh no
c h tr JVM. S khc bit chnh gia hai mc tiu l RPC h tr a ngn ng, ngc
li RMI ch h tr cc ng dng c vit bng Java.
Ngoi vn v ngn ng v h thng, c mt s s khc bit cn bn gia RPC
v RMI. Gi phng thc t xa lm vic vi cc i tng, cho php cc phng thc
chp nhn v tr v cc i tng Java cng nh cc kiu d liu nguyn t (premitive
type). Ngc li gi th tc t xa khng h tr khi nim i tng. Cc thng ip gi
cho mt dch v RPC (Remote Procedure Calling) c biu din bi ngn ng XDR
(External Data Representation): dng thc biu din d liu ngoi. Ch c cc kiu d liu
c th c nh ngha bi XDR mi c th truyn i.

2. Mc ch ca RMI

H tr gi phng thc t xa trn cc i tng trong cc my o khc nhau

H tr gi ngc phng thc ngc t server ti cc applet

Tch hp m hnh i tng phn tn vo ngn ng lp trnh Java theo mt cch


t nhin trong khi vn duy tr cc ng cnh i tng ca ngn ng lp trnh Java

Lm cho s khc bit gia m hnh i tng phn tn v m hnh i tng cc


b khng c s khc bit.

To ra cc ng dng phn tn c tin cy mt cch d dng

Duy tr s an ton kiu c cung cp bi mi trng thi gian chy ca nn tng


Java

H tr cc ng cnh tham chiu khc nhau cho cc i tng t xa

Duy tr mi trng an ton ca Java bng cc trnh bo an v cc trnh np lp.

3. Mt s thut ng
Cng nh tt c cc chng trnh khc trong Java, chng trnh RMI cng c
xy dng bi cc giao tip v lp. Giao tip nh ngha cc phng thc v cc lp thc
thi cc phng thc . Ngoi ra lp cn thc hin mt vi phng thc khc. Nhng
ch c nhng phng thc khai bo trong giao tip tha k t giao tip Remote hoc cc

159

Su tm bi: www.daihoc.com.vn

lp con ca n mi c Client gi t JVM khc. Trong mc ny ta nu mt s thut ng


thng xuyn c s dng trong phn ny:

Giao tip Remote: Mt giao tip khai bo cc phng thc cho php gi t xa.
Trong Java giao tip Remote c cc c im sau:
o

Tha k giao tip c sn: java.rmi.Remote.

Mi phng thc trong giao tip Remote phi c khai bo a ra


ngoi l RemoteException nh mnh throws java.rmi.RemoteException
v c th c cc ngoi l khc.

i tng Remote: mt i tng c to ra cho php nhng i tng khc


trn mt my JVM khc gi ti n.

Phng thc Remote: i tng Remote cha mt s cc phng thc, nhng


phng thc ny c th c gi t xa bi cc i tng trong JVM khc .

JVM

JVM

Local Object
- Data
- Method

Remote Object
- Data
- Remote Method

Hnh 8.1

4. Cc lp trung gian Stub v Skeleton


Trong k thut lp trnh phn tn RMI, cc i tng trn cc my Java o
khc nhau c th truyn tin vi nhau thng qua cc lp trung gian: Stub v Skeleton.
Vai tr ca lp trung gian: Lp trung gian tn ti c hai pha client (ni gi
phng thc ca cc i tng xa) v server (ni i tng tht s c ci t
thc thi m lnh ca phng thc). Trong Java trnh bin dch rmic.exe c s
dng to ra lp trung gian ny. Pha client lp trung gian ny gi l Stub (lp mc),
pha server lp trung gian ny gi l Skeleton(lp ni) chng ging nh cc lp mi
gii gip cc lp xa truyn tin vi nhau.

5. C ch hot ng ca RMI
Cc h thng RMI phc v cho vic truyn tin thng c chia thnh hai loi:
client v server. Mt server cung cp dch v RMI, v client gi cc phng thc trn i
tng ca dch v ny.
Server RMI phi ng k vi mt dch v tra tm v ng k tn. Dch v ny cho
php cc client truy tm chng, hoc chng c th tham chiu ti dch v trong mt m
hnh khc. Mt chng trnh ng vai tr nh vy c tn l rmiregistry, chng trnh ny
chy nh mt tin trnh c lp v cho php cc ng dng ng k dch v RMI hoc
nhn mt tham chiu ti dch v c t tn. Mi khi server c ng k, n s ch
cc yu cu RMI t cc client. Gn vi mi ng k dch v l mt tn c biu din
bng mt xu k t cho php cc client la chn dch v thch hp. Nu mt dch v
chuyn t server ny sang mt server khc, client ch cn tra tm trnh ng k tm ra
v tr mi. iu ny lm cho h thng c kh nng dung th li-nu mt dch v khng kh
dng do mt my b sp, ngi qun tr h thng c th to ra mt th hin mi ca dch
v trn mt h thng khc v ng k n vi trnh ng k RMI.

160

Su tm bi: www.daihoc.com.vn

Cc client RMI s gi cc thng ip RMI gi mt phng thc trn mt i


tng t xa. Trc khi thc hin gi phng thc t xa, client phi nhn c mt tham
chiu t xa. Tham chiu ny thng c c bng cch tra tm mt dch v trong trnh
ng k RMI. ng dng client yu cu mt tn dch v c th, v nhn mt URL tr ti ti
nguyn t xa. Khun dng di y c s dng biu din mt tham chiu i
tng t xa:
rmi://hostname:port/servicename
Trong hostname l tn ca my ch hoc mt a ch IP, port xc nh dch v,
v servicename l mt xu k t m t dch v.
Mi khi c c mt tham chiu, client c th tng tc vi dch v t xa. Cc chi
tit lin quan n mng hon ton c che du i vi nhng ngi pht trin ng
dng-lm vic vi cc i tng t xa n gin nh lm vic vi cc i tng cc b.
iu ny c th c c thng qua s phn chia h thng RMI thnh hai thnh phn,
stub v skeleton.
i tng stub l mt i tng y quyn, truyn ti yu cu i tng ti server
RMI. Cn nh rng mi dch v RMI c nh ngha nh l mt giao tip, ch khng
phi l mt chng trnh ci t, cc ng dng client ging nh cc chng trnh hng
i tng khc. Tuy nhin ngoi vic thc hin cng vic ca chnh n, stub cn truyn
mt thng ip ti mt dch v RMI xa, ch p ng, v tr v p ng cho phng
thc gi. Ngi pht trin ng dng khng cn quan tm n ti nguyn RMI nm u,
n ang chy trn nn no, n p ng y yu cu nh th no. Client RMI n gin
gi mt phng thc trn i tng y quyn, i tng ny qun l tt c cc chi tit ci
t.

Hnh 8.2
Ti pha server, i tng skeleton c nhim v lng nghe cc yu cu RMI n v
truyn cc yu cu ny ti dch v RMI. i tng skeleton khng cung cp bn ci t
ca dch v RMI. N ch ng vai tr nh l chng trnh nhn cc yu cu, v truyn cc
yu cu. Sau khi ngi pht trin to ra mt giao tip RMI, th anh ta phi cung cp mt
phin bn ci t c th ca giao tip. i tng ci t ny c gi l i tng
skeleton, i tng ny gi phng thc tng ng v truyn cc kt qu cho i tng
stub trong client RMI. M hnh ny lm cho vic lp trnh tr nn n gin, v skeleton
c tch bit vi ci t thc t ca dch v. Tt c nhng g m ngi pht trin dch
v cn quan tm l m lnh khi to ( ng k dch v v chp nhn dch v), v cung
cp chng trnh ci t ca giao tip dch v RMI.
Vi cu hi cc thng ip c truyn nh th no, cu tr li tng i n
gin. Vic truyn tin din ra gia cc i tng stub v skeleton bng cch s dng cc
socket TCP. Mi khi c to ra, skeleton lng nghe cc yu cu n c pht ra bi
cc i tng stub. Cc tham s trong h thng RMI khng ch hn ch i vi cc kiu
d liu nguyn t-bt k i tng no c kh nng tun t ha u c th c truyn
nh mt tham s hoc c tr v t phng thc t xa. Khi mt stub truyn mt yu
cu ti mt i tng skeleton, n phi ng gi cc tham s (hoc l cc kiu d liu
nguyn t, cc i tng hoc c hai) truyn i, qu trnh ny c gi l marshalling.
Ti pha skeleton cc tham s c khi phc li to nn cc kiu d liu nguyn t
v cc i tng, qu trnh ny cn c gi l unmarshaling. thc hin nhim v

161

Su tm bi: www.daihoc.com.vn

ny, cc lp con ca cc lp ObjectOutputStream v ObjectInputStream c s dng


c v ghi ni dung ca cc i tng.

JVM
Skeleton

Stub

Client
Object

JVM

Client

Remote
Object

Server

Hnh 8.3

A2

Computer C
C1Skel

Computer A A1

C1- stub

S gi phng thc ca cc i tng xa thng qua lp trung gian c c


th ho nh sau:

B1_stub

C1

B1Skel
B1
Computer B

Hnh 8.4
Ta c i tng C1 c ci t trn my C. Trnh bin dch rmic.exe s to ra
hai lp trung gian C1_Skel v C1_Stub. Lp C1_Stub s c em v my A. Khi
A1 trn my A gi C1 n s chuyn li gi n lp C1_Stub, C1_Stub chu trch
nhim ng gi tham s, chuyn vo khng gian a ch tng thch vi i tng
C1 sau gi phng thc tng ng.

Nu c phng thc ca i tng C1 tr v s c lp C1_Skel ng gi tr


ngc v cho C1_Stub chuyn giao kt qu cui cng li cho A1. Nu khi kt ni
mng gp s c th lp trung gian Stub s thng bo li n i tng A1. Theo
c ch ny A1 lun ngh rng n ang hot ng trc tip vi i tng C1 trn
my cc b.

Trn thc t, C1_Stub trn my A ch lm lp trung gian chuyn i tham s v


thc hin cc giao thc mng, n khng phi l hnh nh ca i tng C1.

162

Su tm bi: www.daihoc.com.vn

lm c iu ny, i tng C1 cn cung cp mt giao din tng ng vi cc


phng thc cho php i tng A1 gi n trn my A.

6. Kin trc RMI


S khc bit cn bn gia cc i tng t xa v cc i tng cc b l cc i
tng t xa nm trn mt my o khc. Thng thng, cc tham s i tng c
truyn cho cc phng thc v cc gi tr i tng c tr v t cc phng thc
thng qua cch truyn theo tham chiu. Tuy nhin cch ny khng lm vic khi cc
phng thc gi v cc phng thc c gi khng cng nm trn mt my o.
V vy, c ba c ch khc nhau c s dng truyn cc tham s cho cc
phng thc t xa v nhn cc kt qu tr v t cc phng thc xa. Cc kiu nguyn
t (int, boolean, double,) c truyn theo tham tr. Cc tham chiu ti cc i tng t
xa c truyn di dng cc tham chiu cho php tt c pha nhn gi cc phng
thc trn cc i tng t xa. Cc i tng khng thc thi giao tip t xa (ngha l cc
i tng khng thc thi giao tip Remote) c truyn theo tham tr; ngha l cc bn
sao y c truyn i bng cch s dng c ch tun t ha i tung. Cc i
tng khng c kh nng tun t ha th khng th c truyn i ti cc phng thc
xa. Cc i tng xa chy trn server nhng c th c gi bi cc i tng ang
chy trn client. Cc i tng khng phi xa, cc i tng kh tun t chy trn cc
h thng client.
qu trnh truyn tin l trong sut vi ngi lp trnh, truyn tin gia client v
server c ci t theo m hnh phn tng nh hnh v di y

ng logic
Chng trnh Server

Chng trnh Client

Skeleton

Stub

Tng tham chiu t xa

Tng tham chiu t xa

Tng giao vn

Network

Tng giao vn

Hnh 8.5
i vi ngi lp trnh, client dng nh truyn tin trc tip vi server. Thc t,
chng trnh client ch truyn tin vi i tng stub l i tng y quyn ca i tng
thc s nm trn h thng t xa. Stub chuyn cuc m thoi cho tng tham chiu, tng
ny truyn tin trc tip vi tng giao vn. Tng giao vn trn client truyn d liu i trn
mng my tnh ti tng giao vn bn pha server. Tng giao vn bn pha server truyn
tin vi tng tham chiu, tng ny truyn tin mt phn ca phn mm server c gi l
skeleton. Skeleton truyn tin vi chnh server. Theo hng khc t server n client th
lung truyn tin c i theo chiu ngc li.
Cch tip cn c v phc tp nhng ta khng cn quan tm n vn ny. Tt c
u c che du i, ngi lp trnh ch quan tm n vic lp cc chng trnh c kh
nng gi phng thc t xa ging nh i vi chng trnh cc b.
Trc khi c th gi mt phng thc trn mt i tng xa, ta cn mt tham
chiu ti i tng . nhn c tham chiu ny, ta yu cu mt trnh ng k tn
rmiregistry cung cp tn ca tham chiu. Trnh ng k ng vai tr nh l mt DNS nh
cho cc i tng t xa. Mt client kt ni vi trnh ng k v cung cp cho n mt URL
ca i tng t xa. Trnh ng k cung cp mt tham chiu ti i tng v client s
dng tham chiu ny gi cc phng thc trn server.
Trong thc t, client ch gi cc phng thc cc b trn trong stub. Stub l mt
i tng cc b thc thi cc giao tip t xa ca cc i tng t xa.

163

Su tm bi: www.daihoc.com.vn

Tng tham chiu t xa thc thi giao thc tng tham chiu t xa c th. Tng ny
c lp vi cc i tng stub v skeleton c th. Tng tham chiu t xa c nhim v
hiu tng tham chiu t xa c ngha nh th no. i khi tng tham chiu t xa c th
tham chiu ti nhiu my o trn nhiu host.
Tng giao vn gi cc li gi trn Internet. Pha server, tng giao vn lng nghe
cc lin kt n. Trn c s nhn li gi phng thc, tng giao vn chuyn li gi cho
tng tham chiu trn server. Tng tham chiu chuyn i cc tham chiu c gi bi
client thnh cc tham chiu cho cc my o cc b. Sau n chuyn yu cu cho
skeleton. Skeleton c tham s v truyn d liu cho chng trnh server, chng trnh
server s thc hin li gi phng thc thc s. Nu li gi phng thc tr v gi tr,
gi tr c gi xung cho skeleton, tng tham chiu xa, v tng giao vn trn pha
server, thng qua Internet v sau chuyn ln cho tng giao vn, tng tham chiu xa,
stub trn pha client.

7. Ci t chng trnh
lp mt h thng client/server bng RMI ta s dng ba gi c bn sau: java.rmi,
java.rmi.server, java.rmi.registry. Gi java.rmi bao gm cc giao tip, cc lp v cc ngoi
l c s dng lp trnh cho pha client. Gi java.rmi.server cung cp cc giao tip,
cc lp v cc ngoi l c s dng lp trnh cho pha server. Gi java.rmi.registry
c cc giao tip, cc lp v cc ngoi l c s dng nh v v t tn cc i
tng.
7.1. Ci t chng trnh pha Server
minh ha cho k thut lp trnh RMI y tc gi xin gii thiu cch lp mt
chng trnh FileServer n gin cho php client ti v mt tp tin.
Bc 1: c t giao tip Remote

import java.rmi.*;
public interface FileInterface extends Remote
{
public byte[] downloadFile(String fileName)throws RemoteException;
}
Bc 2: Vit lp thc thi giao tip

import java.rmi.*;
import java.rmi.server.*;
import java.io.*;
public class FileImpl extends UnicastRemoteObject implements FileInterface
{
private String name;
public FileImpl(String s)throws RemoteException
{
super();
name=s;
}
public byte[] downloadFile(String fileName)throws RemoteException
{

164

Su tm bi: www.daihoc.com.vn

try{
File file=new File(fileName);
//To mt mng b lu ni dung ca tp
byte b[]=new byte[(int)file.length()];
BufferedInputStream
FileInputStream(fileName));

bis=new

BufferedInputStream(new

bis.read(b,0,b.length);
bis.close();
return b;
}
catch(Exception e)
{
System.err.println(e);
return null;
}
}
}
Bc 3: Vit chng trnh pha server

import java.io.*;
import java.rmi.*;
import java.net.*;
public class FileServer
{
public static void main(String[] args) throws Exception
{
FileInterface fi=new FileImpl("FileServer");
InetAddress dc=InetAddress.getLocalHost();
Naming.rebind("rmi://"+dc.getHostAddress()+"/FileServer",fi);
System.out.println("Server ready for client requests...");
}
}
Bc 4: Ci t client

import java.rmi.*;
import java.io.*;
public class FileClient
{

165

Su tm bi: www.daihoc.com.vn

public static void main(String[] args) throws Exception


{
if(args.length!=2)
{
System.out.println("Su dung:java FileClient fileName machineName
");
System.exit(0);
}
String name="rmi://"+args[1]+"/FileServer";
FileInterface fi=(FileInterface)Naming.lookup(name);
byte[] filedata=fi.downloadFile(args[0]);
File file =new File(args[0]);
BufferedOutputStream
FileOutputStream(file.getName()));

bos=new

BufferedOutputStream(new

bos.write(filedata,0,filedata.length);
bos.flush();
bos.close();
}
}

8. Trin khai ng dng


trin khai ng dng RMI ta cn thc hin cc bc sau:

Bc 1: Bin dch cc tp chng trnh


C:\MyJava>javac FileInterface.java
C:\MyJava>javac FileImpl.java
C:\MyJava>javac FileServer.java
C:\MyJava>javac FileClient.java
Ta s thu c cc lp sau:
FileInterface.class, FileImpl.class, FileServer.class, FileClient.class
to ra cc lp trung gian ta dng lnh sau:
C:\MyJava>rmic FileImpl

Sau khi bin dch ta s thu c hai lp trung gian l FileImpl_Stub.class v


FileImpl_Skel.class.

Bc 2: T chc chng trnh


Ta t chc chng trnh trn hai my client v server nh sau:
Pha Server
FileInterface.class
FileImpl.class
FileImpl_Skel.class
FileServer.class

Pha Client
FileInterface.class
FileImpl_Stub.class
FileClient.class
Bng 8.1

Bc 3: Khi ng chng trnh

166

Su tm bi: www.daihoc.com.vn

y ta gi lp chng trnh trn cng mt my. Vic trin khai trn mng khng
c g kh khn ngoi vic cung cp hostname hoc a ch IP ca server cung cp dch v
Khi ng trnh ng k:
C:\MyJava>start rmiregistry
Khi ng server
C:\MyJava>start java FileServer
Khi ng client
C:\MyJava>java FileClient D:\RapidGet.exe localhost

9. Cc lp v cc giao tip trong gi java.rmi


Khi vit mt applet hay mt ng dng s dng cc i tng xa, ngi lp trnh
cn nhn thc rng cc giao tip v cc lp cn dng cho pha client nm trong gi
java.rmi
9.1. Giao tip Remote
Giao tip ny khng khai bo bt k phng thc no. Cc phng thc c
khai bo trong phng thc ny l cc giao tip c th c gi t xa.
9.2. Lp Naming
Lp java.rmi.Naming truyn tin trc tip vi mt trnh ng k ang chy trn
server nh x cc URL rmi://hostname/myObject thnh cc i tng t xa c th trn
host xc nh. Ta c th xem trnh ng k nh l mt DNS cho cc i tng xa. Mi
im vo trong trnh ng k bao gm mt tn v mt tham chiu i tng. Cc client
cung cp tn v nhn v mt tham chiu ti URL.
URL rmi ging nh URL http ngoi tr phn giao thc c thay th bng rmi.
Phn ng dn ca URL l tn gn vi i tng t xa trn server ch khng phi l
tn mt tp tin.
Lp Naming cung cp cc phng thc sau:

Public static String[] list(String url) throws RemotException

Phng thc ny tr v mt mng cc xu k t, mi xu l mt URL c gn


vi mt tham chiu. Tham s url l URL ca trnh ng k Naming.

Public
static
Remote
lookup(String
url)throws
RemotException,
NotBoundException, AccessException, MalformedURLException

Client s dng phng thc ny tm kim mt i tng t xa gn lin vi tn


i tng.
Phng thc ny a ra ngoi l NotBoundException nu server xa khng nhn
ra tn ca n. N a ra ngoi l RemoteException nu trnh khng th lin lc c vi
trnh ng k . N a ra ngoi l AccessException nu server t chi tra tm tn cho
host c th. Cui cng nu URL khng ng c php n s a ra ngoi l
MalformedURLException.

Public static void bind(String url, Remote object)throws RemotException,


AlreadyBoundException, MalformedURLException, AccessException

Server s dng phng thc bind() lin kt mt tn vi mt i tng xa.


Nu vic gn l thnh cng th client c th tm kim i tng stub t trnh ng k.
C rt nhiu tnh hung c th xy ra trong qu trnh gn tn. Phng thc ny
a ra ngoi l MalformedURLException nu url khng ng c php. N a ra ngoi l
RemoteException nu khng th lin lc c vi trnh ng k. N a ra ngoi l
AccessException nu client khng c php gn cc i tng trong trnh ng k. Nu
i tng URL gn vi mt i tng cc b n s a ra ngoi l
AlreadyBoundException.

167

Su tm bi: www.daihoc.com.vn

Public static void rebind(String url, Remote obj)throws RemoteException,


AccessException, MalformedURLException

Phng thc ny ging nh phng thc bind() ngoi tr vic l n gn URL cho
i tng ngay c khi URL c gn.

10. Cc lp v cc giao tip trong gi java.rmi.registry


Lm th no nhn c mt tham chiu ti i tng? Client tm ra cc i
tng xa hin c bng cch thc hin truy vn vi trnh ng k ca server. Trnh ng
k cho ta bit nhng i tng no ang kh dng bng cch truy vn trnh ng k ca
server. Ta bit lp java.rmi.Naming cho php chng trnh giao tip vi trnh ng k.
Giao tip Registry v lp LocateRegistry cho php cc client tm kim cc i
tng xa trn mt server theo tn. RegistryImpl l lp con ca lp RemoteObject, lp
ny lin kt cc tn vi cc i tng RemoteObject. Client s dng lp LocateRegistry
tm kim RegistryImpl cho mt host v cng c th.
10.1. Giao tip Registry
Giao tip ny cung cp nm phng thc:

Bind() gn mt tn vi mt i tng t xa c th

List() lit k tt c cc tn c ng k vi trnh ng k

Lookup() tm mt i tng t xa c th vi mt URL cho trc gn vi n

Rebind() gn mt tn vi mt i tng xa khc

Unbind() loi b mt tn c gn cho mt i tng xa trong trnh ng k

Registry.REGISTRY_PORT l cng mc nh lng nghe cc cc yu cu. Gi tr


mc nh l 1099.
10.2. Lp LocateRegistry
Lp java.rmi.registry.LocateRegistry cho php client tm trong trnh ng k trc tin.
Public static Registry getRegistry() throws RemoteException

Public static Registry getRegistry(int port) throws RemoteException

Public static Registry getRegistry(String host) throws RemoteException

Public static Registry getRegistry(String host, int port) throws RemoteException

Public static Registry getRegistry(String host, int port, RMIClientSocketFactory


factory) throws RemoteException

Mi phng thc trn tr v mt i tng Registry c s dng nhn cc i


tng t xa thng qua tn.
V d client c tm thy i tng ta c ng k i tng vi trnh ng k
thng qua lp Registry:
Registry r=LocateRegistry.getRegistry();
r.bind(MyName,this);
Client mun gi phng thc trn i tng t xa c th dng cc lnh sau:
Registry r=LocateRegistry.getRegistry(www.somehose.com);
RemoteObjectInterface obj=(RemoteObjectInterface)r.lookup(MyName);
Obj.invokeRemoteMethod();
V d di y minh ha cch to ra mt trnh ng k ngay trong server
import java.io.*;
import java.rmi.*;

168

Su tm bi: www.daihoc.com.vn

import java.net.*;
import java.rmi.registry.*;
public class FileServer
{
public static void main(String[] args) throws Exception
{
FileInterface fi=new FileImpl("FileServer");
InetAddress dc=InetAddress.getLocalHost();
LocateRegistry.createRegistry(1099);
Naming.bind("rmi://"+dc.getHostAddress()+"/FileServer",fi);
System.out.println("Server ready for client requests...");
}
}
Nh vy khi thc thi chng trnh ta khng cn phi khi ng trnh ng k v vic
to ra trnh ng k v khi ng n c tin hnh ngay trong chng trnh pha
server.

11. Cc lp v cc giao tip trong gi java.rmi.server


11.1. Lp RemoteObject
V mt k thut i tng t xa khng phi l mt th hin ca lp RemoteObject.
Thc t, phn ln cc i tng t xa l th hin ca cc lp con ca lp RemoteObject.
11.2. Lp RemoteServer
Lp ny l lp con ca lp RemoteObject; n l lp cha ca lp
UnicastRemoteObject.
Lp ny c cc constructor ny:

Protected RemoteServer()

Protected RemoteServer(RemoteRef r)
Nhn cc thng tin v client

Lp RemoteServer c mt phng thc xc nh thng tin v client m ta ang


truyn tin vi n:

public static String getClientHost() throws ServerNotActiveException


Phng thc ny tr v hostname ca client m gi phng thc t xa.

11.3. Lp UnicastRemoteObject
Lp UnicastRemoteObject l mt lp con c th ca lp RemoteServer. to ra
mt i tng xa, ta phi tha k lp UnicastRemoteServer v khai bo lp ny thc
thi giao tip Remote.

12. Kt lun
RMI l mt cng ngh phn tn cho php cc phng thc trn cc my o Java
c gi t xa. y l cch n gin truyn tin gia mt ng dng ny vi ng dng
khc so vi truyn tin trc tip vi TCP socket, cch truyn tin ny i hi c hai pha u
s dng cng mt giao thc. Thay v vit cc chng trnh ci t giao thc, nhng
ngi pht trin c th tng tc vi cc phng thc i tng c nh ngha bi
mt giao tip dch v RMI. Mi khi c c mt tham chiu ti i tng t xa, tham

169

Su tm bi: www.daihoc.com.vn

chiu ny c th c xem nh l mt i tng cc b, y l cch trc quan pht


trin cc ng dng mng.

170

Su tm bi: www.daihoc.com.vn

Chng 9

X l c s d liu trong Java


Cc ng dng Internet ngy nay thng c da trn cc c s d liu ln c
ci t bng cch s dng cng ngh c s d liu quan h. K t khi xut hin t nm
1995, Java c yu cu cn cung cp kh nng kt ni vi cc c s d liu quan h
hin c nh Ingres, Oracle, Access, v SQL Server,Cc tin ch cho php truy xut c
s d liu nm trong gi java.sql.
Ngy nay cc thng tin vi dung lng ln u c lu tr trong cc kho d liu
ln. Kh nng truy xut ti cc c s d liu l iu khng th thiu i vi cc ng
dng. iu ny li cng ng vi cc ng dng chy trn mng my tnh ni chung v
Internet ni ring. Trong chng ny chng ta s i vo tm hiu giao din lp trnh ng
dng JDBC ca Java v cch thc kt ni vi mt c s d liu t mt ng dng Java
thng qua JDBC.

1. JDBC Java Database Connectivity API


SUN pht trin mt giao din lp trnh ng dng API truy xut c s d liuJDBC. Mc tiu t ra ca SUN l:

JDBC l mt giao din lp trnh ng dng mc SQL.

JDBC cn c c nhng kinh nghim lm vic vi cc API c s d liu hin c.

JDBC cn n gin

Giao din lp trnh ng dng mc SQL ngha l JDBC cho php ta xy dng cc
lnh SQL v nhng cc lnh SQL bn trong cc li gi Java API. Ni tm li, v c bn ta
vn s dng SQL nhng JDBC cho php ta dch mt cch tri chy gia th gii c s
d liu v th gii ng dng Java. Kt qu ca bn t c s d liu, c tr v di
dng cc i tng Java v nu c vn khi truy xut n s a ra cc ngoi l.
JDBC API chun ha:

Cch thit lp ti c s d liu

Cch tip cn khi to cc truy vn

Cch thc to ra cc truy vn c tham s

Chun ha cu trc d liu ca kt qu truy vn

o Xc nh s ct
o Tra tm cc metadata.
JDBC API cha chun ha c php SQL. JDBC khng phi l SQL nhng. Lp
JDBC nm trong gi java.sql. N bao gm hai phn:

JDBC API l mt giao din lp trnh ng dng vit bng ngn ng Java thun ty.

Trnh qun l Driver JDBC truyn tin vi cc trnh iu khin c th ca nh sn


xut, cc trnh iu khin c s d liu ca nh sn xut truyn tin vi c s d
liu.

2. Cu trc ca JDBC
JDBC thc hin cc mc tiu ca n thng qua mt tp hp cc giao tip JDBC,
mi giao tip thc c thc hin bi tng nh sn xut. Tp hp cc lp thc thi cc
giao tip JDBC cho mt m t c s d liu c th c gi l mt trnh iu khin
JDBC. Khi xy dng mt ng dng c s d liu, ta khng phi xem xt n tt c cc
lp c s. JDBC che du cc chi tit ca tng c s d liu v nh vy ta ch cn quan
tm n ng dng ca mnh.

Su tm bi: www.daihoc.com.vn

Hnh 9.1
Cc c s d liu v cc trnh iu khin

Hnh 9.2
2.1. Kiu 1
Cc trnh iu khin ny s dng mt cng ngh cu ni truy xut ti mt c s
d liu. Cu ni JDBC-ODBC c bt u a vo t JDK 1.2 l mt v d in hnh
cho kiu driver ny. N cung cp mt gateway ti API ODBC. Ci t ca API ny thc
hin truy xut ti c s d liu thc t. Gii php cu ni thng yu cu phn mm phi
c ci t trn h thng client, ngha l chng khng phi l cc gii php tt cho cc
ng dng m khng cho php ci t phn mm trn client.
Cu ni JDBC-ODBC cung cp cch truy xut thng qua mt hay nhiu trnh iu khin
ODBC.
u im:
y l mt cch tip cn tt hc JDBC.
Hu ch cho cc cng ty ci t trnh iu khin ODBC trn tng my
client.
o y l cch duy nht truy xut c ti cc c s d liu trn my tnh
bn mc thp.
Nhc im:
o
o

o
o
o

Khng ph hp vi cc ng dng quy m ln. Hiu nng thp v c cn


nhiu cng on cn thc hin chuyn t JDBC sang ODBC.
Khng h tr tt c cc c trng ca Java.
Ngi s dng b hn ch bi chc nng do trnh iu khin ODBC cung
cp.

2.2. Kiu 2
Cc trnh iu khin kiu 2 l cc trnh iu khin API-trnh iu khin gc. iu
ny ngha l m Java gi cc phng thc C hoc C++ c cung cp bi tng nh sn
xut h qun tr c s d liu thc hin truy xut ti c s d liu. Gii php ny vn

Su tm bi: www.daihoc.com.vn

yu cu phi c phn mm trn h thng client. JDBC chuyn cc li gi ti JDBC API


thnh cc li gi kt ni vi giao din lp trnh ng dng ca my khc cho mt c s d
liu c th nh IBM, Informix, Oracle, hoc Sybase.

u im:

Hiu nng tt hn kiu 1, v trnh iu khin kiu 2 cha cc m lnh c bin


dch c ti u ha cho h iu hnh ca server c s d liu hot ng ch hu
trng,

Nhc im
o

Ngi s dng cn m bo rng trnh iu khin JDBC ca nh sn xut


c s d liu c trn tng my khch.

Phi c chng trnh c bin dch cho mi h iu hnh m ng dng


s chy.

Ch s dng c hiu qu trong cc mi trng c kim sot nh mt mng


intranet

2.3. Kiu 3
Cc trnh iu khin kiu 3 cung cp cho client mt API mng chung, API ny sau
chuyn thnh thao tc truy xut c s d liu mc server. Mt khc, trnh iu khin
JDBC trn client s dng cc socket gi mt ng dng trung gian (middleware) trn
server chuyn cc yu cu ca client thnh mt API c th i vi tng server. Kt
qu l trnh iu khin ny c bit linh hot, v n khng cn phi c phn mm ci t
trn client v mt trnh iu khin c th cung cp kh nng truy xut ti nhiu c s d
liu.
Java Middleware thun tu
Trnh iu khin Java thun ty cho cc chng trnh trung gian c s d liu
dch cc li gi JDBC cho giao thc ca nh sn xut phn mm trung gian, trnh iu
khin ny sau c chuyn cho mt giao thc gn vi c s d liu c th bi phn
mm server trung gian.

u im:
o

c s dng khi mt cng ty c nhiu c s d liu v mun s dng mt


trnh iu khin JDVC kt ni vi tt c cc c s d liu.

Trnh iu khin nm trn server, v th khng cn trnh iu khin JDBC


trn tng my client

Thnh phn server c ti u ha cho h iu hnh ang chy ch


hu trng

Nhc im:
o

Cn m lnh cho c s d liu c th trn server trung gian

2.4. Kiu 4
S dng cc giao thc mng c tch hp sn vo engine c s d liu, cc
driver kiu 4 truyn tin trc tip vi c s d liu bng cch s dng socket Java. y l
trnh iu khin Java thun ty nht. Kiu trnh iu khin ny thng do nh sn xut c
s d liu cung cp.
Trnh iu khin Java thun ty ti kt ni trc tip vi c s d liu chuyn cc
li gi JDBC thnh cc gi tin c truyn i trn mng theo mt khun dng c s
dng bi c s d liu c th. Cho php mt li gi trc tip t my client ti c s d
liu.

u im:

Su tm bi: www.daihoc.com.vn

Khng cn ci phn mm c bit no trn client hoc server. C th c


ti v mt cch linh hot

Nhc im
o

Khng ti u cho h iu hnh server v vy trnh iu khin khng th tn


dng cc c trng u vit ca h iu hnh

3. Kt ni c s d liu

Hnh 10.3
Hnh v trn cho thy cch thc m mt ng dng JDBC truyn tin vi mt hoc
nhiu c s d liu m khng cn bit n cc chi tit c lin quan n ci t driver cho
c s d liu . Mt ng dng s dng JDBC nh l mt giao tip, thng qua n
truyn tt c cc yu cu lin quan n c s d liu ca n.
Khi ta vit cc applet hay ng dng c s d liu, ta c th cung cp cc thng tin
c th v trnh iu khin JDBC l URL c s d liu. Thm ch ta c th nhp vo URL
c s d liu cho ng dng v applet vo thi gian chy di dng cc tham s.
JDBC l gi kt ni c s d liu bao gm giao din lp trnh ng dng cn bn
Java API. Java cung cp mt interface c lp vi c s d liu m mt kt ni ti c
s d liu, bng cch pht ra cc li gi SQL ti c s d liu v nhn v kt qu l mt
tp hp cc d liu. gc k thut, JDBC ng vai tr nh l mt chng trnh ci
t giao tip mc li gi SQL c nh ngha bi X/Open v c h tr bi hu ht
cc nh cung cp c s d liu quan h. thc hin giao tc vi mt kiu c s d liu
c th, ta cn phi c mt trnh iu khin JDBC ng vai tr nh l mt cu ni gia cc
li gi phng thc JDBC v interface c s s liu.
3.1. DriverManager
DriverManager cung cp phng tin np cc trnh iu khin c s d liu vo
mt ng dng Java hoc mt applet; n chnh l cch JDBC thit lp mt lin kt vi
c s d liu. ng dng Java, trc tin to mt i tng DriverManager, kt ni vi c
s d liu bng cch gi phng thc tnh getConnection() ca lp DriverManager, vi
tham chiu truyn vo ging nh mt URL c gi l URL c s d liu. DriverManager
tm kim mt driver h tr vic kt ni trong tp hp cc driver hin c. Nu tm thy
driver n truyn a ch c s d liu cho driver v yu cu driver to ra mt kt ni. Kt
ni ti c s d liu c tr v di dng mt i tng Connection.
Tt c cc driver JDBC cung cp mt ci t giao tip java.sql.Driver. Khi mt
DriverManager c to ra, n ti mt tp hp cc driver c xc nh bi thuc tnh
ca java.sql.Driver. Driver c np vo thi gian chy Java, n c nhim v to ra mt
i tng v ng k i tng vi DriverManager. Cc driver cn cho ng dng c th
c np bi phng thc Class.forName()

Su tm bi: www.daihoc.com.vn

Driver myDriver=(Driver)Class.forName(specialdb.Driver);
3.2. Connection
Mi khi cc driver cn thit c np bi DriverManager, s c mt lin kt vi mt
c s d liu c to ra nh phng thc getConnection() ca lp DriverManager. C
s d liu cn lm vic c xc nh thng qua mt tham s String ng vai tr nh l
a ch tham chiu ti c s d liu. Khng c mt khun dng chun no cho a ch xu
c s d liu; DriverManager truyn xu a ch cho tng driver JDBC c np v
xem n c hiu v h tr kiu c s d liu c xc nh.
Jdbc:odbc:financedata
Trong financedata l ngun c s d liu cc b. truy xut ti mt c s d
liu t xa t mt my client ta c th dng c php sau:
Jdbc:odbc:drvr://dataserver.foobar.com:500/financedata.
c t JDBC API khuyn co mt URL c s d liu nn c dng nh sau:
Jdbc:<sub-protocol>:<sub-name>
Trong <sub-protocol> xc nh dch v kt ni c s d liu v <sub-name>
cung cp tt c cc thng tin cn thit dch v tm c s d liu v kt ni ti n.
Phng thc getConnection() trn DriverManager hoc l tr v mt i tng
Connection biu din lin kt ti c s d liu c ch ra, hoc l a ra ngoi l
nu lin kt khng c thit lp.
3.3. Statement
Giao tip Connection cho php ngi s dng to ra mt cu lnh truy vn ti c
s d liu. Cc lnh truy vn c biu din di dng cc i tng Statement hoc
cc lp con ca n. Giao tip Connection cung cp ba phng thc to ra cc lnh
truy vn c s d liu l: createStatement(), prepareStatement(), v precpareCall().
createStatement() c s dng cho cc lnh SQL n gin khng lin quan n cc
tham s. Phng thc ny tr v mt i tng Statement c s dng pht tra cc
truy vn SQL ti c s d liu, bng cch s dng phng thc executeQuery().
Phng thc ny chp nhn mt lnh SQL nh l mt xu v cc kt qu tr v l
di dng mt i tng ResultSet. Cc phng thc khc c trong giao tip Statement
pht ra cc lnh SQL ti cc c s d liu l phng thc execute(), phng thc
ny c s dng cho cc truy vn SQL v tr v nhiu resultset v phng thc
executeUpdate() c s dng pht ra cc lnh INSERT, UPDATE, hoc DELETE.
Ngoi giao tip Statement c bn, mt i tng Connection c th c s dng
to ra mt i tng PreparedStatement v cc CallableStatement biu din cc th
tc stored procedure trong c s d liu. Mt lnh SQL c th lin quan n nhiu tham
s u vo, hoc mt lnh m ta mun x l nhiu ln, c th c to ra bng cch s
dng lnh prepareStatement() trn i tng Connection, phng thc ny tr v i
tng PreparedStatement. Lnh SQL c truyn cho phng thc prepareStatement()
l mt lnh c bin dch trc v vy vic x l nhiu ln mt lnh s hiu qu hn.
Lp con ca lp Statement h tr vic thit lp cc gi tr ca cc tham s u vo c
bin dch trc thng qua cc phng thc setXXX(). i tng PreparedStatement c
phng thc executeQuery() khng cn tham s, thay vo n x l cc lnh SQL
c bin dch trc trn c s d liu. Ch rng khng phi tt c cc nh sn xut
c s d iu hoc cc driver JDBC u h tr cc lnh c bin dch trc.
3.4. ResultSet
Cc dng d liu c tr v t vic x l mt lnh c biu din bng mt
ResultSet trong JDBC. V d, phng thc executeQuery() ca Statement tr v mt i
tng ResultSet. i tng ResultSet cung cp cc cch duyt qua cc dng d liu
c tr v t vic x l cu lnh truy vn SQL thng qua phng thc next() ca n;
cc trng d liu trong mi hng c th c tm kim thng qua cc tn hoc ch mc
ct bng cch s dng phng thc getXXX(). Ngi dng cn phi bit kiu d liu

Su tm bi: www.daihoc.com.vn

trong mi ct d liu c tr v, v mi mc d liu c tm kim thng qua cc


phng thc getXXX() c kiu c th.
Ty thuc vo kiu trnh iu khin JDBC c ci t, vic duyt qua cc hng
d liu trong i tng ResultSet c th to ra hiu ng ly d liu t c s d liu,
hoc ng gin l tr v tng hng d liu t cache. Nu hiu nng ca cc giao dch l
vn i vi ng dng, ta cn xc nh d liu tr v c qun l nh th no bi cc
trnh iu khin ca nh sn xut.
Lu : Gi tr tr li ca hm getXXX(args) l d liu ca trng c tn l args ca
cc dng d liu c chn ra. Ngoi ra cng cn phn bit cc kiu ca Java vi cc
kiu d liu ca SQL. Bng di y m t cc kiu d liu tng ng ca Java, SQL v
cc hm getXXX().
Kiu ca SQL

Kiu ca Java

Hm getXXX()

CHAR

String

getString()

VARCHAR

String

getString()

LONGVARCHAR

String

getString()

NUMBERIC

java.math.BigDecimal

getBigDecimal()

DECIMAL

java.math.BigDecimal

getBigDecimal()

BIT

Boolean (boolean)

getBoolean()

TINYINT

Integer (byte)

getByte()

SMALLINT

Integer (short)

getShort()

INTEGER

Integer (int)

getInt()

BIGINT

Long (long)

getLong()

REAL

Float (float)

getFloat()

FLOAT

Double (double)

getDouble()

DOUBLE

Double (double)

getDouble()

BINARY

byte[]

getBytes()

VARBINARY

byte[]

getBytes()

LONGVARBINARY

byte[]

getBytes()

DATE

java.sql.Date

getDate()

TIME

java.sql.Time

getTime()

TIMESTAMP

java.sql.Timestamp

getTimestamp()

Bng 10.1

4. Lp DatabaseMetaData
Mun x l tt cc d liu ca mt CSDL th chng ta phi bit c nhng thng
tin chung v cu trc ca CSDL nh: h QTCSDL, tn ca cc bng d liu, tn gi
ca cc trng d liu, v.v .
bit c nhng thng tin chung v cu trc ca mt h CSDL, chng ta c th
s dng giao din java.sql.DatabaseMetaData thng qua hm getMetaData().
DatabaseMetaData dbmeta = con.getMetaData();
trong , con l i tng kt ni c to ra bi lp Connection.
Lp DatabaseMetaData cung cp mt s hm c np chng xc nh c
nhng thng tin v cu hnh ca mt CSDL. Mt s hm cho li i tng ca String
(getURL()), mt s tr li gi tr logic (nullsAreSortedHigh()) hay tr li gi tr nguyn nh

Su tm bi: www.daihoc.com.vn

hm getMaxConnection()). Nhng hm khc cho li kt qu l cc i tng ca


ResultSet nh: getColumns(), getTableType(), getPrivileges(), v.v.

5. Lp ResultSetMetaData
Giao din ResultSetMetaData cung cp cc thng tin v cu trc c th ca
ResultSet, bao gm c s ct, tn v gi tr ca chng. V d sau l mt chng trnh
hin th cc kiu v gi tr ca tng trng ca mt bng d liu.
V d 9.3 Chng trnh hin th mt bng d liu.
import java.sql.*;
import java.util.StringTokenizer;
public class TableViewer {
final static String jdbcURL = "jdbc:odbc:StudentDB";
final static String jdbcDriver =
"sun.jdbc:odbc:JdbcOdbcDriver";
final static String table = "STUDENT";
public static void main(java.lang.String[]args) {
System.out.println("---Table Viewer ---");
try {
Class.forName(jdbcDriver);
Connection con =
DriverManager.getConnection(jdbcURL, "", "");
Statement stmt = con.createStatement();
// c ra c bng Student v a vo i tng rs
ResultSet rs = stmt.executeQuery("SELECT * FROM " + table);
// c ra cc thng tin v rs
ResultSetMetaData rsmd = rs.getMetaData();
// Xc nh s ct ca rsmd
int colCount = rsmd.getColumnCount();
for(int col = 1; col <= colCount; col++)
{
// In ra tn v kiu ca tng trng d liu trong rsmd
System.out.print(rsmd.getColumnLabel(col));
System.out.print(" (" + rsmd.getColumnTypeName(col) + ")");
if(col < colCount)
System.out.print(", ");
}
System.out.println();
while(rs.next()){
// In ra dng d liu trong rsmd
for(int col = 1; col <= colCount; col++)

Su tm bi: www.daihoc.com.vn

{
System.out.print(rs.getString(col));
if(col < colCount)
System.out.print(" ");
}
System.out.println();
}
rs.close();
stmt.close();
con.close();
}
catch (ClassNotFoundException e) {
System.out.println("Unable to load database driver class");
}
catch (SQLException se) {
System.out.println("SQL Exception: " + se.getMessage());
}
}
}

6. Cc bc c bn kt ni vi c s d liu t mt ng dng Java


Bc 1: Np trnh iu khin

try{
Class.forName(oracle.jdbc.driver.OracleDriver);
}
catch(ClassNotFoundException e)
{
System.out.println(Loi nap trinh dieu khien:+e);
}

Bc 2: Xc nh URL c s d liu
String host=dbhost.yourcompany.com;
String dbName=someName;
int port=1234;
String oracaleURL=jdbc:oracle:thin:@+host+:+port+dbName;

Bc 3: Thit lp lin kt
String username=hoan_td2001;
String password=topsecret;
Connection con=DriverManager.getConnecton(oracleURL,username,password);

Su tm bi: www.daihoc.com.vn

Bc 4: To ra mt i tng Statement

Statement s=con.createStatement();
Bc 5: X l truy vn

String q=Select col1, col2, col3 from sometable;


ResultSet rs=s.executeQuery(q);
Bc 6: X l kt qu

while(rs.next())
{
System.out.println(rs.getString(1)+ +
rs.getString(2)+ +
rs.getString(3));
}
Ct u tin c ch mc l 1 ch khng phi l 0.

Bc 7: ng lin kt
con.close();
Cc v d v kt ni c s d liu t ng dng Java.

V d v kt ni kiu 1:
import java.sql.*;
class DBOracle1
{
public static
SQLException
{

void

main(String

args[])throws

ClassNotFoundException,

try{
//Co the dung lenh nay de tai driver
Class.forName("oracle.jdbc.OracleDriver");
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
//Lien ket toi co so du lieu
Connection
conn
DriverManager.getConnection("jdbc:oracle:oci8:@HOAN", "scott", "tiger");

Statement stmt = conn.createStatement( );


ResultSet rset = stmt.executeQuery("select empno, ename from emp");
ResultSetMetaData rst=rset.getMetaData();
int numcol=rst.getColumnCount();
System.out.println("So cot cua bang la:"+numcol);
System.out.println("Schema Name:" + rst.getTableName(1));
for(int i=1;i<numcol+1;i++)

Su tm bi: www.daihoc.com.vn

System.out.println(rst.getColumnName(i)+" "+rst.getColumnTypeName(i));
while(rset.next( ))
{
System.out.println(rset.getString("empno"));
System.out.println(rset.getString("ename"));
}
rset.close( );
stmt.close( );
conn.close( );
}
catch(Exception e)
{
System.err.println("Ex : "+e);
}
}
}
V d v kt ni kiu 2:
import java.io.*;
import java.sql.*;
import java.text.*;
public class DBOracle2 {
Connection conn;
public DBOracle2( )
{
try
{
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection conn = DriverManager.getConnection("jdbc:oracle:oci8:@HOAN",
"scott", "tiger");
}
catch (SQLException e)
{
System.err.println(e.getMessage( ));
e.printStackTrace( );
}
}
public static void main(String[] args)throws Exception, IOException

10

Su tm bi: www.daihoc.com.vn

{
new DBOracle2().process( );
}
public void process( ) throws IOException, SQLException
{
int rows = 0;
ResultSet rslt = null;
PreparedStatement pstmt = null;
String insert ="insert into EMP " +"( EMPNO, ENAME,JOB) " +"values " +"(
?, ?, ?)";
try {
System.out.println(insert);
pstmt = conn.prepareStatement(insert);
pstmt.setString( 1, "EMPNO" );
pstmt.setString( 2, "ENAME" );
pstmt.setString( 3,"JOB" );
rows = pstmt.executeUpdate( );
pstmt.close( );
pstmt = null;
System.out.println(rows + " rows inserted");
System.out.println("");
}
catch (SQLException e) {
System.err.println(e.getMessage( ));
}
finally {
if (pstmt != null)
try {
pstmt.close( );
}
catch(SQLException ignore)
{
}
}

11

Su tm bi: www.daihoc.com.vn

protected void finalize( )throws Throwable {


if (conn != null)
try { conn.close( ); } catch (SQLException ignore) { }
super.finalize( );
}
}
V d v kt ni kiu 4:
//Type 4 Driver
import java.sql.*;
import java.util.*;
class DBOracle4
{
public static
SQLException

void

main(String

args[])throws

ClassNotFoundException,

{
try{
//Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Enumeration drivers = DriverManager.getDrivers();
while(drivers.hasMoreElements())
{
Driver driver = (Driver)drivers.nextElement();
System.out.println("Registered Driver:"+driver.getClass().getName());
}

//Lien ket toi co so du lieu


Connection
conn
DriverManager.getConnection("jdbc:Oracle:thin:@neworacle02:1521:HOAN",
"tiger");

=
"scott",

DatabaseMetaData dbmd=conn.getMetaData();
System.out.println(dbmd.getDatabaseProductName());
System.out.println(dbmd.getDatabaseProductVersion());
Statement stmt = conn.createStatement( );

12

Su tm bi: www.daihoc.com.vn

ResultSet rset = stmt.executeQuery("select empno, ename from emp");


ResultSetMetaData rst=rset.getMetaData();
int numcol=rst.getColumnCount();
System.out.println("So cot cua bang la:"+numcol);
System.out.println(rst.getTableName(1));
for(int i=1;i<numcol+1;i++)
System.out.println(rst.getColumnName(i)+"
"+rst.getColumnTypeName(i));
while(rset.next( ))
{
System.out.println(rset.getString("empno")+"
"+rset.getString("ename"));
}
rset.close( );
stmt.close( );
conn.close( );
}
catch(Exception e)
{
System.err.println("Ex : "+e);
}
}
}

7. S dng PreparedStatement
i khi vic s dng mt i tng PreparedStatent hiu qu v tin li hn nhiu
so vi vic s dng i tng Statement. Kiu lnh c bit ny l lp con ca lp
Statement.
Khi no cn s dng i tng PreparedStatement
Nu ta mun x l mt i tng Statement nhiu ln, ta c th s dng i tng
PreparedStatement gim thi gian x l.
c trng chnh ca mt i tng PreparedStatement l n c cung cp trc
mt lnh SQL trc khi to ra i tng. i tng PreparedStatement l mt lnh SQL
c bin dch trc. iu ny ngha l khi i tng PreparedStatement c x l,
h qun tr c s d liu ch cn x l lnh SQL ca PreparedStatement m khng phi
bin dch n.

13

Su tm bi: www.daihoc.com.vn

Mc d PreparedStatement c th c s dng vi cc lnh SQL khng c tham


s nhng ta thng hay s dng cc lnh SQL c tham s. u im ca vic s dng
lnh SQL c tham s l ta c th s dng cng mt lnh v cung cp cho n cc gi tr
khc nhau mi khi x l. Ta s thy iu ny trong v d phn sau.
To mt i tng PreparedStatement
Ging nh cc i tng Statement, bn c c th to ra cc i tng
PrepraredStatement vi mt phng thc Connection. S dng mt kt ni m trong v
d trc l con, c th to ra i tng PreparedStatement nhn hai tham s u vo
nh sau:
PreparedStatement updateSales = con.prepareStatement(
"UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ?");
Cung cp cc gi tr cho cc tham s ca i tng PreparedStatement
Ta cn cung cp cc gi tr c s dng thay cho v tr ca cc du hi nu c
trc khi x l mt i tng PreparedStatement. Ta c th thc hin iu ny bng
cch gi mt trong cc phng thc setXXX c nh ngha trong lp
PreparedStatement. Nu gi tr ta mun thay th cho du hi (?) l kiu int trong Java, ta
c th gi phng thc setInt. Nu gi tr ta mun thay th cho du (?) l kiu String
trong Java, ta c th gi phng thc setString,Mt cch tng qut, ng vi mi kiu
trong ngn ng lp trnh Java s c mt phng thc setXXX tng ng.
V d:
import java.sql.*;
public class PreparedStmt{
public static void main(String args[]){
int empid;
String LastName;
String FirstName;
String query = "SELECT * FROM Employees where EmployeeID=?;";
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con =DriverManager.getConnection ("jdbc:odbc:MyData");
PreparedStatement pstmt = con.prepareStatement(query);
pstmt.setInt(1,2);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
empid = rs.getInt("EmployeeID");
LastName = rs.getString("LastName");
FirstName = rs.getString("FirstName");
System.out.println(empid+", "+LastName+"\t"+FirstName+"\t");
}
}
catch(ClassNotFoundException e){
e.printStackTrace();

14

Su tm bi: www.daihoc.com.vn

}
catch(SQLException e){
e.printStackTrace();
}
}
}

S dng mt vng lp thit lp cc gi tr

Ta c th s dng vng lp thit lp cc gi tr cho cc tham s u vo.


PreparedStatement updateSales;
String updateString = "update COFFEES " +
"set SALES = ? where COF_NAME like ?";
updateSales = con.prepareStatement(updateString);
int [] salesForWeek = {175, 150, 60, 155, 90};
String [] coffees = {"Colombian", "French_Roast", "Espresso",
"Colombian_Decaf", "French_Roast_Decaf"};
int len = coffees.length;
for(int i = 0; i < len; i++) {
updateSales.setInt(1, salesForWeek[i]);
updateSales.setString(2, coffees[i]);
updateSales.executeUpdate();
}
Cc gi tr tr v ca phng thc executeUpdate
Phng thc executeQuery tr v mt i tng ResultSet cha cc kt qu ca truy
vn c gi ti h qun tr c s d liu, gi tr tr v khi x l phng thc
executeUpdate l mt s nguyn int ch ra s hng trong bng c cp nht.
updateSales.setInt(1, 50);
updateSales.setString(2, "Espresso");
int n = updateSales.executeUpdate();
// n = 1 because one row had a change in it
8. S dng cc giao tc
Qun l giao tc
Mt giao tc l mt tp hp mt hoc nhiu lnh c x l cng vi nhau nh
mt chnh th thng nht (n v). Khi x l mt giao tc hoc tt c cc lnh c x l
hoc khng lnh no c x l. Nhiu trng hp ta khng mun mt lnh c hiu lc
ngay nu lnh khc khng thnh cng.
iu ny c th c thc hin nh phng thc setAutoCommit() ca i tng
Connection. Phng thc ny nhn mt gi tr boolean lm tham s..
Ngn ch Auto-commit
Khi mt lin kt c to ra, th lin kt ch auto-commit.
Mi lnh SQL c xem nh l mt giao tc v s c t ng hon thnh ngay
khi n c x l.
Cch cho php hai hoc nhiu lnh c nhm cng vi nhau thnh mt giao
tc l cm ch auto-commit.
V d:
con.setAutoCommit(false);
Xc nhn hon thnh mt giao tc
Mi khi ch auto-commit b cm, khng c lnh SQL no s c xc nhn hon
thnh cho ti khi ta gi phng thc commit().

15

Su tm bi: www.daihoc.com.vn

Ta c th thc hin iu ny bng cch gi phng thc commit() ca cc i tng lin


kt.
Nu ta c gng x l mt hay nhiu lnh trong mt giao tc v nhn c mt ngoi l
SQLException, ta cn gi phng thc rollback() hy b giao tc v khi ng li ton
b giao tc.
con.setAutoCommit(false);
PreparedStatement updateName =null;
String query = null;
Query="UPDATE license SET name = ? WHERE id = 126"
updateName= con.prepareStatement(query);
updateName.setString(1, name);
updateName.executeUpdate();
PreparedStatement updateSex = null;
query = "UPDATE test SET test_value =?
updateSex = con.prepareStatement(query);
updateSex.setString(1, "Male");
updateSex.executeUpdate();
con.commit();
con.setAutoCommit(true);
V d:
import java.sql.*;
public class PreparedUpdate{
public static void main(String args[]) throws Exception{
int empid;
int rows=0;
String LastName;
String FirstName;
String query = "insert into EMP " +"(EmployeeID,LASTNAME,FIRSTNAME) "
+"values " +"(?,?, ?)";
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con =DriverManager.getConnection ("jdbc:odbc:MyData");
con.setAutoCommit(false);
PreparedStatement pstmt = con.prepareStatement(query);
pstmt.setInt(1,Integer.parseInt(args[0]));
pstmt.setString(2,args[1]);
pstmt.setString(3,args[2]);
rows = pstmt.executeUpdate( );
pstmt.close( );

16

Su tm bi: www.daihoc.com.vn

pstmt = null;
System.out.println(rows + " rows inserted");
System.out.println("");
con.commit();
}
catch(ClassNotFoundException e){
e.printStackTrace();
}
catch(SQLException e){
e.printStackTrace();
}
}
}

8. S dng cc giao tc
Sau thc hin cc lnh: Cc chng trnh Java ch thc hin c cc lnh trn
CSDL
thng
qua
i
tng
Statement.
Cc cu lnh SQL c th c thc hin tc th thng qua i tng Statement, c th
l mt cu lnh bin dch trc (i tng PreparedStatement) hay c th l mt lnh
gi cc th tc ci sn (Stored Procedure) trong CSDL (i tng CallableStatement).
Cc cu lnh SQL c th c thc hin thng qua phng thc executeQuery() kt
qu l mt i tng ResultSet, hay phng thc executeUpdate() kt qu l mt s
nguyn cho bit tng s cc record chu nh hng ca cu lnh va thc hin (thng
l
cc
cu
lnh
sa
i
d
liu
Update
Delete).
Trong trng hp c s dng trnh qun l transaction, cc phng thc rollback() c
dng phc hi trng thi trc v commit() xc nhn vic thc hin lnh.
chm dt cn xa kt ni, xa cc i tng gii phng ti nguyn ca h thng.

17

Su tm bi: www.daihoc.com.vn

Chng 10
TUN T HA I TNG V NG DNG TRONG
LP TRNH MNG
1. Tun t ha i tng

1.1. Khi nim


Tun t ha l qu trnh chuyn tp hp cc th hin i tng cha
cc tham chiu ti cc i tng khc thnh mt lung byte tuyn tnh,
lung ny c th c gi i qua mt Socket, c lu vo tp tin hoc
c x l di dng mt lung d liu. Tun t ha l c ch c s
dng bi RMI truyn cc i tng gia cc my o JVM hoc di
dng cc tham s trong li gi phng thc t client ti server hoc l cc
gi tr tr v t mt li gi phng thc.
Tun t ha l mt c ch c xy dng v c a vo cc
lp th vin Java cn bn chuyn mt th cc i tng thnh cc
lung d liu. Lung d liu ny sau c th c x l bng cch lp
trnh v ta c th to li cc bn sao ca i tng ban u nh qu trnh
ngc li c gi l gii tun t ha.
Tun t ha c ba mc ch chnh sau
C ch n nh: Nu lung c s dng l FileOuputStream, th d
liu s c t ng ghi vo tp.
C ch sao chp: Nu lung c s dng l ByteArrayObjectOuput,
th d liu s c ghi vo mt mng byte trong b nh. Mng byte
ny sau c th c s dng to ra cc bn sao ca cc i
tng ban u.
Nu lung ang c s dng xut pht t mt Socket th d liu s
c t ng gi i ti Socket nhn, khi mt chng trnh khc
s quyt nh phi lm g i vi d liu nhn c.
Mt iu quan trng khc cn ch l vic s dng tun t ha c lp
vi thut ton tun t ha.
1.2. Kh tun t (Serializable)
Ch c i tng thc thi giao din Serializable mi c th c ghi
li v c phc hi bi cc tin ch tun t ha. Giao din Serializable
khng nh ngha cc thnh phn. Nu mt lp thc thi giao din
Serializable th lp c kh nng tun t ha. Mt lp l kh tun t th
tt c cc lp con ca n cng l kh tun t.
Giao din ObjectOutput tha k t giao din DataOutput v h tr tun
t ha i tng. Lp ObjectOuputStream l lp con ca lp ObjectOuput
v thc thi giao din ObjectOutput. N c nhim v ghi cc i tng vo
mt lung bng cch s dng phng thc writeObject(Object obj).

Su tm bi: www.daihoc.com.vn

ObjectInput tha k giao din DataInput v nh ngha cc phng thc.


N h tr cho vic tun t ha i tng. Phng thc readObject() c
gi gii tun t ha mt i tng.
ObjectInputStream c nh ngha trong gi java.io l mt lung ci t
c ch c trng thi ca lung nhp i tng.
Mt vn t ra l: liu mi lp trong Java u c kh nng tun t
ha? Cu tr li l khng, bi v khng cn thit hoc s khng c ngha
khi tun t ha mt s lp nht nh. xc nh xem mt lp c kh tun
t hay khng ta s dng cng c serialver c trong b JDK.

Hnh 1

Hnh 2
Vi kt qu trn cho ta thy lp ny l kh tun t. Nhng khng phi mi
lp trong Java u kh tun t chng hn ta th kim tra vi lp
java.net.Socket

Hnh 3
Khi kt qu hin th l Class java.net.Socket is not Serializable (Lp
java.net.Socket khng kh tun t).

1.3. Xy dng lp mt lp kh tun t


i vi cc lp do ngi lp trnh nh ngha ta phi khai bo bo
hiu cho h thng bit n c kh tun t hay khng. Mt lp do ngi dng
nh ngha c kh nng tun t ha khi lp thc thi giao din
Serializable. Trong v d di y ta nh ngha lp Point lp ny c kh
nng tun t ha.
public class Point implements Serializable
{
private double x,y;

Su tm bi: www.daihoc.com.vn

public Point(double x,double y){


this.x=x;
this.y=y;
}
public double getX(){
return x;
}
public double getY(){
return y;
}
public void move(double dx,double dy){
x+=dx;
y+=dy;
}
public void print(){
System.out.println("Toa do cua diem la:");
System.out.println("Toa do x="+x);
System.out.println("Toa do y="+y);
}
}

1.4. C ch c v ghi i tng trn thit b lu tr ngoi


Chng ta u bit rng tt c cc thao tc nhp v xut d liu trong
Java thc cht l vic c v ghi trn cc lung d liu vo v lung d liu
ra. Vic c v ghi i tng trn thit b lu tr ngoi cng khng phi l
mt ngoi l. Chng ta c th thy c c ch ny qua hnh 4.
ObjectInputStream

FileInputStream

Serializable Object

File

ObjectOuputStream

FileOuputStream

Su tm bi: www.daihoc.com.vn

Hnh 4
Gi s i tng obj l mt i tng kh tun t. Bn thn i
tng ny c th l kh tun t hoc do ngi lp trnh nh ngha nn
thuc tnh kh tun t cho n.
C ch ghi i tng c tin hnh rt n gin: Trc tin ta to
ra mt tp ghi thng tin, thc cht l to ra i tng FileOuputStream,
sau ta to ra mt lung ghi i tng ObjectOuputStream gn vi lung
ghi tp v gn kt hai lung vi nhau. Vic ghi i tng c thc hin
bi phng thc writeObject().
FileOuputStream fos=new FileOuputStream("date.out");
ObjectOuputStream oos=new ObjectOuputStream(fos);
Date d=new Date();
oos.writeObject(d);
Qu trnh trn c gi l qu trnh tun t ha.
Chng ta nhn thy rng phc hi li trng thi ca mt i tng
ta phi m mt tp c d liu. Nhng ta khng th c c trc tip
m phi thng qua lung nhp i tng ObjectInputStream gn vi lung
nhp tp tin FileInputStream. Vic c li trng thi i tng c tin
hnh nh phng thc readObject()
FileInputStream fis=new FileInputStream("date.out");
ObjectInputStream ois=new ObjectInputStream(fis);
Date d=(Date)ois.readObject();
Qu trnh trn cn c gi l gii tun t ha
Cng vic c v ghi trng thi ca i tng kh tun t do ngi
lp trnh nh ngha c tin hnh hon ton tng t nh trn.
2. Truyn cc i tng thng qua Socket

Chng ta bit cch ghi v c cc i tng t cc lung vo ra


trong mt tin trnh n, by gi chng ta s xem xt cch truyn i tng
thng qua Socket.
M hnh lp trnh Socket cho giao thc TCP l m hnh rt ph bin
trong lp trnh mng. lp chng trnh client/server trong Java ta cn hai
lp Socket v ServerSocket.
2.1. Lp Socket
Lp Socket ca Java c s dng bi c client v server, n c cc phng
thc tng ng vi bn thao tc u tin. Ba thao tc cui ch cn cho server
ch cc client lin kt vi chng. Cc thao tc ny c ci t bi lp
ServerSocket. Cc Socket cho client thng c s dng theo m hnh sau:

Su tm bi: www.daihoc.com.vn

1. Mt Socket mi c to ra bng cch s dng hm dng Socket().


2. Socket c gng lin kt vi mt host xa.
3. Mi khi lin kt c thit lp, cc host xa nhn cc lung vo v lung
ra t Socket, v s dng cc lung ny gi d liu cho nhau. Kiu lin
kt ny c gi l song cng (full-duplex), cc host c th nhn v gi d
liu ng thi. ngha ca d liu ph thuc vo tng giao thc.
4. Khi vic truyn d liu hon thnh, mt hoc c hai pha ngt lin kt. Mt
s giao thc, nh HTTP, i hi mi lin kt phi b ng sau mi khi yu
cu c phc v. Cc giao thc khc, chng hn nh FTP, cho php
nhiu yu cu c x l trong mt lin kt n.
2.2. Lp ServerSocket
Lp ServerSocket c mi th ta cn vit cc server bng Java. N
c cc constructor to cc i tng ServerSocket mi, cc phng thc
lng nghe cc lin kt trn mt cng xc nh v cc phng thc tr v mt
Socket khi lin kt c thit lp, v vy ta c th gi v nhn d liu.
Vng i ca mt server
1. Mt ServerSocket mi c to ra trn mt cng xc nh bng cch s
dng mt constructor ServerSocket.
2. ServerSocket lng nghe lin kt n trn cng bng cch s dng
phng thc accept(). Phng thc accept() phong ta cho ti khi mt
client thc hin mt lin kt, phng thc accept() tr v mt i tng
Socket biu din lin kt gia client v server.
3. Ty thuc vo kiu server, hoc phng thc getInputStream(),
getOuputStream() hoc c hai c gi nhn cc lung vo ra phc v
cho vic truyn tin vi client.
4. Server v client tng tc theo mt giao thc tha thun sn cho ti khi
ngt lin kt.
5. Server, client hoc c hai ngt lin kt
Server tr v bc hai v i lin kt tip theo.

2.3. Truyn v nhn d liu trong m hnh lp trnh Socket


Vic truyn v nhn d liu thc cht l cc thao tc c v ghi d
trn Socket. Ta c th thy iu ny qua s di y:
InputStream
Program

Socket
ObjectOuput

Hnh 5
Gi s s l mt i tng Socket. Nu chng trnh nhn d liu th
ta s ly d liu t lung nhp n t Socket:

Su tm bi: www.daihoc.com.vn

InputStream is=s.getInputStream()
phc hi trng thi i tng ta gn kt lung nhp th ly c t
Socket vi lung c i tng ObjectInputStream:
ObjectInputStream ois=new ObjectInputStream(is);
Khi i tng c phc hi li trng thi bi cu lnh:
Object obj=(Object)ois.readObject();
Nu chng trnh gi d liu th ta s ly d liu t lung xut n t
Socket:
ObjectOuput os=s.getObjectOuput();
tin hnh ghi i tng ta gn kt lung xut th ly c t
Socket vi lung xut i tng ObjectOuputStream:
ObjectOuputStream oos=new ObjectOutputStream(os);
Vic truyn i tng lc ny tr thnh mt cng vic rt n gin:
oos.writeObject(obj);
oos.flush();
2.4. V d minh ha
minh ha k thut chng ta vit mt server thc hin php nhn
hai mng s nguyn vi nhau. Client gi hai i tng, mi i tng biu
din mt mng nguyn; server nhn cc i tng ny, thc hin li gi
phng nhn hai mng s nguyn vi nhau v gi kt qu tr v cho client.
Trc tin chng ta nh ngha i tng c th s dng trong
vic truyn cc i tng.
public class ArrayObject implements java.io.Serializable{
private int[] a=null;
public ArrayObject(){
}
public void setArray(int a[]){
this.a=a;
}
public int[] getArray(){
return a;
}
}
Lp ArrayObject l lp c xy dng ng gi cc mng s
nguyn v c kh nng truyn i qua li trn mng. Cu trc lp nh sau:
trng thng tin l mt mng s nguyn a[]; phng thc setArray() thit
lp gi tr cho mng. Phng thc getArray() tr v mt mng s nguyn t
i tng ArrayObject.

Su tm bi: www.daihoc.com.vn

M hnh client/server ti thiu phi c hai moun client v server.


Trong v d ny cng vy ta s xy dng mt s moun chng trnh nh
sau:
u tin chng ta pht trin client. Client to ra hai th hin ca cc
i tng ArrayObject v ghi chng ra lung xut (thc cht l gi ti
server).
public class ArrayClient{
public static void main(String[] args)throws Exception{
ObjectOuputStream oos=null;
ObjectInputStream ois=null;
int dat1[]={3,3,3,3,3,3,3};
int dat2[]={5,5,5,5,5,5,5};
Socket s=new Socket("localhost",1234);
oos=new ObjectOuputStream(s.getObjectOuput());
ois=new ObjectInputStream(s.getInputStream());
ArrayObject a1=new ArrayObject();
a1.setArray(dat1);
ArrayObject a2=new ArrayObject();
a2.setArray(dat2);
ArrayObject res=null;
int r[]=new int[7];
oos.writeObject(a1);
oos.writeObject(a2);
oos.flush();
res=(ArrayObject)ois.readObject();
r=res.getArray();
System.out.println("The result received from server...");
System.out.println();
for(int i=0;i<r.length;i++)System.out.print(r[i]+" ");
}
}
Bc tip theo chng ta pht trin server. Server l mt chng trnh
cung cp dch v phc v cc yu cu ca client. Server nhn hai i tng
ArrayObject v nhn v hai mng t hai i tng ny v sau em nhn
chng vi nhau v gi kt qu tr li cho client.

Su tm bi: www.daihoc.com.vn

public class ArrayServer extends Thread {


private ServerSocket ss;
public static void main(String args[])throws Exception
{
new ArrayServer();
}
public ArrayServer()throws Exception{
ss=new ServerSocket(1234);
System.out.println("Server running on port "+1234);
this.start();
}
public void run(){
while(true){
try{
System.out.println("Waiting for client...");
Socket s=ss.accept();
System.out.println("Accepting
from:"+s.getInetAddress());

connection

Connect c=new Connect(s);


}
catch(Exception e){
System.out.println(e);
}
}
}
}
Trong m hnh client/server ti mt thi im server c th phc v
cc yu cu n t nhiu client, iu ny c th dn n cc vn tng
tranh. Chnh v l do ny m lp ArrayServer tha k lp Thread gii
quyt vn trn. Ngoi ra nng cao hiu sut ca chng trnh th sau
khi chp nhn lin kt t mt client no , vic x l d liu s c
dnh ring cho mt tuyn on server c th tip tc chp nhn cc yu
cu khc. Hay ni cch khc, mi mt yu cu ca client c x l trong
mt tuyn on ring bit.
class Connect extends Thread{
private Socket client=null;
private ObjectInputStream ois;

Su tm bi: www.daihoc.com.vn

private ObjectOuputStream oos;


public Connect(){
}
public Connect(Socket client){
this.client=client;
try{
ois=new ObjectInputStream(client.getInputStream());
oos=new ObjectOuputStream(client.getObjectOuput());
}
catch(Exception e){
System.err.println(e);
}
this.start();
}
public void run(){
ArrayObject x=null;
ArrayObject y=null;
int a1[]=new int[7];
int a2[]=new int[7];
int r[]=new int[7];
try{
x=(ArrayObject)ois.readObject();
y=(ArrayObject)ois.readObject();
a1=x.getArray();
a2=y.getArray();
for(int i=0;i<a1.length;i++)r[i]=a1[i]*a2[i];
ArrayObject res=new ArrayObject();
res.setArray(r);
oos.writeObject(res);
oos.flush();
ois.close();
client.close();
}
catch(Exception e){
}

Su tm bi: www.daihoc.com.vn

}
}
3. Truyn cc i tng thng qua giao thc UDP
Mt giao thc gn vi giao thc TCP l giao thc UDP. Java h tr
cho kiu ng dng truyn tin phi lin kt trn giao thc UDP thng qua lp
DatagramSocket v DatagramPacket. Liu chng ta c th vit c cc
chng trnh nhp v xut i tng bng truyn tin datagram? Thc hin
iu ny khng th tin hnh trc tip nh vi lung Socket. Vn l
DatagramSocket khng c gn vi bt k lung no; m n s dng mt
tham s mng byte gi v nhn d liu.
Object

Object

ObjectOuputStream

ObjectInputStream

ByteArrayObjectOuput

ByteArrayInputStream

DatagramPacket

DatagramPacket
Network

Hnh 6
C th thy rng xy dng mt gi tin datagram, i tng phi
c chuyn thnh mt mng byte. Vic chuyn i ny rt kh thc
hin nu bn thn i tng c lin quan n mt s i tng phc tp
trong th i tng.
Hnh 6 minh ha dng lun chuyn d liu khi truyn mt i tng
thng qua mt datagram. Di y l by bc ta cn thc hin ci t
m hnh truyn d liu cho giao thc UDP
Bc 1. Chun b: To i tng cn truyn i, gi s i tng ny
l obj, lm cho n kh tun t bng cch thc thi giao tip
Serializable.
Bc 2. To mt lung ByteArrayObjectOuput v t tn cho n l
baos.
Bc 3. Xy dng i tng ObjectOuputStream v t tn cho n l
oos. Tham s cho cu t ObjectOuputStream l baos
Bc 4. Ghi i tng obj vo lung baos bng cch s dng
phng thc writeObject() ca oos.
Bc 5. Tm kim vng m d liu mng byte t bng cch s dng
phng thc toByteAray().

Su tm bi: www.daihoc.com.vn

Bc 6. Xy dng i tng DatagramPacket v t tn l dp vi d


liu u vo l vng m d liu tm c bc 5.
Bc 7. Gi dp thng qua DatagramSocket bng cch gi phng
thc send() ca n.
V d minh ha chi tit qu trnh gi mt i tng
InetAddress ia=InetAddress.getByName("localhost");
Student st=new Student("Peter",7,8,9);
DatagramSocket ds=new DatagramSocket();
ByteArrayObjectOuput baos=new ByteArrayObjectOuput(5000);
ObjectOuputStream oos=new ObjectOuputStream(new
BufferedObjectOuput(baos));
oos.flush();
oos.writeObject(st);
oos.flush();
byte[] b=baos.toByteAray();
DatagramPacket dp=new DatagramPacket(b,b.length,ia,1234);
ds.send(dp);
oos.close();
nhn mt i tng ta cng tin hnh cc bc nh trn nhng theo
th t ngc li, thay th lung ObjectOuputStream bng
ObjectInputStream v ByteArrayObjectOuput bng ByteArrayInputStream.
V d di y minh ha chi tit qu trnh nhn mt i tng
DatagramSocket ds=new DatagramSocket(1234);
while(true){
byte b[]=new byte[5000];
DatagramPacket dp=new DatagramPacket(b,b.length);
ds.receive(dp);
ByteArrayInputStream bais=new
ByteArrayInputStream(new BufferedInputStream(b));
ObjectInputStream ois =new ObjectInputStream(bais);
Student st=(Student)ois.readObject();
st.computeAverage();
st.print();
ois.close();
bais.close();
}

Su tm bi: www.daihoc.com.vn

4. Kt lun
Qua bi bo ny ti gii thiu tng quan v tun t ha i tng.
Thng qua cc v d chng ta thy khng qu kh lm vic vi tun t
ha i tng v iu quan trng hn l chng ta bit cch truyn i
cc i tng c cu trc phc tp thng qua cc Socket.
Ngoi ra, bi bo cng cp ti cch truyn i tng bng
cch s dng cc gi tin datagram. Nh nhng u im ca tin ch tun t
ha i tng, ti minh ha mt cch truyn cc i tng bng cch
s dng cc gi tin datagram. Nh chng ta thy, mc d trong giao
thc ny khng h tr x l theo lung d liu nhng ti lung ha cc
i tng a cc i tng vo cc mng byte.
S la chn gia vic s dng RMI hay gii php Socket kt hp vi
tun t ha ph thuc vo tng d n v cc yu cu ca n. S la chn
gii php no chnh l s tha hip gia cc c trng ca mi gii php:
nu i vi RMI th l tnh n gin khi trin khai, ngc li vi Socket
kt hp vi tun t ha i tng th li l u th v mt hiu nng. Nu
vn hiu nng c tm quan trng th gii php lp trnh Socket kt hp
tun t ha i tng l gii php tt hn so vi RMI.

Su tm bi: www.daihoc.com.vn

TI LIU THAM KHO

[1] Elliotte Rusty Harold, Java Network Programming


[2] Nguyn Phng Lan- Hong c Hi, Java lp trnh mng, Nh xut bn Gio
dc
[3] Darrel Ince & Adam Freemat, Programming the Internet with Java, AddisonWesley
[4] Mary Campione&Kathy Walrath&Alison Huml, Java Tutorial, Third Edition: A
Short Course on the Basics, Addison Wesley
[5] The Complete Java 2Reference
[6] Nguyn Thc Hi, Mng my tnh v cc h thng m, Nh xut bn Gio dc
[7] on Vn Ban, Lp trnh hng i tng vi Java, Nh xut bn Khoa hc
v K thut

Ti liu tham kho


[1] Douglas E.Comer, David L.Stevens, Client-Server Programming And
Applications. In book: Internetworking with TCP/IPVolume III, Pearson
Education, Singapore, 2004.
[2] Herbert Schildt, JavaTM 2: The Complete Reference Fifth Edition, Tata
McGraw-Hill Publishing Company Limited, India, 2002.
[3]

Elliote Rusty Harold, JavaTM Network Programming, Third Edition,


Oreilly, 2005.

[4]

Qusay
H.
Mahmoud,
Advanced
http://java.sun.com, December 2001

[5]

Shengxi Zhou, Transport Java objects over the network with datagram
packets, http://www.javaworld.com, 2006

Socket

Programming,

90

Su tm bi: www.daihoc.com.vn

You might also like