You are on page 1of 96

Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng

CHNG 1
Tng quan v lp trnh truyn thng
Mc ch
Chng ny nhm cung cp cho cc bn mt ci nhn tng quan v cc vn c
lin quan trong lp trnh truyn thng
Yu cu
Sau khi hon tt chng ny, bn c th:
Gii thch c C ch giao tip lin qu trnh (Inter-Process
Communication ) l g.
M t chc nng, nhim v ca cc tng trong m hnh OSI.
nh ngha v giao thc v bin lun c s cn thit ca giao thc trong
truyn thng .
M t v b giao thc TCP/IP.
nh ngha m hnh Client Server.
Phn bit c 2 ch giao tip: Nghn v Khng nghn.
Phn bit c cc kiu kin trc chng trnh.

Bin Son: Ng B Hng - Nguyn Cng Huy
1
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.1. C ch giao tip lin qu trnh l g ?
Truyn thng l mt khi nim dng ch s giao tip, trao i thng tin gia hai
hay nhiu thc th trong mt h thng no . Nu h thng m chng ta xem xt l x hi
loi ngi, th truyn thng c th l qu trnh trao i thng tin gia ngi vi ngi
trong cuc sng thng qua cc phng tin truyn ti thng tin khc nhau nh khng kh
(trong tr chuyn trc tip), h thng in thoi, sch, bo, cc phng tin nghe nhn,
mng my tnh...
Nu h thng m chng ta xem xt l mt h thng my tnh hay mt h thng
mng th truyn thng c th c phn thnh hai mc:
Mc phn cng: l s giao tip, trao i thng tin gia cc b phn vt l
cu thnh nn h thng my tnh nh CPU, b nh, thit b vo ra, card giao
tip mng, nh vo cc phng tin truyn thng nh h thng BUS ni, h
thng BUS vo ra hay cc dy cp mng . . .
Mc phn mm: l s giao tip, trao i thng tin gia cc thnh phn bn
trong ca mt chng trnh hay gia cc chng trnh vi nhau thng qua
cc c ch truyn thng c h tr bi cc h iu hnh, h iu hnh
mng.
Trong cc h thng my tnh n nhim (monotasking) c in, v d MS-DOS, ti
mt thi im ch cho php tn ti mt qu trnh. Vic giao tip, trao i thng tin ch din
ra trong phm vi ca mt chng trnh. l s giao tip gia cc th tc di hnh thc
chia s cc bin ton cc, hay bng cch truyn cc tham s khi gi hm, th tc hay bng
gi tr tr v ca mt hm . . . Ngc li, trong cc h thng a nhim (multitasking) c
nhiu qu trnh tn ti song song nhau, mi qu trnh c thc hin trong mt khng gian
a ch (Address space) ring bit. Vic giao tip gia cc qu trnh mun thc hin c
i hi phi c nhng tin ch h tr bi h iu hnh, h iu hnh mng. Cc tin ch
ny thng c gi vi ci tn l C ch giao tip lin qu trnh (IPC - Inter-Process
Communication).
1.2. Phn loi c ch giao tip lin qu trnh
Cc c ch giao tip lin qu trnh c h tr bi cc h iu hnh a nhim, h
iu hnh mng c chia ra lm hai loi:
Loi 1: C ch giao tip lin qu trnh h tr giao tip gia cc qu trnh trn
cng mt my tnh. (Hnh H1.1)





Hnh 1.1 - C ch giao tip lin qu trnh loi 1

Bin Son: Ng B Hng - Nguyn Cng Huy
2
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng

Loi 2: C ch giao tip lin qu trnh h tr giao tip gia cc qu trnh nm
trn cc my tnh khc nhau (Hnh H1.2).

Hnh 1.2 - C ch giao tip lin qu trnh loi 2
Trong c ch giao tip lin qu trnh trn cng mt my, d liu trao i qua li
gia cc qu trnh phi i xuyn qua ht nhn (kernel) ca h iu hnh. c th l mt
vng nh dng chung cho cc qu trnh c qui nh trc bi h iu hnh, hay mt
tp tin trn a c qun l bi h iu hnh trong mt qu trnh s ghi d liu vo,
qu trnh khc c d liu ra, . . .
Trong c ch giao tip lin qu trnh trn cc my tnh khc nhau, d liu trao i
gia cc qu trnh khng nhng phi i qua ht nhn nh c ch giao tip lin qu trnh
trn mt my tnh m hn th cc ht nhn ca cc my c lin quan phi hiu nhau. Ni
cch khc cc ht nhn phi tho thun trc vi nhau v cc qui tc trao i thng tin
gia chng. Thng thng ta gi cc qui tc ny l cc giao thc (Protocol).
1.3. M hnh tham kho OSI
d dng cho vic ni kt v trao i thng tin gia cc my tnh vi nhau, vo
nm 1983, T chc tiu chun th gii ISO pht trin mt m hnh cho php hai my
tnh c th gi v nhn d liu cho nhau. M hnh ny da trn tip cn phn tng (lp),
vi mi tng m nhim mt s cc chc nng c bn no v c gi l m hnh OSI.
hai my tnh c th trao i thng tin c vi nhau cn c rt nhiu vn lin
quan. V d nh cn c Card mng, dy cp mng, in th tn hiu trn cp mng, cch
thc ng gi d liu, iu khin li ng truyn ... Bng cch phn chia cc chc nng
ny vo nhng tng ring bit nhau, vic vit cc phn mm thc hin chng tr nn d
dng hn. M hnh OSI gip ng nht cc h thng my tnh khc bit nhau khi chng
trao i thng tin. M hnh ny gm c 7 tng:
7. Tng ng dng (Application Layer)
y l tng trn cng, cung cp cc ng dng truy xut n cc dch v mng.
N bao gm cc ng dng ca ngi dng, v d nh cc Web Browser
(Netscape Navigator, Internet Explorer ), cc Mail User Agent (Outlook
Express, Netscape Messenger, ...) hay cc chng trnh lm server cung cp
cc dch v mng nh cc Web Server (Netscape Enterprise, Internet
Information Service, Apache, ...), Cc FTP Server, cc Mail server (Send
mail, MDeamon). Ngi dng mng giao tip trc tip vi tng ny.
6. Tng trnh by (Presentation Layer)
Bin Son: Ng B Hng - Nguyn Cng Huy
3
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
Tng ny m bo cc my tnh c kiu nh dng d liu khc nhau vn c
th trao i thng tin cho nhau. Thng thng cc my tnh s thng nht vi
nhau v mt kiu nh dng d liu trung gian trao i thng tin gia cc
my tnh. Mt d liu cn gi i s c tng trnh by chuyn sang nh
dng trung gian trc khi n c truyn ln mng. Ngc li, khi nhn d
liu t mng, tng trnh by s chuyn d liu sang nh dng ring ca n.
5. Tng giao dch (Session Layer)
Tng ny cho php cc ng dng thit lp, s dng v xa cc knh giao tip
gia chng (c gi l giao dch). N cung cp c ch cho vic nhn bit tn
v cc chc nng v bo mt thng tin khi truyn qua mng.
4. Tng vn chuyn (Transport Layer)
Tng ny m bo truyn ti d liu gia cc qu trnh. D liu gi i c
m bo khng c li, theo ng trnh t, khng b mt mt, trng lp. i
vi cc gi tin c kch thc ln, tng ny s phn chia chng thnh cc phn
nh trc khi gi i, cng nh tp hp li chng khi nhn c.
3. Tng mng (Network Layer)
Tng ny m bo cc gi d liu (Packet) c th truyn t my tnh ny n
my tnh kia cho d khng c ng truyn vt l trc tip gia chng. N
nhn nhim v tm ng i cho d liu n cc ch khc nhau trong h
thng mng.
2. Tng lin kt d liu (Data-Link Layer)
Tng ny m bo truyn ti cc khung d liu (Frame) gia hai my tnh c
ng truyn vt l ni trc tip vi nhau. N ci t c ch pht hin v x
l li d liu nhn.
1. Tng vt k (Physical Layer)
iu khin vic truyn ti tht s cc bit trn ng truyn vt l. N nh
ngha cc tn hiu in, trng thi ng truyn, phng php m ha d liu,
cc loi u ni c s dng.
V nguyn tc, tng n ca mt h thng ch giao tip, trao i thng tin vi tng n
ca h thng khc. Mi tng s c cc n v truyn d liu ring:
Tng vt l: bit
Tng lin kt d liu: Frame
Tng mng: Packet
Tng vn chuyn: Segment
Trong thc t, d liu c gi i t tng trn xung tng di cho n tng thp
nht ca my tnh gi. , d liu s c truyn i trn ng truyn vt l. Mi khi
Bin Son: Ng B Hng - Nguyn Cng Huy
4
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
d liu c truyn xung tng pha di th n b "gi" li trong n v d liu ca tng
di. Ti bn nhn, d liu s c truyn ngc ln cc tng cao dn. Mi ln qua mt
tng, n v d liu tng ng s c tho ra.
n v d liu ca mi tng s c mt tiu (header) ring, c m t trong
hnh 1.3.
Hnh 1.3 - X l d liu qua cc tng OSI ch l m hnh tham kho, mi
nh sn xut khi pht minh ra h thng
mng ca mnh s thc hin cc chc nng
tng tng theo nhng cch thc ring.
Cc cch thc ny thng c m t di
dng cc chun mng hay cc giao thc
mng. Nh vy dn n trng hp cng
mt chc nng nhng hai h thng mng
khc nhau s khng tng tc c vi
nhau. Hnh 1.4 s so snh kin trc ca cc
h iu hnh mng thng dng vi m
hnh OSI.


Hnh 1.4 - Kin trc ca mt s h iu hnh mng thng dng
thc hin cc chc nng tng 3 v tng 4 trong m hnh OSI, mi h thng
mng s c cc protocol ring:
UNIX: Tng 3 dng giao thc IP, tng 4 giao thc TCP/UDP
Netware: Tng 3 dng giao thc IPX, tng 4 giao thc SPX
Windows NT: ch dng 1 giao thc NETBEUI
Nu ch dng li y th cc my tnh UNIX, Netware, NT s khng trao i
thng tin c vi nhau. Vi s ln mnh ca mng Internet, cc my tnh ci t cc h
iu hnh khc nhau i hi phi giao tip c vi nhau, tc phi s dng chung mt
giao thc. chnh l b giao thc TCP/IP, giao thc ca mng Internet.


Bin Son: Ng B Hng - Nguyn Cng Huy
5
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.4. Mng TCP/IP
y l kin trc ca mng Internet, ch gm 5 tng nh hnh v di y:

Hnh 1.5 - Kin trc mng TCP/IP
Ngi ta cn gi m hnh ny l m hnh OSI n gin. Cc giao thc c s
dng trn mi tng c qui nh nh sau:

Hnh 1.6 B giao thc TCP/IP
Tng 3 s dng giao thc IP, tng 4 c th s dng giao thc TCP ch c ni
kt hoc UPD ch khng ni kt.
Tng 5 l tng ca cc ng dng. Mi loi ng dng phi nh ngha mt giao thc
ring cc thnh phn trong ng dng trao i thng tin qua li vi nhau. Mt s ng
dng ph bin tr thnh chun ca mng Internet nh:
ng dng Web: S dng giao thc HTTP ti cc trang web t Web Server
v Web Browser.
ng dng th in t: S dng giao thc SMTP chuyn tip mail gi i
n Mail Server ca ngi nhn v dng giao thc POP3 hoc IMAP nhn
mail v cho ngi c.
ng dng truyn ti tp tin: S dng giao thc FTP ti (download) cc tp
tin t cc FTP Server xa v my ngi dng hay ngc li.
. . . . .
Bin Son: Ng B Hng - Nguyn Cng Huy
6
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
Thng thng cc tng 1,2,3 v 4 c pht trin bi cc nh sn xut h iu
hnh, nh sn xut cc thit b phn cng mng. Chng m nhn nhim v truyn ti
thng tin cho cc qu trnh trn tng ng dng. Chng ci t cc c ch giao tip lin qu
trnh cc qu trnh trn tng ng dng c th truy xut n dch v truyn ti thng tin
do chng cung cp. Trong khi , tng 5 l ni cc nh sn xut phn mm khai thc
to ra cc ng dng gii quyt cc vn khc nhau ca cuc sng. N c xem nh l
tng x l thng tin.
1.5. Dch v mng
Dch v mng (Net service) l mt chng trnh ng dng thc hin mt tc v no
trn h thng mng.
V d:
Dch v in trn mng cho php nhiu my tnh cng s dng mt my in.
Dch v tp tin trn mng cho php chia s chng trnh, d liu gia cc my
tnh.
Dch v web cung cp cc trang web cho cc my tnh khc nhau
C nhiu m hnh khc nhau xy dng cc dch v mng. Mt trong nhng m
hnh c s dng kh ph bin l m hnh Client-Server. y l mt m hnh c bn
xy dng cc dch v mng.
1.6. M hnh Client Server
1.6.1. Gii thiu
Trong m hnh ny, chng trnh ng dng c chia thnh 2 thnh phn:
Qu trnh chuyn cung cp mt s phc v no , chng hn: phc v tp
tin, phc v my in, phc v th in t, phc v Web... Cc qu trnh ny
c gi l cc trnh phc v hay Server.
Mt s qu trnh khc c yu cu s dng cc dch v do cc server cung cp
c gi l cc qu trnh khch hng hay Client.
Vic giao tip gia client v server c
thc hin di hnh thc trao i cc thng
ip (Message). c phc v, client s gi
mt thng ip yu cu (Request Message) m
t v cng vic mun server thc hin. Khi
nhn c thng ip yu cu, server tin hnh
phn tch xc nh cng vic cn phi thc
thi. Nu vic thc hin yu cu ny c sinh ra
kt qu tr v, server s gi n cho client trong
mt thng ip tr li (Reply Message). Dng
thc (format) v ngha ca cc thng ip
Bin Son: Ng B Hng - Nguyn Cng Huy
7
Hnh 1.7 M hnh Client-Server
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
trao i gia client v server c qui nh r bi giao thc (protocol) ca ng dng.

1.6.2. V d v dch v Web.
Dch v web c t chc theo m hnh Client -Server, trong :
Web server sn sng cung cp cc trang web ang c lu tr trn a cng
cc b ca mnh.
Web Client, cn gi l cc Browser, c nhu cu nhn cc trang web t cc
Web Server
HTTP l giao thc trao i thng tin qua li gia Web client v Web Server.
Thng ip yu cu l mt chui c dng sau:
Command URL HTTP/Ver \n\n
Thng ip tr li c dng sau:
<HEADER>\n\n
<CONTENT>
Gi s Client cn nhn trang Web a ch http://www.cit.ctu.edu.vn/, n s
gi n Web Server c tn www.cit.ctu.edu.vn thng ip yu cu sau:
GET www.cit.ctu.edu.vn HTTP/1.1\n\n
Server s gi v ni dung sau:
HTTP/1.0 200 OK
Date: Mon, 24 Nov 2003 02:43:46 GMT
Server: Apache/1.3.23 (Unix) (Red-Hat/Linux) mod_ssl/2.8.7
OpenSSL/0.9.6b DAV/1
.0.3 PHP/4.1.2 mod_perl/1.26
Last-Modified: Tue, 01 Jul 2003 08:08:52 GMT
ETag: "17f5d-2abb-3f014194"
Accept-Ranges: bytes
Content-Length: 10939
Content-Type: text/html
X-Cache: HIT from proxy.cit.ctu.edu.vn
Proxy-Connection: close
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<HTML>
<HEAD>
<LINK href="favicon.ico" rel="SHORTCUT ICON">
...............................
Bin Son: Ng B Hng - Nguyn Cng Huy
8
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng

1.6.3. Cc ch giao tip
Qu trnh giao tip gia client v server c th din ra theo hai ch l nghn
(blocked) hay khng nghn (Non blocked).
1.6.3.1. Ch nghn :
Hnh 1.8 - Ch giao tip nghn
Trong ch ny, khi qu trnh
client hay server pht ra lnh gi d liu,
(thng thng bng lnh send) , s thc
thi ca n s b tm dng cho n khi
qu trnh nhn pht ra lnh nhn s d
liu (thng l lnh receive).
Tng t cho trng hp nhn d
liu, nu qu trnh no , client hay
server, pht ra lnh nhn d liu, m
thi im cha c d liu gi n, s
thc thi ca n cng tm dng cho n
khi c d liu gi n.
1.6.3.2. Ch khng nghn:
Trong ch ny, khi qu trnh client hay server pht ra lnh gi d liu, s thc
thi ca n vn c tip tc m khng
quan tm n vic c qu trnh no pht ra
lnh nhn s d liu hay khng.
Hnh 1.9 - Ch giao tip khng nghn
Tng t cho trng hp nhn d
liu, khi qu trnh pht ra lnh nhn d
liu, n s nhn c s lng d liu
hin c (bng 0 nu cha c qu trnh no
gi d liu n). S thc thi ca qu trnh
vn c tip tc.
Trong thc t cn ch n ch
giao tip nghn khi lp trnh, v n c th
dn n trng hp chng trnh b "treo"
do s ln gi v nhn gi liu khng bng
nhau gia hai bn giao tip.
1.7. Cc kiu kin trc chng trnh
mc lun l, cc chc nng m mt chng trnh ng dng thc hin c th xp
thnh mt trong 3 loi sau:
1. Cc chc nng thc hin vic tng tc vi ngi dng nh to cc giao din
nhp liu hay in cc bo biu, thng bo ra mn hnh. Cc chc nng ny
c gi chung l Dch v giao din ngi dng (User Interface Service).
Bin Son: Ng B Hng - Nguyn Cng Huy
9
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
2. Cc chc nng tnh ton cc d liu, x l thng tin theo nhng qui lut
(rule), gii thut c qui nh bi vn m ng dng gii quyt. Cc chc
nng ny c gi chung l Dch v nghip v (Business Rule Service).
3. Trong qu trnh tnh ton, chng trnh ng dng cn truy vn n cc thng
tin c c lu trn a cng hay trong cc c s d liu. Cng nh cn
thit phi lu li cc kt qu tnh ton c s dng v sau. Cc chc
nng ny c gi chung l Dch v lu tr (Data Storage Service).
mc vt l, cc chc nng ny c th c ci t vo mt hay nhiu tp tin thc
thi hnh thnh cc kiu kin trc chng trnh khc nhau. Cho n thi im hin nay,
ngi ta chia kin trc ca chng trnh thnh 3 loi c trnh by tip theo sau.
1.7.1. Kin trc n tng (Single-tier Architecture)
Trong kiu kin trc ny, c 3 thnh phn ca chng trnh ng dng (User
Interface, Business Rule, Data Storage) u c tch hp vo mt tp tin thc thi.
V d: BKAV, D2, Winword, . . .
Cc ng dng kiu ny ch c thc thi trn mt my tnh.
User Interface
Business Rule
Data Storage
Hnh 1.10 - Kin trc chng trnh n tng
u im:
D dng trong thit k ci t ng dng kiu ny.
Nhc im:
Bi v c 3 thnh phn c ci vo mt tp tin thc thi, nn vic sa li hay
nng cp chng trnh th rt kh khn. Ton b chng trnh phi bin dch
li cho d ch sa i mt li rt nh trong mt thnh phn no ( User
Interface chng hn).
Vic bo tr, nng cp n bn mi l mt cng vic cc k nng n v ta phi
thc hin vic ci t trn tt c cc my tnh.
Trong kiu ny, mi my tnh duy tr mt c s d liu ring cho nn rt kh
trong vic trao i, tng hp d liu.
My tnh phi mnh c th thc hin ng thi c 3 loi dch v.
1.7.2. Kin trc hai tng (Two - Tier Architecture)
Kin trc ny cn c bit n vi tn kin trc Client-Server. Kin trc ny gm
2 chng trnh thc thi: chng trnh Client v chng trnh Server. C hai chng trnh
c th c thc thi trn cng mt my tnh hay trn hai my tnh khc nhau.
Bin Son: Ng B Hng - Nguyn Cng Huy
10
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
Client v Server trao i thng tin vi nhau di dng cc thng ip (Message) .
Thng ip gi t Client sang Server gi l cc thng ip yu cu (Request Message) m
t cng vic m phn Client mun Server thc hin.





Hnh 1.11 - Kin trc chng trnh Client-Server
Mi khi Server nhn c mt thng ip yu cu, Server s phn tch yu cu,
thc thi cng vic theo yu cu v gi kt qu v client (nu c) trong mt thng ip tr
li (Reply Message). Khi vn hnh, mt my tnh lm Server phc v cho nhiu my tnh
Client.
Mi mt ng dng Client-Server phi nh ngha mt Giao thc (Protocol) ring
cho s trao i thng tin, phi hp cng vic gia Client v Server. Protocol qui nh mt
s vn c bn sau:
Khun dng loi thng ip.
S lng v ngha ca tng loi thng ip.
Cch thc bt tay, ng b ha tin trnh truyn nhn gia Client v Server.
. . . .
Thng thng phn client m nhn cc chc nng v User Interface, nh to cc
form nhp liu, cc thng bo, cc bo biu giao tip vi ngi dng.
Phn Server m nhn cc chc nng v Data Storage. Nh d dng trong vic
bo tr, chia s tng hp d liu trong ton b cng ty hoc t chc.
Cc chc nng v Business Rule c th c ci t phn client hoc phn
server to ra hai loi kin trc Client - Server l:
o Fat Client
o Fat Server.
1.7.2.1. Loi Fat Client
Trong loi ny Business Rule c ci t bn pha Client. Phn Server ch yu
thc hin chc nng v truy vn v lu tr thng tin.




Hnh 1.12 - Kin trc chng trnh Client Server theo kiu Fat C
u im
lient

Bin Son: Ng B Hng - Nguyn Cng Huy
11
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
To ra t giao thng trn mng nh d liu tm thi trong qu trnh tnh ton
c lu ti Client.
Nh
iness Rule c ci t trn pha Client, i hi my tnh thc thi phn
Client phi mnh, dn n tn km trong chi ph u t phn cng cho cc

1.
c chc nng v Business Rule c t phn Server.
Phn C hc nng nh ca Business Rule v kim tra tnh hp l
ca d


u Fat Server
u i
usiness Rule c t phn Server, cc my tnh Client khng cn phi
c cu hnh mnh.
i phn Server.
Nh
nhiu thng ip trao i gia Client v Server lm tng giao thng
trn mng.
le v Data Storage lm gim hiu nng ca chng trnh.
1.7.3.
istributed Application). Thng
thn h thnh 3 phn ring bit tng
ng ch
c im
V Bus
cng ty x nghip.
Phi ci li tt c cc my tnh Client khi nng cp chng trnh.
7.2.2. Loi Fat Server
Trong loi ny, phn ln c
lient ch thc hin mt s c
liu nhp bi ngi dng.


Hnh 1.13 - Kin trc chng trnh Client Server theo ki
m
V B
Vic nng cp chng trnh khi Business Rule thay i tr nn nh nhng hn
v ch phi ci t l
c im
To ra
Tng ti trn my Server v n phi ng thi thc hin cc chc nng ca
Business Ru
Kin trc a tng (N-Tier Architecture)
y l kin trc cho cc ng dng phn tn (D
g l kin trc 3 tng. Chng trnh ng dng c tc
o 3 chc nng User Interface, Business Rule v Data Storage. V cc chc nng
thuc v Business Rule c tch thnh mt phn ring, n c th c thc thi trn mt
my tnh Server ring gii quyt c hu ht cc nhc im mc phi ca kin trc n
tng v kin trc hai tng ni trn.



Bin Son: Ng B Hng - Nguyn Cng Huy
12
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng



Hnh 1.12 - Kin trc chng trnh a tng
Kin trc ny p ng tt vi nhng thay i v qui lut x l d liu ca vn
m ng dng gii quyt. Vic thay i ch nh hng trn tng Business Rule m khng
nh hng n hai tng cn li.
hng thng, ngi ta gi tn cc thnh phn trn l:
Client Appl
1.8.1. Bi t
Bi t
vit mt bo co khng qu 10 trang v giao thc HTTP.
Bi tp 1.2: Chat Protocol
trn mng Internet. Vit mt bng bo co khng qua 10
trang trnh by 2 ni dung sau:
ch v Chat.

tr bi Chat Server.
ot ng ca server v client (gii thut).
1.8

Bi tp 1 ol
Tm c v

T
ication Server Database Server
1.8. Bi tp
p bt buc

p 1.1: Protocol HTTP
Tm c v

Tm hiu v dch v Chat
Mt bng m t cc chc nng thng c h tr trong mt d
Xy dng Chat Protocol ring ca bn trong m t:
o Cc chc nng h
o Khun dng (Format) v cc loi thng ip (Message) h tr bi
Protocol.
o S trng thi h
o Minh ha cc kch bn khc nhau cho tng chc nng ca dch v.
.2. Bi tp gi
.3: POP3 Protoc
vit mt bo co khng qu 10 trang v giao thc POP3.
Bin Son: Ng B Hng - Nguyn Cng Huy
13
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
CHNG 2
S lc v ngn ng Java
Mc ch
Chng ny nhm gii thiu s lc v ngn ng java cho cc sinh vin c kin
thc cn bn v Lp trnh hng i tng vi C++. Chng ny s khng cp n tt
c cc vn c trong Java m ch gii thiu nhng vn c bn nht v ngn ng Java,
cc hc vin c th c hiu cc chng trnh minh ha v lm c cc bi tp ng
dung cc chng sau.
Yu cu
Sau khi hon tt chng ny, bn c th:
Trnh by c nhng vn tng quan v ngn ng Java nh:
o c im v kh nng ca ngn ng Java.
o Khi nim my o ca Java (JVM - Java Virtual Machine ).
o Vai tr ca b pht trin ng dng JDK (Java Developpment Kit).
o Phn bit c hai kiu chng trnh Applet v Application ca Java.
o Cc kiu d liu v cc php ton c h tr bi Java.
Bin son, bin dch v thc thi thnh cng chng trnh HelloWorld .
S dng thnh tho cc cu trc iu khin di Java nh: if, switch, while,
do-while, for.
Bit cch nhn i s ca chng trnh Java.
Bit i chui thnh s trong Java.
S dng c c ch ngoi l ca Java.
Bit nh ngha lp mi, s dng mt lp c ca Java.
Gii thch c c ch vo ra vi Stream trong Java.
S dng thnh tho cc phng thc ca hai lp InputStream v
OutputStream.
C th nhp / xut chui trn mt InputStream / OutputStream.
Gii thch c c ch lung (Thread).
Ci t c cc lung trong Java.









Bin Son: Ng B Hng - Nguyn Cng Huy
14
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.1. Gii thiu v ngn ng Java
1.1.1. Lch s pht trin
Nm 1990, Sun MicroSystems thc hin d n Green nhm pht trin phn mm
trong cc thit b dn dng. James Gosling, chuyn gia lp trnh to ra mt ngn ng
lp trnh mi c tn l Oak. Ngn ng ny c c php gn ging nh C++ nhng b qua
cc tnh nng nguy him ca C++ nh truy cp trc tip ti nguyn h thng, con tr, nh
ngha chng cc tc t
Khi ngn ng Oak trng thnh, WWW cng ang vo thi k pht trin mnh m,
Sun cho rng y l mt ngn ng thch hp cho Internet. Nm 1995, Oak i tn thnh
Java v sau n 1996 Java c xem nh mt chun cng nghip cho Internet.
1.1.2. Kh nng ca ngn ng Java
L mt ngn ng bc cao nh C, C++, Perl, SmallTalk,.. cho nn c th c
dng to ra cc ng dng gii quyt cc vn v s, x l vn bn, to
ra tr chi, v nhiu th khc.
C cc mi trng lp trnh ha nh Visual Java, Symantec Cafe,
Jbuilder, Jcreator, ...
C kh nng truy cp d liu t xa thng qua cu ni JDBC (Java DataBase
Connectivity)
H tr cc lp hu ch, tin li trong lp trnh cc ng dng mng (Socket)
cng nh truy xut Web.
H tr lp trnh phn tn (Remote Method Invocation ) cho php mt ng
dng c th c x l phn tn trn cc my tnh khc nhau.
V lun c b sung cc tnh nng cao cp khc trong cc phin bn sau.
1.1.2. Nhng c im ca ngn ng Java
Ngn ng hon ton hng i tng.
Ngn ng a nn cho php mt chng trnh c th thc thi trn cc h iu
hnh khc nhau (MS Windows, UNIX, Linux) m khng phi bin dch li
chng trnh. Phng chm ca java l "Vit mt ln , Chy trn nhiu
nn" (Write Once, Run Anywhere).
Ngn ng a lung, cho php trong mt chng trnh c th c nhiu lung
iu khin c thc thi song song nhau, rt hu ch cho cc x l song song.
Ngn ng phn tn, cho php cc i tng ca mt ng dng c phn b
v thc thi trn cc my tnh khc nhau.
Ngn ng ng, cho php m lnh ca mt chng trnh c ti t mt my
tnh v my ca ngi yu cu thc thi chng trnh.
Ngn ng an ton, tt c cc thao tc truy xut vo cc thit b vo ra u thc
hin trn my o nh hn ch cc thao tc nguy him cho my tnh tht.
Ngn ng n gin, d hc, kin trc chng trnh n gin, trong sng.
1.1.3. My o Java (JMV - Java Virtual Machine)
m bo tnh a nn, Java s dng c ch My o ca Java. ByteCode l
ngn ng my ca My o Java tng t nh cc lnh nh phn ca cc my tnh thc.
Bin Son: Ng B Hng - Nguyn Cng Huy
15
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
Mt chng trnh sau khi c vit bng ngn ng Java (c phn m rng l .java) phi
c bin dch thnh tp tin thc thi c trn my o Java (c phn m rng l .class).
Tp tin thc thi ny cha cc ch th di dng m Bytecode m my o Java hiu c
phi lm g.
Khi thc hin mt chng trnh, my o Java ln lt thng dch cc ch th di
dng Bytecode thnh cc ch th dng nh phn ca my tnh thc v thc thi thc s
chng trn my tnh thc.
My o thc t l mt chng trnh thng dch. V th cc h iu hnh khc
nhau s c cc my o khc nhau. thc thi mt ng dng ca Java trn mt h iu
hnh c th, cn phi ci t my o tng ng cho h iu hnh .
1.1.4. Hai kiu ng dng di ngn ng java
Khi bt u thit k mt ng dng di ngn ng Java, bn phi chn kiu cho n
l Application hay Applet.
Applet: L mt chng trnh ng dng c nhng vo cc trang web. M
ca chng trnh c ti v my ngi dng t Web server khi ngi dng
truy xut n trang web cha n.
Application: L mt chng trnh ng dng c thc thi trc tip trn cc
my o ca Java.
1.1.5. B pht trin ng dng Java (JDK- Java Development Kit)
JDK l mt b cng c cho php ngi lp trnh pht trin v trin khai cc ng
dng bng ngn ng java c cung cp min ph bi cng ty JavaSoft (hoc Sun). C cc
b Jdk cho cc h iu hnh khc nhau. Cc n bn ca JDK khng ngng c pht
hnh, cc bn c th ti v t a ch http://java.sun.com hoc http://www.javasoft.com
B cng c ny gm cc chng trnh thc thi ng ch sau:
javac: Chng trnh bin dch cc chng trnh ngun vit bng ngn ng
java ra cc tp tin thc thi c trn my o Java.
java: y l chng trnh lm my o ca Java, thng dch m Bytecode ca
cc chng trnh kiu application thnh m thc thi ca my thc.
appletviewer: B thng dch, thc thi cc chng trnh kiu applet.
javadoc: To ti liu v ch thch chng trnh ngun mt cch t ng.
jdb: Trnh g ri.
rmic: To Stub cho ng dng kiu RMI.
rmiregistry: Phc v danh b (Name Server) trong h thng RMI
1.1.6. Kiu d liu c bn di Java
Kiu s
Tn kiu Kch thc
byte 1 byte
short 2 bytes
int 4 bytes
long 8 bytes
float 4 bytes
double 8 bytes
Bin Son: Ng B Hng - Nguyn Cng Huy
16
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
Kiu k t char
Java dng 2 bytes cho kiu k t, theo chun m UNICODE ( 127 k t u
tng thch vi m ASCII). Do , ta s dng tng t nh bng m ASCII.
Kiu chui k t String
Thc cht y l mt lp nm trong th vin chun ca Java (Core API),
java.lang.String
Kiu lun l boolean
Nhn 2 gi tr l : true v false.
Kiu mng
o Khai bo:
int[] a ; float[] yt; String[] names;
hoc: int a[]; float yt[]; String names[];int maTran[][]; float
bangDiem[][];
o Khi to:
a = new int[3]; yt = new float[10]; names = new String[50];
maTran = int[10][10];
o S dng mng:
int i = a[0]; float f = yt[9]; String str = names[20]; int x =
matran [2][5];
1.1.7. Cc php ton c bn
Cc php ton trong Java cng tng t nh trong C++.
Php ton s hc: +, - , *, / , % , =,++ , -- , += , - = , *= , /= , %=
Php ton logic ==, !=, && , ||, ! ,> , < , >= , <=
Php ton trn bit : & , | , ^ , << , >> , ~
Php ton iu kin : ? :
Cch chuyn i kiu: (Kiu Mi)
1.1.8. Qui cch t tn trong Java
Tn hng, tn bin, tn lp, tn phng thc , ... c t tn theo qui tc bt buc
sau:
Tn phn bit gia ch hoa v ch thng.
Dng cc ch ci, k t s, k t _ v $.
Khng bt u bng k t s.
Khng c khong trng trong tn.


Bin Son: Ng B Hng - Nguyn Cng Huy
17
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
chng trnh ngun d c, d theo di ngi ta cn s dng quy c t tn sau
(khng bt buc):
Tn lp:
o Cc k t u tin ca mt t c vit hoa,
o Cc k t cn li vit thng.
o V d: lp Nguoi, SinhVien, MonHoc, String, InputStream,
OutputStream. . .
Tn bin, tn hng, tn phng thc:
o T u tin vit thng.
o K t u tin ca t th hai tr i c vit hoa.
V d: ten, ngaySinh, diaChi, inTen(), inDiaChi(), getInputStream(), . .
.
V tr t du { v } bt u v kt thc cc khi nh sau:
if (condition) {
command1;
command1;
} else {
command3;
command4;
}
1.2. Chng trnh ng dng kiu Application
Java l mt ngn ng thun i tng (pure object). Tt c cc thnh phn c
khai bo nh hng, bin, hm th tc u phi nm trong phm vi ca mt lp no .
Mt ng dng trong Java l mt tp hp cc lp lin quan nhau, bao gm cc lp trong th
vin do Java cung cp v cc lp c nh ngha bi ngi lp trnh. Trong mt ng dng
ch c mt Lp thc thi c. y l lp u tin c xem xt n khi chng ta thc thi
ng dng.
Lp thc thi c ny c cc c im sau:
C tn lp trng vi tn tp tin cha n.
Phi khai bo phm vi l public
C cha phng thc:
public static void main (String args[]){
. . .
}
l phng thc c thc thi u tin.
Nu nhiu lp c nh ngha trong mt tp tin, ch c mt lp c khai
bo public.
Bin Son: Ng B Hng - Nguyn Cng Huy
18
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.2.1. Chng trnh HelloWorld
Trong v d ny, chng ta vit mt chng trnh ng dng in ra mn hnh dng ch
"Hello World !". y l ng dng n gin ch c mt lp thc thi c tn l
HelloWorld. Lp ny c khai bo l public, c phng thc main(), cha trong tp tin
cng tn l HelloWorld.java (phn m rng bt buc phi l .java).






Phng thc System.out.print() s in tt c cc tham s trong du () ca n ra mn
hnh.
Ta c th dng bt k chng trnh son tho vn bn no bin son chng
trnh. Nhng nh phi ghi li vi phn m rng l .java.
1.2.3. Bin son chng trnh bng phn mm Notepad ca Ms Windows
Notepad l trnh son tho n gin c sn trong MS Windows m ta c th dng
bin son chng trnh HelloWorld. Hy thc hin cc bc sau:
Chy chng trnh Notepad:
o Chn menu Start \ Programs \ Accessories \ Notepad
Nhp ni dung sau vo Notepad
public class HelloWorld {
public static void main(String args[]) {
System.out.print("Hello World! \n");
}
}
Save tp tin vi tn HelloWorld.java
o Chn menu File \ Save
o Ti ca s Save As hy nhp vo:
Save in: Th mc ni s lu tp tin
File Name: HelloWorld.java
Save as type: All Files
Nhp vo nt Save



Bin Son: Ng B Hng - Nguyn Cng Huy
19
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.2.4. Ci t b pht trin ng dng JDK
Chun b b ngun ci t JDK ph hp vi h iu hnh s dng (Gi s
Windows 2000)
Chy tp tin Setup.exe
Chn ni ci t, gi s D:\jdk1.4
t bin mi trng
o PATH = D:\jdk1.4\bin; c th thc thi cc chng trnh ny t bt
k th mc hin hnh no.
o CLASSPATH = D:\jdk1.4\lib;.; ch n cc lp th vin ca Java trong
th mc D:\jdk1.4\lib v cc lp ti th mc hin hnh, th hin bng
du chm( . ).
1.2.5. Bin dch v thc thi chng trnh
M ca s MS-DOS: Chn menu Start \ Programs \ Accessories \ Command
Prompt.
Chuyn vo th mc cha tp tin HelloWorld.java
Dng chng trnh javac bin dch tp tin HelloWorld.java
javac HelloWorld.java
o Nu c li, trn mn hnh s xut hin thng bo li vi du ^ ch v tr
li.
o Nu khng c li, tp tin thc thi HelloWorld.class c to ra.
Thc thi chng trnh HelloWorld.class
java HelloWorld

Trn mn hnh s xut hin dng ch Hello World!




Bin Son: Ng B Hng - Nguyn Cng Huy
20
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.2.6. Mt s v d
1.2.6.1. Hin th thng tin ra mn hnh
in thng tin ra mn hnh bn dng phng thc
System.out.print(arg1+ arg2+ .. + argn)
Java s t ng nh dng d liu cho cc tham s arg1, arg2, ..., argn ty theo kiu
ca chng.
Hy lu chng trnh sau vo tp tin Display.java:
public class Display {
public static void main(String args[]) {
int i = 10;
String str = " nam yeu ";
char ch = 'm';
System.out.print('\n'+ "Bai hat:" + i + str + ch);
}


}
Bin dch v thc thi ta c kt qu :









Phng thc System.out.println(arg1+ arg2+ .. + argn) in cc tham s v t
ng xung dng mi.
1.2.6.2. c k t t bn phm
Phng thc int System.int.read() tr mt s nguyn l m ASCII ca k t nhp t
bn phm.




Bin Son: Ng B Hng - Nguyn Cng Huy
21
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng

Hy lu chng trnh sau vo tp tin KeyRead.java
import java.io.*;
public class KeyRead {
public static void main(String args[]) {
try {
int ch = System.in.read();
System.out.print("Ky tu " + (char)ch + " co ma ascii = "+ch);
} catch(IOException ie) {
System.out.print("Error " + ie) ;
}
}
}
Bin dch v thc thi ta c kt qu :









Trong v d trn lu mt s im sau:
Dng u tin import java.io.*; l c ch khai bo vi trnh bin
dch cc lp th vin ca Java m chng trnh c s dng n. Trong trng
hp ny chng trnh khai bo s dng tt c cc lp trong gi (package)
java.io. Thc t chng trnh trn ch s dng lp IOException ca gi
java.io m thi, v th ta c th thay th dng java.io.*; bng
java.io.IOException;.
C ch ngoi l (Exception) ca java:
try {
....
} catch(IOException ie) {
....
}
s c gii thch r phn sau.


Bin Son: Ng B Hng - Nguyn Cng Huy
22
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.3. Cc cu trc iu khin trong Java
1.3.1. Lnh if else
C php:
if (Condition) {
// Cc lnh s c thc hin nu gi tr ca Condition l true
}
if (Condition) {
// Cc lnh s c thc hin nu gi tr ca Condition l true
} else {
// Cc lnh s c thc hin nu gi tr ca Condition l false
}
V d:
Lu chng trnh sau vo tp tin IfDemo.java :
import java.io.*;
public class IfDemo {
public static void main(String args[]) {
System.out.print("Vui long nhap mot ky tu:");
try {
int ch = System.in.read();
if (ch == 'A') {
System.out.print("Ban rat may man !");
}
else {
System.out.print("Ban khong gap may !");
}
} catch(IOException ie) {
System.out.print("Error:"+ie);
}
}
}
Bin dich v thc thi c kt qu nh sau:








Bin Son: Ng B Hng - Nguyn Cng Huy
23
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.3.2. Php ton ?
C php:
(condition) ? Operation1 : Operation2;
Nu iu kin condition c gi tr l true lnh s tr v gi tr ca biu thc
Operation1, ngc li s tr v gi tr ca biu thc Operation2.
V d:
Lu chng trnh sau vo tp tin QuestionOp.java :
import java.io.*;
public class QuestionOp {
public static void main(String args[]) {
System.out.print("Vui long nhap mot ky tu:");
try {
int ch = System.in.read();
int point = (ch == 'A') ? 10:0;
System.out.print("Diem cua ban la:"+point);
} catch(IOException ie) {
System.out.print("Error:"+ ie);
}
}
}
Bin dch v thc thi c kt qu nh sau:
















Bin Son: Ng B Hng - Nguyn Cng Huy
24
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.3.3. Lnh switch
C php
switch ( variable ) {
case value1 : {
Task 1;
// Cc tc v s c thc thi nu gi tr ca variable l value1
break;
}
case value2 : {
Task 2;
// Cc tc v s c thc thi nu gi tr ca variable l value2
break;
}
. . .
default:
Task n;
// Tc v s c thc thi nu gi tr ca variable khng l cc gi tr trn
}
V d
Lu chng trnh sau vo tp tin CaseOp.java
import java.io.*;
public class CaseOp {
public static void main(String args[]) {
System.out.print("Enter a number character: ");
try {
int ch = System.in.read();
switch(ch) {
case '0': { System.out.print("Zero");break;}
case '1': { System.out.print("One"); break;}
case '2': { System.out.print("Two"); break;}
case '3': { System.out.print("Three");break;}
case '4': { System.out.print("Four"); break;}
case '5': { System.out.print("Five"); break;}
case '6': { System.out.print("Six"); break;}
case '7': { System.out.print("Seven");break;}
case '8': { System.out.print("Eight");break;}
case '9': { System.out.print("Nine"); break;}
default: { System.out.print("I don't know"); break;}
}
} catch(IOException ie) {
System.out.print("Error "+ie);
}
}
}

Bin dch v thc thi c kt qu sau:
Bin Son: Ng B Hng - Nguyn Cng Huy
25
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng








1.3.4. Lnh while
C php
while (condition) {
// nu condition c gi tr l true, th cc tc v y s c lp li
}
V d
Lu chng trnh sau vo tp tin WhileDemo.java
import java.io.*;
public class WhileDemo {
public static void main(String args[]) {
int num = '9';
while (num > '0') {
System.out.print((char)num +" ");
num--;
}
}
}
Bin dch v thc thi c kt qu sau:









Bin Son: Ng B Hng - Nguyn Cng Huy
26
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.3.5. Lnh do - while
C php
do {
// Lp li cc tc v y cho n khi iu kin condition c gi tr l false
} while (condition)
V d: Lu chng trnh sau vo tp tin DoWhileDemo.java
import java.io.*;
public class DoWhileDemo {
public static void main(String args[]) {
int num = '9';
do {
System.out.print((char)num +" ");
num--;
} while (num > '0');
}
}
Bin dch v thc thi c kt qu sau:
1.3.6. Lnh for
C php
for (operation1; condition; operation2){
// Cc tc v c lp li
}
Tng ng nh cu trc sau:
operation1;
while (condition) {
// Cc tc v c lp li
operation2;
}
V d
Bin Son: Ng B Hng - Nguyn Cng Huy
27
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
Lu chng trnh sau vo tp tin ForDemo.java
import java.io.*;
public class ForDemo {
public static void main(String args[]) {
for(int num = '9'; num>'0'; num --) {
System.out.print((char)num +" ");
}
}
}
Bin dch v thc thi c kt qu nh sau:
1.3.7. Lnh break
Vng lp ca cc lnh while, do-while v for s kt thc khi lnh break c thc
hin.
V d
Lu chng trnh sau vo tp tin BreakDemo.java
import java.io.*;
public class BreakDemo {
public static void main(String args[]){
int num =Integer.valueOf(args[0]).intValue();
int i= num / 2;
while(true){
if (num % i ==0) break;
i--;
}
System.out.println("So lon nhat chia het "+num+ " la: "+i);
}
}

Bin dch v thc thi c kt qu sau:
Bin Son: Ng B Hng - Nguyn Cng Huy
28
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng









Chng trnh trn i i s th nht ca n (lu trong args[0]) thnh s ( bng
lnh Integer.valueOf(args[0]).inValue() ) v tm s ln nht chia ht s ny.
1.3.8. Lnh continue
Trong mt ln lp no ca cc lnh while, do-while v for, nu gp lnh
continue th ln lp s kt thc (b qua cc lnh pha sau continue) bt u ln lp tip
theo.
V d: Lu chng trnh sau vo tp tin ContinueDemo.java
import java.io.*;
public class ContinueDemo{
public static void main(String args[]){
int num =Integer.valueOf(args[0]).intValue();
System.out.print("The odd numbers: ");
for (int i =0; i< num; i++ ){
if (i % 2 ==0) continue;
System.out.print(i+ " ");
}
}
}
Bin dch v thc thi c kt qu sau:

Chng trnh ny in ra tt c cc s l nh hn s a vo t i s.
Bin Son: Ng B Hng - Nguyn Cng Huy
29
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.3.9. Mt s vn khc
1.3.9.1. c i s ca chng trnh
Khi thc thi chng trnh ta c th nhp vo cc i s t dng lnh theo c php
sau:
java ClassName arg1 arg2 arg3 argn
Cc i s cch nhau khong trng. n nhn cc i s ny, phng thc main
bt buc phi khai bo mt tham s kiu mng cc chui
public static void main(String args[]) {

}
Cc i si s ln lt c t vo cc phn t ca mng ny. S lng i s c
th xc nh c bng cch truy xut thuc tnh args.length ca mng.
V d
Lu chng trnh sau vo tp tin PrintArgs.java
public class PrintArgs {
public static void main (String args[]) {
for (int i = 0; i < args.length; i++) {
System.out.println(args[i]);
}
}
}
Bin dch v thc thi chng trnh c kt qu sau:















Bin Son: Ng B Hng - Nguyn Cng Huy
30
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.3.9.2. i chui thnh s
Lu chng trnh sau vo tp tin StringToNumber.java
public class StringToNumber{
public static void main (String args[]) {
int i = Integer.valueOf( args[0]).intValue();
long l = Long.valueOf( args[1]).longValue();
float f = Float.valueOf( args[2]).floatValue();
System.out.println("Integer number = "+i );
System.out.println("Long number = "+l );
System.out.println("Float number = "+f );
}
}
Bin dch v thc thi chng trnh c kt qu sau:







1.4. Ngoi l (EXCEPTION)
Trong chng trnh, c mt s cc "thao tc khng chc chn", v d nh cc thao
tc vo/ra: a mm cha sn sng, my in c li, ni kt mng khng thc hin c . . .
s dn n li thc thi chng trnh.
Java hn ch cc li sinh ra t "thao tc khng chc chn" bng c ch Ngoi l
(Exception).
Ngoi l tc l mt s kin xy ra ngoi d tnh ca chng trnh nu khng x l
s lm cho chng trnh chuyn sang trng thi khng cn kim sot c. V d iu g
s xy ra nu chng trnh truy xut n phn t th 11 ca mt mng 10 phn t ? Mt s
ngn ng nh C, C++ s khng bo li g c, chng trnh vn tip tc vn hnh nhng
kt qu th khng th xc nh c.
hn ch nhng li nh th, Java bt buc cc lnh c th dn n cc ngoi l
phi c cc on m x l phng h khi ngoi l xy ra theo c php sau:


Bin Son: Ng B Hng - Nguyn Cng Huy
31
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
try {
Cc thao tc vo ra c th sinh ra cc ngoi l.
}
catch (KiuNgoiL_01 bin) {
ng x khi ngoi l KiuNgoaiL_01 sinh ra
} catch (KiuNgoiL_02 bin) {
ng x khi ngoi l KiuNgoaiL_02 sinh ra
}finally { Cng vic lun lun c thc hin }
Trong c ch ny, cc lnh c th to ra ngoi l s c a vo trong khi bao
bc bi t kha try {}. Tip theo l mt lot cc khi catch{}. Mt lnh c th sinh ra
mt hoc nhiu loi ngoi l. ng vi mt loi ngoi l s c mt khi catch{} x l
cho loi ngoi l . Tham s ca catch ch ra loi ngoi l m n c trch nhim x l.
Khi thc thi chng trnh, nu mt lnh no nm trong khi try{} to ra ngoi l, iu
khin s c chuyn sang cc lnh nm trong cc khi catch{} tng ng vi loi ngoi
l . Cc lnh pha sau lnh to ra ngoi l trong khi try{} s b b qua. Cc lnh nm
trong khi finally{} th lun lun c thc hin cho d c xy ra ngoi l hay l khng.
Khi lnh finally{} l ty chn c th khng cn.
Ngoi l c loi bt buc phi x l, tc phi c try{}, c catch{} khi s dng
lnh . V d nh lnh c t bn phm. Trnh bin dch ca java s bo li nu chng ta
khng x l chng.
Ngc li, c loi ngoi l khng bt buc phi x l, v d nh truy xut n phn
t bn ngoi ch s mng.
Tra cu ti liu c t cc API ca java bit c cc ngoi l to ra t mt
phng thc.
V d:
Lu chng trnh sau vo tp tin ExceptionDemo.java :
public class ExceptionDemo {
public static void main(String[] args) {
try {
System.out.println("Hello " + args[0]);
}
catch (ArrayIndexOutOfBoundsException e){
System.out.println("Hello Whoever you are.");
}
finally {
System.out.println("How are you?");
}
}
}



Bin dch v thc thi c kt qu nh sau:
Bin Son: Ng B Hng - Nguyn Cng Huy
32
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng










Trong chng trnh trn chng ta d nh s cho ngi c a vo t i s th
nht ca chng tnh (c cha trong phn t args[0]). Tuy nhin nu ngi dng thc
thi chng trnh qun a vo i s, tc phn t args[0] khng tn ti. Ngoi l bo hiu
truy xut n phn t nm ngoi mng (ArrayIndexOutOfBoundsException)
c qung ra (throw). Khi on m lnh trong khi catch c tham s l loi ngoi l
ArrayIndexOutOfBoundsException s c thc hin.
1.5. Mt s vn lin quan n lp trong Java
1.5.1. nh ngha lp mi
Ngoi cc lp c nh ngha sn trong th vin chun ca java, cc lp trnh vin
c th nh ngha thm cc lp ca mnh theo c php sau:
class ClassName {
// Danh sch cc thuc tnh thuc lp
DataType01 attribute1, attribute2, . .;
DataType02 attribute3, attribute4, . .;
// Danh sch cc phng thc thuc lp
ClassName([DataType parameter, DataType parameter]) {
// Constructor
...
}
void method01() {
. . .
}
DataType method02( . . .) {
...
return xx;
}
}
ClassName l tn lp mi ang c nh ngha.
To i tng tn obj thuc lp ClassName.
ClassName obj = new ClassName();


Bin Son: Ng B Hng - Nguyn Cng Huy
33
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
V d: nh ngha mt lp c:
Tn l Person
Hai thuc tnh l name v address
Phng thc khi to c hai tham s gn gi tr khi ng cho hai thuc
tnh.
Phng thc void display() cho bit ngi tn l g, a ch u.
Phng thc main() to ra mt i tng tn l tom thuc lp Person
Lu chng trnh sau vo tp tin Person.java
public class Person{
String name; //Thuc tnh
String address; //Thuc tnh
Person(String n, String address) { // Phng thc khi to
name = n;
this.address = address;
}
void display(){ // Hin th tn v a ch
System.out.print(name + " is at "+ address);
}
public static void main(String args[]){
Person tom = new Person("Tom","Disney Land"); // To i tng
tom.display(); // Gi phng thc ca i tng
}
}
Bin dch v thc thi ta c kt qu:

1.5.2. Phm vi nhn thy ca mt lp
Mt lp c nh ngha v ci t bn trong mt tp tin. Mt tp tin c th cha
mt hoc nhiu lp. Trong mt tp tin, ch c mt lp c khai bo l public (pha trc
t kha class), cc lp cn li phi l private (mc nhin). Mt lp c khai bo l public
s c nhn thy bi cc lp khc cng tp tin hay khc tp tin vi n. Ngc li cc
lp private ch c nhn thy bi cc lp nm cng tp tin vi n m thi.
V d: Trong v d ny, chng ta tch phng thc main ra khi lp Person v a
n vo lp mi MultiClass. Lu hai lp ny vo trong cng mt tp tin tn l
MultiClass.java, vi lp MultiClass c khai bo l public, lp Person khai bo private.

Bin Son: Ng B Hng - Nguyn Cng Huy
34
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
// Lp c phm vi public c th tham kho t bn ngoi tp tin
public class MultiClass {
public static void main(String args[]){
Person tom = new Person("Tom","Disney Land");
tom.display();
}
}
// Lp c phm vi private ch c th tham kho bi cc lp nm cng tp tin
class Person{
String name;
String address;

Person(String n, String address) {
name = n;
this.address = address;
}
void display(){
System.out.println(name + " is at "+ address);
}
}
Bin dch v thc thi ta c kt qu:

1.5.3. Tnh tha k
Mt lp ch c th c mt lp cha (tha k n).
Lp cha c tham kho t lp con bi t kha super.
Dng t kha extends khai bo tha k.
C php:
class A extends B { // Khai bo A tha k t B
...
}
V d: nh ngha lp Client c cc c im sau:
Tha k t lp Person.
C thm thuc tnh: telephone v buy (lng hng mua).
C phng thc khi to.
nh ngha li phng thc void display() ca lp cha.
Bin Son: Ng B Hng - Nguyn Cng Huy
35
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
Lu chng trnh sau vo tp tin Client.java
public class Client extends Person{
int telephone;
long buy;
public Client(String n, String a, int t, long b) {
super(n,a);
telephone=t;
buy=b;
}
public void display() {
super.display();
System.out.println( ", Number of telephone:"+ telephone + ", buy: "+
buy );
}
public static void main(String args[]){
Client tom = new Client("Tom","Disney Land",123456,1000);
tom.display();
}
}
Bin dch v thc thi ta c kt qu:

1.6. Vo / Ra vi Stream
Stream l mt dng lin tc, c th t cc bytes d liu chy gia chng trnh v
cc thit b ngoi vi. N l khi nim tru tng gip gim bt cc thao tc vo ra phc
tp i vi ngi lp trnh. N cho php ni kt nhiu loi thit b ngoi vi khc nhau vi
chng trnh.
Nu dng d liu trong Stream c hng chy t thit b ngoi vi vo chng trnh
th ta ni y l Stream nhp (Input Stream), ngc li l Stream xut (Output Stream).
i vi Java, cc thit b ch nhp, nh bn phm, s c cc Stream nhp ni vi n,
cc thit b ch xut, nh mn hnh, s c cc stream xut ni vi n , cc thit b va xut,
va nhp, nh a t, th c c stream nhp v xut ni vi n.
giao tip vi cc thit b ngoi vi, chng trnh trc tin phi ly c cc
stream nhp / xut gn vi thit b ngoi vi ny. Sau , chng trnh c th gi d liu ra
ngoi vi bng thao tc ghi vo Stream xut ca ngoi vi. Ngc li, chng trnh c th
nhn d liu t ngoi vi bng thao tc c stream nhp ca ngoi vi .
Bin Son: Ng B Hng - Nguyn Cng Huy
36
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
Nh vy, chng trnh ch lm vic trn cc stream nhp v stream xut, m khng
quan tm n c im ring bit ca thit b ngoi vi ni vi Stream. iu ny gip
chng trnh giao tip vi h thng mng cng d dng nh giao tip vi mn hnh, bn
phm hay a t.
Mt im khc cn lu l stream bao gm nhng bytes ri rc. Nhng bytes ny
m t nhng dng d liu khc nhau. V d mt s integer khi vit vo stream s chuyn
thnh 4 bytes. V th cn phi c cc thao tc chuyn i d liu nhn v gi gia chng
trnh v stream.
Java h tr hai cc lp stream c bn trong gi java.io l:
java.io.InputStream: Stream nhp
java.io.OutputStream: Stream xut
Ngoi ra cn c cc lp Stream tha k t hai lp trn nhm mc ch cung cp cc
tin ch cho cc loi thit b vo ra chuyn bit nh: FileInputStream, FileOutputStream,
PipedInputStream, PipedOutputStream, . . .
1.6.1. Lp java.io.InputStream
L loi stream cho php chng trnh nhn d liu t ngoi vi. C cc phng thc
c bn sau:
int read() throws IOException :
c 1 byte t Stream
Return 0-255 : M ASCII ca byte nhn c t ngoi vi
-1 : Stream kt thc, khng cn d liu.
i vi Java, System.in l mt InputStream ni kt vi bn phm c to sn bi
h thng. Chng trnh c th dng InputStream ny nhn cc k t nhp t bn
phm.
V d: Hy lu chng trnh sau vo tp tin InStream1.java
import java.io.*;
public class InStream1 {
public static void main(String args[]) {
InputStream is = System.in; // KeyBoard = System.in
while (true) {
try {
int ch = is.read();
if (ch ==-1 || ch =='q') break;
System.out.print((char)ch);
} catch (IOException ie) {
System.out.print("Error: "+ie);
}
}
}
}

Bin Son: Ng B Hng - Nguyn Cng Huy
37
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
Bin dch v thc thi ta c kt qu sau:

V d trn ch nhn cc k t c nhp t bn phm.
int read(byte b[]) throws IOException:
c tt c cc byte hin c trong Stream vo mng b.
Return 0-255: S lng byte c c.
-1 : Stream kt thc, khng cn d liu.
int read(byte b[], int offset, int len)
c len byte t Stream hin ti, lu vo trong mng b bt u t v tr offset
Return: s lng byte c c.
-1 : Stream kt thc.
Cc phng thc trn khi thc thi s b nghn (block) cho n khi c d liu hoc
kt trc Stream hay mt ngoi l xut hin.
int available()
Tr v s lng byte hin c trong Stream m khng lm nghn chng trnh.
V d:
Lu chng trnh sau vo tp tin c tn InStream2.java
import java.io.*;
public class InStream2 {
public static void main(String args[]) {
InputStream is = System.in; // KeyBoard = System.in
while (true) {
try {
int num = is.available();
if (num > 0){
byte[] b = new byte[num];
int result = is.read(b);
if (result == -1) break;
String s = new String(b);
System.out.print(s);
} else {
Bin Son: Ng B Hng - Nguyn Cng Huy
38
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
System.out.print('.');
}
} catch (IOException ie) {
System.out.print("Error: "+ie);
}
}
}
}
Bin dch v thc thi ta c kt qu sau:

im khc bit trong v d ny l cc k t ta nhp t bn phm s khng hin th
tc th trn mn hnh. Chng ch hin th sau khi chng ta nhn phm Enter.
1.6.2. Lp java.io.OutputStream
L loi stream cho php chng trnh xut d liu ra ngoi vi. C cc phng thc
c bn sau:
void write(int b) throws IOException
Vit byte b vo Stream hin ti,
Return : void
void write (byte[] b) throws IOException
Vit tt c cc phn t ca mng b vo Stream hin ti
Return : void
void write (byte[] b, int offset, int len) throws IOException:
Vit len phn t trong mng b vo Stream hin ti, bt u t phn t c ch
s l offset ca mng.
Return : void


i vi Java, System.out l mt OutputStream ni kt vi mn hnh c to sn
bi h thng. Chng trnh c th dng OutputStream ny gi cc k t ra mn hnh.
Bin Son: Ng B Hng - Nguyn Cng Huy
39
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
V d:
Hy lu chng trnh sau vo tp tin OutStream1.java
import java.io.*;
public class OutStream1 {
public static void main(String args[]) {
OutputStream os = System.out; // Monitor = System.out
try {
String str = "The example of OutputStream";
byte b[] = str.getBytes(); // i chui thnh mng cc bytes
os.write(b);
} catch (IOException ie) {
System.out.print("Error: "+ie);
}
}
}
Bin dch v thc thi chng trnh ta c kt qu sau:

1.6.3. Nhp chui t mt InputStream
InputStream l Stream nhp gm chui cc bytes. N ch cung cp cc phng thc
cho vic c byte v mng cc bytes. c th c c chui t mt InputStream ta phi
s dng thm cc lp sau:
Lp java.io.InputStreamReader: L cu ni chuyn InputStream dng
byte sang InputStream dng cc k t (Character).
Lp java.io.BufferedReader: H tr vic c vn bn t mt InputStream
dng k t.
Phng thc String readLine() throws IOException ca BufferedReader cho
php c dng vn bn k tip trong InputStream. Mt dng kt thc bi cp k t \r\n
hoc kt thc Stream.
Return: Mt chui k t hoc null.
Gi s is l mt i tng thuc lp InputStream. c chui t is ta thc hin
cc thao tc sau:
1. InputStreamReader isr = new InputStreamReader(is);
Bin Son: Ng B Hng - Nguyn Cng Huy
40
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
2. BufferedReader br = new BufferedReader (isr);
3. String str = br.readLine();
V d: c chui t bn phm
Lu chng trnh sau vo tp tin ReadLine.java
import java.io.*;
public class ReadLine{
public static void main(String args[]) {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
while (true) {
try {
String line = br.readLine();
if (line == null ) break;
System.out.print(line);
} catch (IOException ie) {
System.out.print("Error: "+ie);
}
}
}
}
Bin dch v thc thi ta c kt qu sau:

1.6.4. Xut chui ra mt OutputStream
OutputStream l Stream xut gm chui cc bytes. N ch cung cp cc phng
thc cho vic vit byte v mng cc bytes. c th gi c chui ra mt OutputStream
ta phi s dng lp java.io.PrintWriter.
Gi s: os l mt OutputStream, str l chui cn vit vo os.
Ta thc hin cc thao tc sau:

1. PrintWriter pw = new PrintWriter(os);
2. pw.wirte(str);
3. hoc pw.println(str); // Nu mun c k t xung dng
4. flush() // y d liu t buffer ra ngoi vi
Bin Son: Ng B Hng - Nguyn Cng Huy
41
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
V d: Vit chui ra mn hnh
Lu chng trnh sau vo tp tin PrintString.java
import java.io.*;
public class PrintString {
public static void main(String args[]) {
OutputStream os = System.out;
PrintWriter pw = new PrintWriter(os);
pw.write("This is a string \r\n");
pw.println("This is a line");
pw.write("Bye! Bye!");
pw.flush();
}
}
Bin dch v thc thi ta c:

1.7. Lung (Thread)
Lung l mt cch thng dng nng cao nng lc x l ca cc ng dng nh
vo c ch song song. Trong mt h iu hnh c in, n v c bn s dng CPU l mt
qu trnh. Mi qu trnh c mt Thanh ghi b m chng trnh (PC-Program Counter),
Thanh ghi trng thi (Status Register), ngn xp (Stack) v khng gian a ch ring
(Address Space).
Ngc li, trong mt h iu hnh c h tr tin ch lung, n v c bn s dng
CPU l mt lung. Trong nhng h iu hnh ny, mt qu trnh bao gm mt khng gian
a ch v nhiu lung iu khin. Mi lung c b m chng trnh, trng thi thanh ghi
v ngn xp ring. Nhng tt c cc lung ca mt qu trnh cng chia s nhau mt khng
gian a ch. Nh cc lung c th s dng cc bin ton cc, chia s cc ti nguyn
nh tp tin, hiu bo mt cch d dng...
Cch thc cc lung chia s CPU cng ging nh cch thc ca cc qu trnh. Mt
lung cng c nhng trng thi: ang chy (running), sn sng (ready), nghn (blocked) v
kt thc (Dead). Mt lung th c xem nh l mt qu trnh nh.

Bin Son: Ng B Hng - Nguyn Cng Huy
42
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng

Hnh 2.1 Cc trng thi ca Lung
Nh vo lung, ngi ta thit k cc server c th p ng nhiu yu cu mt cch
ng thi.

Hnh 2.2 - S dng lung cho cc server
Lung phn pht (Dispatcher thread) v nhiu Trong m hnh ny, Server c mt
Lung thc hin (Worker thread). Lung phn pht tip nhn cc yu cu ni kt t cc
Client, ri chuyn chng n cc lung thc hin cn rnh x l. Nhng lung thc
hin hot ng song song nhau v song song vi c lung phn pht, nh , Server c
th phc v nhiu Client mt cch ng thi.
1.7.1. Cc mc ci t lung
Nhn t gc h iu hnh , Lung c th c ci t mt trong hai mc:
Trong khng gian ngi dng (user space)
Trong khng gian nhn (kernel mode):



Bin Son: Ng B Hng - Nguyn Cng Huy
43
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.7.1.1. Tip cn lung mc ngi dng:

Hnh 2.3 - Kin trc lung ci t mc ngi dng
Khng gian ngi dng bao gm mt h thng runtime m n tp hp nhng th
tc qun l lung. Cc lung chy trong khng gian nm bn trn h thng runtime th
c qun l bi h thng ny. H thng runtime cng lu gi mt bng tin trng thi
theo di trng thi hin hnh ca mi lung. Tng ng vi mi lung s c mt mc t
trong bng, bao gm cc thng tin v trng thi, gi tr thanh ghi, u tin v cc thng
tin khc v lung
Tip cn ny c hai mc nh thi biu (Scheduling): b nh thi biu cho cc qu
trnh nng v b nh thi biu trong h thng runtime. B lp biu ca h thng runtime
chia thi gian s dng CPU c cp cho mt qu trnh thnh nhng khong nh hn
cp cho cc lung trong qu trnh . Nh vy vic kt thc mt lung th vt ra ngoi
tm kim sot ca kernel h thng.
1.7.1.2. Tip cn lung mc ht nhn h iu hnh

Hnh 2.4 - Kin trc lung ci t mc h thng
Trong tip cn ny khng c h thng runtime v cc lung th c qun l bi
kernel ca h iu hnh. V vy, bng thng tin trng thi ca tt c cc lung th c lu
tr bi kernel. Tt c nhng li gi m n lm nghn lung s c by (TRAP) n
kernel. Khi mt lung b nghn, kernel chn lung khc cho thc thi. Lung c chn c
th cng mt qu trnh vi lung b nghn hoc thuc mt qu trnh khc. V vy s tn ti
ca mt lung th c bit bi kernel v ch c mt mc lp biu trong h thng.
1.7.2. Lung trong java
Trong Java, lung l 1 i tng thuc lp java.lang.Thread. Mt chng trnh
trong java c th ci t lung bng cch to ra mt lp con ca lp java.lang.Thread.
Lp ny c 3 phng thc c bn iu khin lung l:
public native synchronized void start()
public void run()
public final void stop()

Bin Son: Ng B Hng - Nguyn Cng Huy
44
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
Phng thc start()
Chun b mi th thc hin lung.
Phng thc run()
Thc hin cng vic thc s ca lung, () s c kch hot mt cch t ng bi
phng thc start().
Phng thc stop()
Kt thc lung.
Lung s "cht" khi tt c cc cng vic trong phng thc run() c thc hin
hoc khi phng thc stop() c kch hot.
V d
V d sau nh ngha lp MyThread l mt Thread c:
Cc thuc tnh
o name: tn ca thread
o n: s ln thread xut hin ra mn hnh
Cc phng thc:
o MyThread(String name, int n):
L phng thc khi to, c nhim v gn gi tr cho 2 thuc tnh v gi
phng thc start() cho thread hot ng (start() t ng gi run())
o run()
In n ln dng thng bo ra mn hnh ri kt thc thread.
o main()
To ra 4 thread thuc lp MyThread ln lt c tn l Thread0, Thread1,
Thread2, Thread3. Mi thread c 1000 ln xut hin ra mn hnh.
Lu chng trnh sau vo tp tin MyThread.java
public class MyThread extends Thread{
String name;
int n;
MyThread(String name, int n){
this.name = name;
this.n = n;
System.out.println("Thread "+name+" has been created ....!");
start();
}
public void run(){
for(int i=0; i< n; i++) {
System.out.println("Hello, I'm "+ name);
System.out.println(" I go to bed now, bye bye ... wow ... ");
}
}
Bin Son: Ng B Hng - Nguyn Cng Huy
45
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
public static void main(String args[]){
int n = 1000;
int nt = 4 ;
for (int i=0; i< nt; i++){
MyThread t = new MyThread("Thread"+i,n);
}
}
}
Bin dch v thc thi ta c kt qu sau:












Cc Thread in ra mn hnh theo th t ta khng th xc nh trc c v chng
c t
DOS m chng trnh ang chy. Sau ta nhn phn Enter chng trnh
tip tc.
Ngoi ra, lp Thread cn c 1 s cc phng thc khc :
hc thi song song nhau.
dng tm thi mn hnh kt qu khi chng trnh ang thc thi, ta nhp chut
vo ca s

Bin Son: Ng B Hng - Nguyn Cng Huy
46
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
public static void sleep(long milliseconds) throws InterruptedException: lm
cho Thread b nghn (Blocked) mt khong thi gian mili giy xc nh.
public final void suspend(): Chuyn Thread t trng thi sn sng sang trng
thi nghn.
public final void resume(): Chuyn Thread t trng thi nghn sang trng thi
sn sng.
public final void yield() : Chuyn Thread t trng thi ang chy sang trng
thi sn sng.
1.7.2.1 u tin ca lung
u tin ca cc lung xc nh mc u tin trong vic phn phi CPU gia
cc lung vi nhau. Khi c nhiu lung ang trng thi "Ready", lung c u tin cao
nht s c thc thi (chuyn n trng thi "running" ).
u tin trong Java c nh ngha bng cc hng s nguyn theo th t gim
dn nh sau:
Thread.MAX_PRIORITY
Thread.NORM_PRIORITY
Thread.MIN_PRIORITY
Hai phng thc lin quan n u tin ca lung l:
setPriority( int x): t u tin ca lung l x
int getPriority( ): Tr v gi tr u tin ca lung
V d:
Trong v d ny chng ta to ra 12 Thread thuc lp MyThread. Mt mng 3 phn
t tn prio cha 3 u tin t cao nht n thp nht. Thread th i s c u tin v
tr i%3 trong mng prio. Nh vy cc thread 0,3,6,9 c u tin cao nht, sau n
Thread 1,4,7,10 v cui cng l cc thread 2,5,8,11.
Lu chng trnh sau vo tp tin PriorityThread.java
public class PriorityThread{
public static void main(String args[]){
int n = 1000;
int nt = 12;
int prio[]= { Thread.MAX_PRIORITY,
Thread.NORM_PRIORITY,
Thread.MIN_PRIORITY};
for (int i=0; i< nt; i++){
MyThread t = new MyThread("Thread"+i,n);
t.setPriority(prio[i%3]);
}
}
}
Bin Son: Ng B Hng - Nguyn Cng Huy
47
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
Bin dch v thc thi ta c kt qu nh sau:

































Bin Son: Ng B Hng - Nguyn Cng Huy
48
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
Cc Thread 0,3,9 c u tin cao hn cc Thread khc cho nn chng c thc
thi thng xuyn hn.
Cc Thread 2,5,8,11 c u tin thp nht nn chng kt thc sau cng.
1.7.3. ng b ha gia cc lung
Tt c cc lung ca mt qu trnh th c thc thi song song v c lp nhau
nhng li cng chia s nhau mt khng gian a ch ca qu trnh. Chnh v vy c th dn
n kh nng ng trong vic cp nht cc d liu dng chung ca chng trnh (bin,
cc tp tin c m) khi mt lung ghi ln mt d liu trong khi mt lung khc ang c
d liu ny.
Trong trng hp , cn phi s dng c ch ng b ha ca Java. C nhiu mc
ng b ha nh: trn mt bin, trn mt cu lnh, trn mt khi lnh hay trn mt
phng thc.
1.8. Bi tp p dng
Ch 1: C bn v Java
Mc ch:
o Sinh vin lm quen vi ngn ng Java, vit 1 s chng trnh n gin
bng Java.
o Thc tp cch nhp / xut thng tin qua Java.
o Thit k lp n gin qua Java.
Yu cu
Sinh vin thc hin cc bi tp sau
o Bi 1 : Kho st cy th mc JDK trn h thng my tnh ang thc
tp. t cc bin mi trng PATH v CLASSPATH n cc v tr
thch hp.
o Bi 2 : Vit chng trnh th hin ra mn hnh cu : " Hello Java"
o Bi 3 : Vit chng trnh nhp vo 1 chui k t. i thnh ch Hoa
v in ra mn hnh.
o Bi 4 : Vit chng trnh nhp vo 1 s nguyn. Kim tra xem s
c phi l s nguyn t hay khng v thng bo ra mn hnh.
o Bi 5 : Vit chng trnh gii phng trnh bc 2.
o Bi 6 : Vit chng trnh tnh tng ca dy s t 1 n n (Vi n c
nhp t bn phm).
o Bi 7 : Nhp vo 1 dy s thc, tnh tng ca cc s dng trong dy
.
Ch 2: Thit k lp trong Java
Mc ch:
o Thit k lp di Java.
Yu cu
Bin Son: Ng B Hng - Nguyn Cng Huy
49
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
Sinh vin thc hin cc bi tp sau
o Bi 1 : Thit k lp Diem (im trong khng gian 2 chiu) gm :
Thnh phn d liu : x,y kiu int.
Cc hm thnh vin gm : cc phng thc khi to, phng
thc gn ta cho 1 im, phng thc nhp ta cho 1
im, phng thc in ra mn hnh ta im theo dng (x,y),
phng thc tnh khong cch t im n gc ta .
Vit hm main() khai thc lp va nh ngha.
o Bi 2 : Thit k lp PhanSo ( Phn s ) c:
2 thuc tnh t s v mu s thuc kiu s nguyn
Cc phng thc: Phng thc khi to, phng thc in phn
s, phng thc nghch o phn s, phng thc tr v gi tr
thc ca phn s, hm cng, tr, nhn, chia 2 phn s.
Phng thc main() s dng lp PhanSo.
Ch 3: Thread
Mc ch:
o Tm hiu v lung (Thread), cch lp trnh lung, lp trnh song song.
Yu cu: Sinh vin thc bi tp sau:
o Bi 1 : Vit chng trnh m phng bi ton "Ngi sn xut - Ngi
tiu dng", trong Ngi sn xut s sn xut ra mt s lng ngu
nhin n sn phm no ri yu cu nhp kho. Ngi tiu dng s yu
cu xut kho mt s lng ngu nhin m sn phm no t kho. Yu
cu nhp kho ch c chp nhn nu s lng hng ha a vo
khng vt qu sc cha ca kho, nu khng, phi ch cho n khi c
ch trng trong kho. Yu cu xut kho ch c chp nhn khi cn
hng trong kho nu khng cng phi ch.
Gi : Thit k cc lp sau:
Lp Kho: C thuc tnh l sc cha, phng thc khi to gn
gi tr cho sc cha, cc phng thc xem s lng hng tn,
phng thc nhp kho, phng thc xut kho. In thng bo mi
khi nhp kho hay xut kho thnh cng
Lp Ngi Sn Xut l mt Thread: C thuc tnh l kho
nhp hng. Phng thc khi to gn gi tr cho kho nhp hng.
Phng thc sn xut lp li cng vic l to ra n sn phm
ngu nhin v ch nhp vo kho.
Lp Ngi Tiu Dng l mt Thread: C thuc tnh l kho
xut hng. Phng thc khi to gn gi tr cho kho xut
hng. Phng thc tiu dng lp li cng vic l ch yu cu
xut m sn phm t kho.
Lp Demo to ra mt kho v 2 ngi sn xut, 2 ngi tiu
dng thc hin vic nhp xut trn cng mt kho.
Bin Son: Ng B Hng - Nguyn Cng Huy
50
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
CHNG 3
ng dn (Pipe)
Mc ch
Chng ny nhm gii thiu c ch giao tip lin qu trnh u tin l Pipe v cch
s dng n trong Java lm phng tin giao tip gia cc Thread trong mt chng
trnh.
Yu cu
Sau khi hon tt chng ny, bn c th:
Trnh by c cc c im ca Pipe.
Bit cch to Pipe v xut/ nhp d liu trn Pipe trong Java.
Gii thch c chc nng ca dch v phn hi thng tin (Echo Service).
Xy dng, bin dch v thc thi thnh cng chng trnh PipedEcho.





















Bin Son: Ng B Hng - Nguyn Cng Huy
51
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.1. Gii thiu v ng dn
ng dn l mt tin ch c h tr trong hu ht cc ngn ng lp trnh vn hnh
trn cc h thng a nhim. ng dn cho php hai qu trnh nm trn cng mt my c th
trao i d liu vi nhau.
D liu i trn ng dn theo mt chiu nht nh. Khi s dng ng dn, ngi ta
dng mt u cho vic vit d liu vo v mt u cn li cho vic c d liu ra.

Hnh 3.1 M hnh ng dn
ng dn thch hp cho trng hp d liu to ra ca qu trnh ny s l d liu u
vo cho qu trnh kia.
Tuy nhin ta cng c th s dng ng dn xy dng cc ng dng theo kin trc
Client- Server bng cch s dng hai ng dn: mt ng dn truyn cc yu cu
(request), mt ng dn truyn cc tr li (reply).

Hnh 3.2 Dng ng dn trong chng trnh Client -Server
C hai loi ng dn:
ng dn bnh thng ( Normal Pipe): Gii hn trong phm vi khng gian a
ch ca mt qu trnh m thi. N ch cho php giao tip gia qu trnh cha
vi cc qu trnh con hay gia cc qu trnh con ca mt qu trnh vi nhau.
Java h tr ng dn loi ny. Trong cc qu trnh con c thay th bi
cc lung.
ng dn c tn (Named Pipe): Loi ny c th cho php hai qu trnh c
khng gian a ch khc nhau (trn cng mt my) giao tip vi nhau. Thc
cht n ging nh mt tp tin vi qui nh rng d liu s c ly ra u
tp tin v c thm vo cui tp tin.
1.2. ng dn trong Java
1.2.1. Gii thiu
Java h tr tin ch ng dn thng qua hai lp java.io.PipedInputStream v
java.io.PipedOutputStream. Chng l hai u ca mt ng dn. Trong
PipedInputStream l u c d liu v PipedOutputStream l u ghi d liu ca ng
dn.
PipedInputStream l lp con ca InputStream nn n c tt c cc thuc tnh ca
InputStream.
Bin Son: Ng B Hng - Nguyn Cng Huy
52
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
PipedOutputStream l lp con ca OutputStream nn n c tt c cc thuc tnh ca
OutputStream
1.2.2. Cc cch to ng dn
to mt ng dn ta ch cn to ra hai i tng thuc lp PipedInputStream v
PipedOutputStream v ni chng li vi nhau. Khi d liu c ghi vo
PipedOutputStream s c c ra u PipedInputStream:

Hnh 3.4 - To ng dn trong Java
Cch 1
1. To u c:
o PipedInputStream readId = new PipedInputStream();
2. To u ghi:
o PipedOutputStream writeId = new PipedOutputStream();
3. Ni u c vi u ghi hay ngc li
o readId.connect(writeId);
o // hoc writeId.connect(readId);
Cch 2
1. To u c:
o PipedInputStream readId = new PipedInputStream();
2. To u ghi v ni vo u c c:
o PipedOutputStream writeId = new PipedOutputStream(readId);
Hoc: Ta c th to u ghi trc ri to u c sau.
Lu : Cc phng thc khi to ca PipedInputStream v PipedOutputStream s
dng trn i hi phi "bt" (catch) IOException do chng c th qung ra (throws)..
1.3. Dch v phn hi thng tin (Echo Service)
Dch v phn hi thng tin l mt dch v tn ti trn h thng mng UNIX. Dch
v ny c xy dng theo m hnh Client - Server, c ch hot ng nh sau:
Phn Server: Ch nhn cc byte gi n t Client. Vi mi byte nhn c,
Server s gi v ng byte nhn tr v Client.
Phn Client: Gi cc byte sang Server, ch nhn cc byte gi v t Server.
Bin Son: Ng B Hng - Nguyn Cng Huy
53
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.4. Gi lp dch v phn hi thng tin bng Pipe
Phn k tip ta xy dng mt ng dng c tn l PipeEcho m phng dch v phn
hi thng tin minh ha cch s dng Pipe lm phng tin giao tip gia cc Thread
trong mt ng dng.

Hnh 3.5 M hnh ng dng PipeEcho
Trong ng dng ny Client v Server l hai Thread thuc lp PipedEchoClient v
PipedEchoServer. Vic trao i thng tin gia client v server c thc hin thng qua 2
Pipe (cwPipe-srPipe) v (swPipe-crPipe).
PipedEchoClient nhn cc k t t bn phm, gi chng sang PipedEchoServer v
ch nhn cc k t gi v t PipedEchoServer in ra mn hnh. PipedEchoServer ch
nhn tng k t t PipedEchoClient, i k t nhn c thnh k t hoa v gi ngc v
PipedEchoClient.
1.4.1. Lp PipedEchoServer
Hy lu chng trnh sau vo tp tin PipedEchoServer.java
import java.io.*;
public class PipedEchoServer extends Thread {
PipedInputStream readPipe;
PipedOutputStream writePipe;
PipedEchoServer(PipedInputStream readPipe, PipedOutputStream writePipe){
this.readPipe = readPipe;
this.writePipe = writePipe;
System.out.println("Server is starting . . .");
start();
}
public void run(){
while(true) {
try{
int ch = readPipe.read();
ch = Character.toUpperCase((char)ch);
writePipe.write(ch);
Bin Son: Ng B Hng - Nguyn Cng Huy
54
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
}
catch (IOException ie) { System.out.println("Echo Server Error: "+ie ); }
}
}
}
1.4.2. Lp PipedEchoClient
Hy lu chng trnh sau vo tp tin PipedEchoClient.java
import java.io.*;
public class PipedEchoClient extends Thread {
PipedInputStream readPipe;
PipedOutputStream writePipe;
PipedEchoClient(PipedInputStream readPipe, PipedOutputStream writePipe){
this.readPipe = readPipe;
this.writePipe = writePipe;
System.out.println("Client creation");
start();
}
public void run(){
while(true) {
try {
int ch=System.in.read();
writePipe.write(ch);
ch = readPipe.read();
System.out.print((char)ch);
}
catch(IOException ie){
System.out.println("Echo Client Error: "+ie );
}
}
}
}
1.4.3. Lp PipedEcho
Hy lu chng trnh sau vo tp tin PipedEcho.java
import java.io.*;
public class PipedEcho {
public static void main(String argv[]){
try{
PipedOutputStream cwPipe = new PipedOutputStream();
PipedInputStream crPipe = new PipedInputStream();
PipedOutputStream swPipe = new PipedOutputStream(crPipe);
PipedInputStream srPipe = new PipedInputStream(cwPipe);
PipedEchoServer server = new PipedEchoServer(srPipe,swPipe);
PipedEchoClient client = new PipedEchoClient(crPipe,cwPipe);
} catch(IOException ie) {
System.out.println("Pipe Echo Error:"+ie);
}
Bin Son: Ng B Hng - Nguyn Cng Huy
55
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
}
}


1.4.5. Bin dch v thc thi chng trnh
Bin dch v thc thi chng trnh theo cch sau:

Nhp vo bn phm chui k t m bn mun ri nhp phm Enter. Bn s thy
chui k t in hoa ca chui va nhp xut hin trn mn hnh.
Bin Son: Ng B Hng - Nguyn Cng Huy
56
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
CHNG 4
Socket
Mc ch
Chng ny nhm gii thiu v cch thc xy dng ng dng Client-Server trn
mng TCP/IP theo c hai ch C ni kt (TCP) v Khng ni kt (UDP).
Yu cu
Sau khi hon tt chng ny, bn c th:
Gii thch c Socket l g, vai tr ca s hiu cng (Port) v a ch IP
trong c ch Socket.
Phn bit c s khc bit ca hai loi Protocol TCP v UDP.
Trnh by c cc bc xy dng mt chng trnh Client-Server s dng
Socket lm phng tin giao tip trong c hai ch : C ni kt v khng ni
kt.
Lit k cc lp h tr lp trnh Socket ca Java.
Xy dng c cc chng trnh Client s dng Sokcet ch c ni kt
bng ngn ng Java.
Xy dng c cc chng trnh Server s dng Sokcet ch c ni kt
phc v tun t v phc v song song bng ngn ng Java.
Xy dng c cc chng trnh Client-Server s dng Sokcet ch
khng ni kt bng ngn ng Java.
T xy dng c cc Protocol mi cho ng dng ca mnh.















Bin Son: Ng B Hng - Nguyn Cng Huy
57
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.1. Gii thiu v socket
1.1.1. Gii thiu
Socket l mt giao din lp trnh ng dng (API-Application Programming
Interface). N c gii thiu ln u tin trong n bn UNIX - BSD 4.2. di dng cc
hm h thng theo c php ngn ng C (socket(), bind(), connect(), send(), receive(),
read(), write(), close() ,..). Ngy nay, Socket c h tr trong hu ht cc h iu hnh
nh MS Windows, Linux v c s dng trong nhiu ngn ng lp trnh khc nhau: nh
C, C++, Java, Visual Basic, Visual C++, . . .
Socket cho php thit lp cc knh giao tip m hai u knh c nh du bi hai
cng (port). Thng qua cc cng ny mt qu trnh c th nhn v gi d liu vi cc qu
trnh khc.

Hnh 4.1 M hnh Socket
C hai kiu socket:
1. Socket kiu AF_UNIX ch cho php giao tip gia cc qu trnh trong cng
mt my tnh
2. Socket kiu AF_INET cho php giao tip gia cc qu trnh trn nhng my
tnh khc nhau trn mng.
1.1.2. S hiu cng (Port Number) ca socket
c th thc hin cc cuc giao tip, mt trong hai qu trnh phi cng b s hiu
cng ca socket m mnh s dng. Mi cng giao tip th hin mt a ch xc nh trong
h thng. Khi qu trnh c gn mt s hiu cng, n c th nhn d liu gi n cng
ny t cc qu trnh khc. Qu trnh cn li cng c yu cu to ra mt socket.
Ngoi s hiu cng, hai bn giao tip cn phi bit a ch IP ca nhau. a ch IP
gip phn bit my tnh ny vi my tnh kia trn mng TCP/IP. Trong khi s hiu cng
dng phn bit cc qu trnh khc nhau trn cng mt my tnh.
Bin Son: Ng B Hng - Nguyn Cng Huy
58
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng

Hnh 4.2 Cng trong Socket
Trong hnh trn, a ch ca qu trnh B1 c xc nh bng 2 thng tin: (Host B,
Port B1):
a ch my tnh c th l a ch IP dng 203.162.36.149 hay l a ch theo dng
tn min nh www.cit.ctu.edu.vn
S hiu cng gn cho Socket phi duy nht trn phm vi my tnh , c gi tr
trong khong t 0 n 65535 (16 bits). Trong , cc cng t 1 n 1023 c gi l cng
h thng c dnh ring cho cc qu trnh ca h thng.
Cc cng mc nh ca 1 s dch v mng thng dng:

S hiu cng Qu trnh h thng
7 Dch v Echo
21 Dch v FTP
23 Dch v Telnet
25 Dch v E-mail (SMTP)
80 Dch v Web (HTTP)
110 Dch v E-mail (POP)




Bin Son: Ng B Hng - Nguyn Cng Huy
59
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng

1.1.3. Cc ch giao tip
Xt kin trc ca h thng mng TCP/IP

Hnh 4.3 B giao thc TCP/IP
Tng vn chuyn gip chuyn tip cc thng ip gia cc chng trnh ng dng
vi nhau. N c th hot ng theo hai ch :
Giao tip c ni kt, nu s dng giao thc TCP
Hoc giao tip khng ni kt, nu s dng giao thc UDP
Socket l giao din gia chng trnh ng dng vi tng vn chuyn. N cho php
ta chn giao thc s dng tng vn chuyn l TCP hay UDP cho chng trnh ng dng
ca mnh.
Bng sau so snh s khc bit gia hai ch giao tip c ni kt v khng ni kt:

Ch c ni kt (TCP) Ch khng ni kt (UDP)
Tn ti knh giao tip o gia
hai bn giao tip
Khng tn ti knh giao tip o
gia hai bn giao tip
D liu c gi i theo ch
bo m: c kim tra li. truyn
li gi tin li hay mt, bo m
th t n ca cc gi tin . . .
D liu c gi i theo ch
khng bo m: Khng kim tra
li, khng pht hin khng
truyn li gi tin b li hay mt,
khng bo m th t n ca
cc gi tin . . .
D liu chnh xc, Tc truyn
chm.
D liu khng chnh xc, tc
truyn nhanh.
Thch hp cho cc ng dng cn
tc , khng cn chnh xc cao:
truyn m thanh, hnh nh . . .
Bin Son: Ng B Hng - Nguyn Cng Huy
60
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng

1.2. Xy dng ng dng Client-Server vi Socket
Socket l phng tin hiu qu xy dng cc ng dng theo kin trc Client-
Server. Cc ng dng trn mng Internet nh Web, Email, FTP l cc v d in hnh.
Phn ny trnh by cc bc c bn trong vic xy dng cc ng dng Client-
Server s dng Socket lm phng tin giao tip theo c hai ch : C ni kt v khng
ni kt.
1.2.1. M hnh Client-Server s dng Socket ch c ni kt (TCP)
Giai on 1: Server to Socket, gn s hiu cng v lng nghe yu cu ni kt.

socket(): Server yu cu to mt socket c th s dng cc dch v ca
tng vn chuyn.
bind(): Server yu cu gn s hiu cng (port) cho socket.
listen(): Server lng nghe cc yu cu ni kt t cc client trn cng c
gn.
Server sn sng phc v Client.
Giai on 2: Client to Socket, yu cu thit lp mt ni kt vi Server.

socket(): Client yu cu to mt socket c th s dng cc dch v ca tng
vn chuyn, thng thng h thng t ng gn mt s hiu cng cn rnh
cho socket ca Client.
connect(): Client gi yu cu ni kt n server c a ch IP v Port xc nh.
Bin Son: Ng B Hng - Nguyn Cng Huy
61
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
accept(): Server chp nhn ni kt ca client, khi mt knh giao tip o
c hnh thnh, Client v server c th trao i thng tin vi nhau thng qua
knh o ny.
Giai on 3: Trao i thng tin gia Client v Server.

Sau khi chp nhn yu cu ni kt, thng thng server thc hin lnh read()
v nghn cho n khi c thng ip yu cu (Request Message) t client gi
n.
Server phn tch v thc thi yu cu. Kt qu s c gi v client bng lnh
write().
Sau khi gi yu cu bng lnh write(), client ch nhn thng ip kt qu
(ReplyMessage) t server bng lnh read().
Trong giai on ny, vic trao i thng tin gia Client v Server phi tun th giao
thc ca ng dng (Dng thc v ngha ca cc thng ip, qui tc bt tay, ng b
ha,... ). Thng thng Client s l ngi gi yu cu n Server trc.
Nu chng ta pht trin ng dng theo cc Protocol nh ngha sn, chng ta
phi tham kho v tun th ng nhng qui nh ca giao thc. Bn c th tm c m t
chi tit ca cc Protocol c chun ha trong cc ti liu RFC (Request For
Comments). Ngc li, nu chng ta pht trin mt ng dng Client-Server ring ca
mnh, th cng vic u tin chng ta phi thc hin l i xy dng Protocol cho ng dng.
Giai on 4: Kt thc phin lm vic.

Bin Son: Ng B Hng - Nguyn Cng Huy
62
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
Cc cu lnh read(), write() c th c thc hin nhiu ln (k hiu bng
hnh ellipse).
Knh o s b xa khi Server hoc Client ng socket bng lnh close().
Nh vy ton b tin trnh din ra nh sau:

1.2.2. M hnh Client-Server s dng Socket ch khng ni kt
(UDP)
Giai on 1: Server to Socket - gn s hiu cng.

o socket(): Server yu cu to mt socket c th s dng cc dch v ca
tng vn chuyn.
o bind(): Server yu cu gn s hiu cng cho socket..
Giai on 2: Client to Socket.
Bin Son: Ng B Hng - Nguyn Cng Huy
63
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng


Giai on 3: Trao i thng tin gia Client v Server.

Sau khi to Socket xong, Client v Server c th trao i thng tin qua li vi nhau
thng qua hai hm sendto() v recvfrom(). n v d liu trao i gia Client v Server l
cc Datagram Package (Gi tin th tn). Protocol ca ng dng phi nh ngha khun
dng v ngha ca cc Datagram Package. Mi Datagram Package c cha thng tin v
a ch ngi gi v ngi nhn (IP, Port).
1.3. Socket di ngn ng Java
Java h tr lp trnh mng thng qua cc lp trong gi java.net. Mt s lp tiu
biu c dng cho lp trnh Client-Server s dng socket lm phng tin giao tip nh:
InetAddress: Lp ny qun l a ch Internet bao gm a ch IP v tn my
tnh.
Socket: H tr cc phng thc lin quan n Socket cho chng trnh Client
ch c ni kt.
ServerSocket: H tr cc phng thc lin quan n Socket cho chng trnh
Server ch c ni kt.
DatagramSocket: H tr cc phng thc lin quan n Socket ch
khng ni kt cho c Client v Server.
DatagramPacket: Lp ci t gi tin dng th tn ngi dng (Datagram
Packet) trong giao tip gia Client v Server ch khng ni kt.
Bin Son: Ng B Hng - Nguyn Cng Huy
64
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.3.1. Xy dng chng trnh Client ch c ni kt
Cc bc tng qut:
1. M mt socket ni kt n server bit a ch IP (hay tn min) v s hiu
cng.
2. Ly InputStream v OutputStream gn vi Socket.
3. Tham kho Protocol ca dch v nh dng ng d liu trao i vi
Server.
4. Trao i d liu vi Server nh vo cc InputStream v OutputStream.
5. ng Socket trc khi kt thc chng trnh.

1.3.1.1. Lp java.net.Socket
Lp Socket h tr cc phng thc cn thit xy dng cc chng trnh client s
dng socket ch c ni kt. Di y l mt s phng thc thng dng xy
dng Client:
public Socket(String HostName, int PortNumber) throws IOException
Phng thc ny dng ni kt n mt server c tn l HostName, cng l
PortNumber. Nu ni kt thnh cng, mt knh o s c hnh thnh gia Client v
Server.
HostName: a ch IP hoc tn logic theo dng tn min.
PortNumber: c gi tr t 0 ..65535
V d: M socket v ni kt n Web Server ca khoa Cng Ngh Thng Tin, i
Hc Cn Th:
Socket s = new Socket(www.cit.ctu.edu.vn,80);
Hoc: Socket s = new Socket(203.162.36.149,80);
public InputStream getInputStream()
Phng thc ny tr v InputStream ni vi Socket. Chng trnh Client dng
InputStream ny nhn d liu t Server gi v.
V d: Ly InputStream ca Socket s:
InputStream is = s.getInputStream();
public OutputStream getOutputStream()
Phng thc ny tr v OutputStream ni vi Socket. Chng trnh Client dng
OutputStream ny gi d liu cho Server.
V d: Ly OutputStream ca Socket s:
OutputStream os = s.getOutputStream();
public close()
Phng thc ny s ng Socket li, gii phng knh o, xa ni kt gia Client v
Server.
Bin Son: Ng B Hng - Nguyn Cng Huy
65
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
V d: ng Socket s:
s.close();
1.3.1.2. Chng trnh TCPEchoClient
Trn h thng UNIX, Dch v Echo c thit k theo kin trc Client-Server s
dng Socket lm phng tin giao tip. Cng mc nh dnh cho Echo Server l 7, bao
gm c hai ch c ni kt v khng ni kt.
Chng trnh TCPEchoClient s ni kt n EchoServer ch c ni kt, ln
lt gi n Echo Server 10 k t t 0 n '9', ch nhn kt qu tr v v hin th chng
ra mn hnh.
Hy lu chng trnh sau vo tp tin TCPEchoClient.java
import java.io.*;
import java.net.Socket;

public class TCPEchoClient{
public static void main(String args[]){
try {
Socket s = new Socket(args[0],7); // Ni kt n Server
InputStream is = s.getInputStream(); // Ly InputStream
OutputStream os = s.getOutputStream(); // Ly OutputStream
for (int i='0'; i<='9';i++){ // Gui 0 ->9 den EchoServer
os.write(i); // Gi 1 k t sang Server
int ch = is.read(); // Ch nhn 1 k t t Server
System.out.print((char)ch); // In k t nhn c ra mn hnh
}
} //try
catch(IOException ie){
System.out.println("Loi: Khong tao duoc socket");
} //catch
} //main
}
Bin dch v thc thi chng trnh nh sau:

Chng trnh ny nhn mt i s l a ch IP hay tn min ca my tnh m
Echo Server ang chy. Trong h thng mng TCP/IP mi my tnh c gn mt a ch
IP cc b l 127.0.0.1 hay c tn l localhost. Trong v d trn, chng trnh Client ni
kt n Echo Server trn cng my vi n.
Bin Son: Ng B Hng - Nguyn Cng Huy
66
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.3.2. Xy dng chng trnh Server ch c ni kt
1.3.2.1. Lp java.net.ServerSocket
Lp ServerSocket h tr cc phng thc cn thit xy dng cc chng trnh
Server s dng socket ch c ni kt. Di y l mt s phng thc thng dng
xy dng Server:
public ServerSocket(int PortNumber);
Phng thc ny to mt Socket vi s hiu cng l PortNumber m sau Server
s lng nghe trn cng ny.
V d: To socket cho Server vi s hiu cng l 7:
ServerSocket ss = new ServerSocket(7);
public Socket accept()
Phng thc ny lng nghe yu cu ni kt ca cc Client. y l mt phng thc
hot ng ch nghn. N s b nghn cho n khi c mt yu cu ni kt ca client
gi n.
Khi c yu cu ni kt ca Client gi n, n s chp nhn yu cu ni kt, tr v
mt Socket l mt u ca knh giao tip o gia Server v Client yu cu ni kt.
V d: Socket ss ch nhn yu cu ni kt:
Socket s = ss.accept();
Server sau s ly InputStream v OutputStream ca Socket mi s giao tip
vi Client.
1.3.2.2. Xy dng chng trnh Server phc v tun t
Mt Server c th c ci t phc v cc Client theo hai cch: phc v tun t
hoc phc v song song.
Trong ch phc v tun t, ti mt thi im Server ch chp nhn mt yu cu
ni kt. Cc yu cu ni kt ca cc Client khc u khng c p ng (a vo hng
i).
Ngc li trong ch phc v song song, ti mt thi im Server chp nhn
nhiu yu cu ni kt v phc v nhiu Client cng lc.
Cc bc tng qut ca mt Server phc v tun t
1. To socket v gn s hiu cng cho server.
2. Lng nghe yu cu ni kt.
3. Vi mt yu cu ni kt c chp nhn thc hin cc bc sau:
o Ly InputStream v OutputStream gn vi Socket ca knh o va
c hnh thnh.
o Lp li cng vic sau:
Ch nhn cc yu cu (cng vic).
Phn tch v thc hin yu cu.
To thng ip tr li.
Gi thng ip tr li v Client.
Nu khng cn yu cu hoc Client kt thc, ng Socket v
quay li bc 2.
Bin Son: Ng B Hng - Nguyn Cng Huy
67
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng



1.3.2.3. Chng trnh STCPEchoServer
STCPEchoServer ci t mt Echo Server phc v tun t ch c ni kt.
Server lng nghe trn cng mc nh s 7.
Hy lu chng trnh sau vo tp tin STCPEchoServer.java
import java.net.*;
import java.io.*;
public class STCPEchoServer {
public final static int defaultPort = 7;
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(defaultPort);
while (true) {
try {
Socket s = ss.accept();
OutputStream os = s.getOutputStream();
InputStream is = s.getInputStream();
int ch=0;
while(true) {
ch = is.read();
if(ch == -1) break;
os.write(ch);
}
s.close();
}
catch (IOException e) {
System.err.println(" Connection Error: "+e);
}
}
}
catch (IOException e) {
Bin Son: Ng B Hng - Nguyn Cng Huy
68
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
System.err.println(" Server Creation Error:"+e);
}
}
}
Bin dch v thc thi chng trnh theo cch sau:

M mt ca s DOS khc v thc thi chng trnh TCPEchoClient ta c kt qu
nh sau:

Hai chng trnh ny c th nm trn hai my khc nhau. Trong trng hp khi
thc hin chng trnh TCPEchoClient phi ch nhp ng a ch IP ca my tnh ang
chy chng trnh STCPEchoServer.
Xem a ch IP ca mt my tnh Windows bng lnh ipconfig.
1.3.2.4. Server phc v song song
Cc bc tng qut ca mt Server phc v song song
Server phc v song song gm 2 phn thc hin song song nhau:
Phn 1: X l cc yu cu ni kt.
Phn 2: X l cc thng ip yu cu
t khch hng.
C cu trc nh hnh sau, trong Phn 1
l (Dispatcher Thread), Phn 2 l cc (Worker
Thread)
Phn 1: Lp li cc cng vic sau:
Lng nghe yu cu ni kt ca khch
hng.
Bin Son: Ng B Hng - Nguyn Cng Huy
69 Hnh 4.5 Server ch song song
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
Chp nhn mt yu cu ni kt.
o To knh giao tip o mi vi khch hng.
o To Phn 2 x l cc thng ip yu cu ca khch hng.
Phn 2: Lp li cc cng vic sau:
Ch nhn thng ip yu cu ca khch hng.
Phn tch v x l yu cu.
Gi thng ip tr li cho khch hng.
Phn 2 s kt thc khi knh o b xa i.
Phn 2 Vi mi Client, trn Server s c mt x l yu cu ca khch hng.
Nh vy ti mt thi im bt k lun tn ti 1 Phn 1 v 0 hoc nhiu Phn 2.
Do Phn 2 thc thi song song vi Phn 1 cho nn n c thit k l mt Thread.
1.3.2.5. Chng trnh PTCPEchoServer
PTCPEchoServer ci t mt Echo Server phc v song song ch c ni kt.
Server lng nghe trn cng mc nh l 7. Chng trnh ny gm 2 lp:
Lp TCPEchoServer, ci t cc chc nng ca Phn 1 - x l cc yu cu
ni kt ca TCPEchoClient.
Lp RequestProcessing, l mt Thread ci t cc chc nng ca Phn 2 - X
l cc thng ip yu cu.
Hy lu chng trnh sau vo tp tin PTCPEchoServer.java
import java.net.*;
import java.io.*;
public class PTCPEchoServer {
public final static int defaultPort = 7; // Cng mc nh
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(defaultPort); //To socket cho server
while (true) {
try {
Socket s = ss.accept(); // Lng nghe cc yu cu ni kt
RequestProcessing rp = new RequestProcessing(s); // To phn x l
rp.start(); // Khi ng phn x l cho Client hin ti
}
catch (IOException e) {
System.out.println("Connection Error: "+e);
}
}
}
catch (IOException e) {
System.err.println("Create Socket Error: "+e);
}
}
}

Bin Son: Ng B Hng - Nguyn Cng Huy
70
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng



class RequestProcessing extends Thread {
Socket channel; //Socket ca knh o ni vi Client hin ti
public RequestProcessing(Socket s){
channel = s; // Nhn socket ca knh o ni vi Client
}
public void run() {
try {
OutputStream os = channel.getOutputStream();
InputStream is = channel.getInputStream();
while (true) {
int n = is.read(); // Nhn k t t Client
if (n == -1) break; // Thot nu knh o b xa
os.write(n); // Gi k t nhn c v Client
}
}
catch (IOException e) {
System.err.println("Request Processing Error: "+e);
}
}
}
Bin dch v thc thi chng trnh nh sau:

Sau m thm 2 ca s DOS khc thc thi chng trnh TCPEchoClient ni
kt ti PTCPEchoServer. Ta s nhn thy rng PTCPEchoServer c kh nng phc v
ng thi nhiu Client.
1.3.3. Xy dng chng trnh Client - Server ch khng ni kt
Khi s dng socket, ta c th chn giao thc UDP cho lp vn chuyn. UDP vit tt
ca User Datagram Protocol, cung cp c ch vn chuyn khng bo m v khng ni
kt trn mng IP, ngc vi giao thc vn chuyn tin cy, c ni kt TCP.
C giao thc TCP v UDP u phn d liu ra thnh cc gi tin. Tuy nhin TCP c
thm vo nhng tiu (Header) vo trong gi tin cho php truyn li nhng gi tin
tht lc v tp hp cc gi tin li theo th t ng n. UDP khng cung cp tnh nng
Bin Son: Ng B Hng - Nguyn Cng Huy
71
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
ny, nu mt gi tin b tht lc hoc b li, n s khng c truyn li, v th t n ch
ca cc gi tin cng khng ging nh th t lc n c gi i.
Tuy nhin, v tc , UDP s truyn nhanh gp 3 ln TCP. Cho nn chng thng
c dng trong cc ng dng i hi thi gian truyn ti ngn v khng cn tnh chnh
xc cao, v d truyn m thanh, hnh nh . . .
M hnh client - server s dng lp ServerSocket v Socket trn s dng giao
thc TCP. Nu mun s dng m hnh client - server vi giao thc UDP, ta s dng hai
lp java.net.DatagramSocket v java.net.DatagramPacket.
DatagramSocket c s dng truyn v nhn cc DatagramPacket. D liu
c truyn i l mt mng nhng byte, chng c gi vo trong lp DatagramPacket.
Chiu di ca d liu ti a c th a vo DatagramPacket l khong 60.000 byte (ph
thuc vo dng ng truyn). Ngoi ra DatagramPacket cn cha a ch IP v cng ca
qu trnh gi v nhn d liu.
Cng trong giao thc TCP v UDP c th trng nhau. Trn cng mt my tnh, bn
c th gn cng 20 cho socket dng giao thc TCP v cng 20 cho socket s dng giao
thc UDP.
1.3.3.1. Lp DatagramPacket
Lp ny dng ng gi d liu gi i. Di y l cc phng thc thng s
dng thao tc trn d liu truyn / nhn qua DatagramSocket.
public DatagramPacket(byte[] b, int n)
L phng thc khi to, cho php to ra mt DatagramPacket cha n bytes
d liu u tin ca mng b. (n phi nh hn chiu di ca mng b)
Phng thc tr v mt i tng thuc lp DatagramePacket
V d: To DatagramPacket nhn d liu:
byte buff[] = new byte[60000]; // Ni cha d liu nhn c
DatagramPacket inPacket = new Datagrampacket(buff, buff.lenth);
public DatagramPacket(byte[] b, int n, InternetAddress ia, int port)
Phng thc ny cho php to mt DatagramPacket cha d liu v c a ch
ca my nhn d liu.
Phng thc tr v mt i tng thuc lp DatagramePacket
V d: To DatagramPacket cha chui "My second UDP Packet", vi a ch my
nhn l www.cit.ctu.edu.vn, cng ca qu trnh nhn l 19:
try {//a ch Internet ca my nhn
InetAddress ia = InetAddess.getByName("www.cit.ctu.edu.vn");
int port = 19; // Cng ca socket nhn
String s = "My second UDP Packet"; // D liu gi i
byte[] b = s.getBytes(); // i chui thnh mng bytes
// To gi tin gi i
DatagramPacket outPacket = new DatagramPacket(b, b.length, ia, port);
}
catch (UnknownHostException e) {
Bin Son: Ng B Hng - Nguyn Cng Huy
72
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
System.err.println(e);
}
Cc phng thc ly thng tin trn mt DatagramPacket nhn c
Khi nhn c mt DatagramPacket t mt qu trnh khc gi n, ta c th ly
thng tin trn DatagramPacket ny bng cc phng thc sau:
public synchronized() InternetAddress getAddress() : a ch my gi
public synchronized() int getPort() : Cng ca qu trnh gi
public synchronized() byte[] getData() : D liu t gi tin
public synchronized() int getLength() : Chiu di ca d liu trong gi tin
Cc phng thc t thng tin cho gi tin gi
Trc khi gi mt DatagramPacket i, ta c th t thng tin trn DatagramPacket
ny bng cc phng thc sau:
public synchronized() void setAddress(IntermetAddress dis) : t a ch my
nhn.
public synchronized() void setPort(int port) : t cng qu trnh nhn
public synchronized() void setData(byte buffer[]) : t d liu gi
public synchronized() void setLength(int len) : t chiu di d liu gi
1.3.3.2. Lp DatagramSocket
Lp ny h tr cc phng thc sau gi / nhn cc DatagramPacket
public DatagramSocket() throws SocketException
To Socket kiu khng ni kt cho Client. H thng t ng gn s hiu cng
cha s dng cho socket.
V d: To mt socket khng ni kt cho Client:
try{
DatagramSocket ds = new DatagramSocket();
} catch(SocketException se) {
System.out.print("Create DatagramSocket Error: "+se);
}
public DatagramSocket(int port) throws SocketException
To Socket kiu khng ni kt cho Server vi s hiu cng c xc nh
trong tham s (port).
V d: To mt socket khng ni kt cho Server vi s hiu cng l 7:
try{
DatagramSocket dp = new DatagramSocket(7);
} catch(SocketException se) {
System.out.print("Create DatagramSocket Error: "+se);
}

Bin Son: Ng B Hng - Nguyn Cng Huy
73
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
public void send(DatagramPacket dp) throws IOException
Dng gi mt DatagramPacket i.
V d: Gi chui "My second UDP Packet", cho qu trnh a ch
www.cit.ctu.edu.vn, cng nhn l 19:
try {
DatagramSocket ds = new DatagramSocket(); //To Socket
//a ch Internet ca my nhn
InetAddress ia = InetAddess.getByName("www.cit.ctu.edu.vn");
int port = 19; // Cng ca qu trnh nhn
String s = "My second UDP Packet"; // D liu cn gi
byte[] b = s.getBytes(); // i sang mng bytes
// To gi tin
DatagramPacket outPacket = new DatagramPacket(b, b.length, ia, port);
ds.send(outPacket); // Gi gi tin i
}
catch (IOException e) {
System.err.println(e);
}
public synchronized void receive(Datagrampacket dp) throws
IOException
Ch nhn mt DatagramPacket. Qu trnh s b nghn cho n khi c d liu
n.
V d:
try {
DatagramSocket ds = new DatagramSocket(); //To Socket
byte[] b = new byte[60000]; // Ni cha d liu nhn c
DatagramPacket inPacket = new DatagramPacket(b, b.length); // To gi tin
ds.receive(inPacket); // Ch nhn gi tin
}
catch (IOException e) {
System.err.println(e);
}
1.3.3.3. Chng trnh UDPEchoServer
Chng trnh UDPEchoServer ci t Echo Server ch khng ni kt, cng
mc nh l 7. Chng trnh ch nhn tng gi tin, ly d liu ra khi gi tin nhn c v
gi ngc d liu v Client.
Lu chng trnh sau vo tp tin UDPEchoServer.java




Bin Son: Ng B Hng - Nguyn Cng Huy
74
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng

import java.net.*;
import java.io.*;
public class UDPEchoServer {
public final static int port = 7; // Cng mc nh ca Server
public static void main(String[] args) {
try {
DatagramSocket ds = new DatagramSocket(port); // To Socket vi cng l 7
byte[] buffer = new byte[6000]; // Vng m cha d liu cho gi tin nhn
while(true) { // To gi tin nhn
DatagramPacket incoming = new DatagramPacket(buffer,buffer.length);
ds.receive(incoming); // Ch nhn gi tin gi n
// Ly d liu khi gi tin nhn
String theString = new String(incoming.getData(),0,incoming.getLength());
// To gi tin gi cha d liu va nhn c
DatagramPacket outsending = new DatagramPacket(theString.getBytes(),
incoming.getLength(),incoming.getAddress(), incoming.getPort());
ds.send(outsending);
}
}
catch (IOException e) {
System.err.println(e);
}
}
}
Bin dch v thc thi chng trnh nh sau

1.3.3.4. Chng trnh UDPEchoClient
Chng trnh ny cho php ngi s dng nhn cc chui t bn phm, gi chui
sang EchoServer ch khng ni kt cng s 7, ch nhn v in d liu t Server gi
v ra mn hnh.
Lu chng trnh sau vo tp tin UDPEchoClient.java


Bin Son: Ng B Hng - Nguyn Cng Huy
75
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng


import java.net.*;
import java.io.*;
public class UDPEchoClient extends Object{
public final static int serverPort = 7; // Cng mc nh ca Echo Server
public static void main(String[] args) {
try {
if (args.length ==0) { // Kim tra tham s, l a ch ca Server
System.out.print("Syntax: java UDPClient HostName");
return;
}
DatagramSocket ds = new DatagramSocket(); // To DatagramSocket
InetAddress server = InetAddress.getByName(args[0]); // a ch Server
while(true) {
InputStreamReader isr = new InputStreamReader(System.in); // Nhp
BufferedReader br = new BufferedReader(isr); // mt chui
String theString = br.readLine(); // t bn phm
byte[] data = theString.getBytes(); // i chui ra mng bytes
// To gi tin gi
DatagramPacket dp = new DatagramPacket(data,data.length,server, serverPort);
ds.send(dp); // Send gi tin sang Echo Server
byte[] buffer = new byte[6000]; // Vng m cho d liu nhn
// Gi tin nhn
DatagramPacket incoming = new DatagramPacket(buffer, buffer.length);
ds.receive(incoming); // Ch nhn d liu t EchoServer gi v
// i d liu nhn c dng mng bytes ra chui v in ra mn hnh
System.out.println(new String(incoming.getData(), 0, incoming.getLength()));
}
}
catch (IOException e) {
System.err.println(e);
}
}
}
Bin dch v thc thi chng trnh nh sau:

Bin Son: Ng B Hng - Nguyn Cng Huy
76
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
Ch , khi thc hin chng trnh UDPEchoClient phi a vo i s l a ch
ca my tnh ang thc thi chng trnh UDPEchoServer. Trong v d trn, Server v
Client cng chy trn mt my nn a ch ca UDPEchoServer l localhost (hay
127.0.0.1). Nu UDPEchoServer chy trn my tnh khc th khi thc thi, ta phi bit c
a ch IP ca my tnh v cung cp vo i s ca chng trnh. Chng hn, khi
UDPEchoServer ang phc v trn my tnh a ch 172.18.250.211, ta s thc thi
UDPEchoClient theo c php sau:
java UDPEchoClient 172.18.250.211
1.4. Bi tp p dng
Ch 1: Client ch c ni kt
Mc ch:
Vit cc chng trnh Client ni kt n cc server theo cc Protocol chun.
Yu cu
Sinh vin thc hin cc bi tp sau
o Bi 1 : Vit chng trnh nhn i s l mt URL. Ni kt n Web
Server trong URL nhn c, ly trang web v v in ra mn hnh theo
dng textfile (html).
Ch 2: Client - Server ch c ni kt
Mc ch:
o Vit cc chng trnh Client -Server theo ch c ni kt.
Yu cu
Sinh vin thc hin cc bi tp sau, vi mi bi tp hy thit k mt Server
phc v ch tun t v mt Server phc v ch song song.
o Bi 1: Vit chng trnh theo m hnh Client-Server s dng dng
Socket ch c ni kt. Trong :
+ Server lm nhim v c mt k t s t '0' n '9'.
( V d : nhn s 0 : tr v "khong" , 1 : tr v "mt" ; ... ... 9 : tr v
"chn", nu nhn k t khc s th tr v "Khng phi s nguyn" ).
+ Client s nhp vo 1 k t, gi qua Server, nhn kt qu tr v t
Server v th hin ln mn hnh
o Bi 2: Vit chng trnh theo m hnh Client-Server s dng Socket
ch c ni kt. Trong :
+ Server s nhn cc yu cu l mt chui c khun dng nh sau:
"OP Operant1 Operant2\n"
Trong :
- OP l mt k t ch php ton mun thc hin: '+','-', '*', '/'.
Bin Son: Ng B Hng - Nguyn Cng Huy
77
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
- Operant1, Operant2 l i s ca php ton.
- Cc thnh phn trn cch nhau bi 1 k t trng ' '.
- Kt thc yu cu bng k t xung dng '\n'.

Mi khi server nhn c mt thng ip n s thc hin php ton:
Operant1 OP Operant2 cho ra kt qu, sau i kt qu thnh
chui v gi v Client.

+ Client cho php ngi dng nhp cc php ton mun tnh theo cch
thc thng thng. V d: 100+200. Client to ra thng ip yu cu
theo ng dng do Server qui nh, m t v php ton mun Server
thc thi, ri gi sang Server, ch nhn kt qu tr v v in ra mn hnh.
Ch 3: Client-Server ch khng ni kt
Mc ch:
o Vit cc chng trnh Client -Server theo ch khng ni kt.
Yu cu
o Bi 1 : Vit chng trnh Talk theo ch khng ni kt. Cho php hai
ngi ngi trn hai my tnh c th tn gu (chat) vi nhau.
Bin Son: Ng B Hng - Nguyn Cng Huy
78
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
CHNG 5
RPC v RMI
Mc ch
Chng ny nhm gii thiu cch thc xy dng cc ng dng phn tn bng cc
c ch gi th tc t xa (RPC - Remote Procedure Call v RMI - Remote Method
Invocation)
Yu cu
Sau khi hon tt chng ny, bn c th:
nh ngha c ng dng phn tn l g.
Trnh by c kin trc ca mt ng dng phn tn xy dng theo c ch
gi th tc t xa (RPC).
Trnh by c kin trc ca mt ng dng phn tn (hay cn gi ng dng
i tng phn tn ) xy dng theo c ch RMI ca Java.
Trnh by c cc c ch lin quan khi xy dng mt ng dng theo kiu
RMI.
Trnh by c c ch vn hnh ca mt ng dng theo kiu RMI.
Gii thch c vai tr rmiregistry server.
Lit k c cc lp ca java h tr xy dng cc ng dng kiu RMI.
Trnh by chi tit cc bc phi qua khi xy dng mt ng dng theo kiu
RMI.
Bin son, bin dch v thc thi thnh cng chng trnh minh ha Hello.
Phn tch, thit k v ci t c cc chng trnh theo c ch RMI gii
quyt cc vn c th.













Bin Son: Ng B Hng - Nguyn Cng Huy
79
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.1. Li gi th tc xa (RPC- Remote Procedure Call)
1.1.1. Gii thiu
Li gi th tc xa l mt c ch cho php mt chng trnh c th gi thc thi mt
th tc (hay hm) trn mt my tnh khc. Trong chng trnh lc ny, tn ti hai loi th
tc: th tc cc b v th tc xa.
Th tc cc b l th tc c nh ngha, ci t v thc thi ti my ca
chng trnh.
Th tc xa l th tc c nh ngha, ci t v thc thi trn mt my tnh
khc.
C php gia li gi th tc cc b v xa th ging nhau. Tuy nhin, khi mt th
tc xa c gi n, mt thnh phn ca chng trnh gi l Stub s chuyn hng
kch hot mt th tc tng ng nm trn mt my tnh khc vi my ca chng trnh
gi. i vi ngi lp trnh, vic gi th tc xa v th tc cc b th ging nhau v mt c
php. y chnh l c ch cho php n gin ha vic xy dng cc ng dng Client-
Server. Trong h thng RPC, Server chnh l my tnh cung cp cc th tc xa cho php
cc chng trnh trn cc my tnh khc gi thc hin. Client chnh l cc chng trnh c
th gi cc th tc xa trong qu trnh tnh ton ca mnh.
Mt Client c th gi th tc xa ca nhiu hn mt my tnh. Nh vy s thc thi
ca chng trnh Client lc ny khng cn gi gn trn mt my tnh ca Client m n tri
rng trn nhiu my tnh khc nhau. y chnh l m hnh ca ng dng phn tn
(Distributed Application).
1.1.2. Kin trc ca chng trnh Client-Server ci t theo c ch li gi
th tc xa
Mt ng dng Client-Server theo c ch RPC c xy dng gm c su phn nh
s di y:

Hnh 5.1 Kin trc chng trnh kiu RPC
Bin Son: Ng B Hng - Nguyn Cng Huy
80
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
Phn Client l mt qu trnh ngi dng, ni khi to mt li gi th tc t xa. Mi
li gi th tc xa trn phn Client s kch hot mt th tc cc b tng ng nm trong
phn Stub ca Client.
Phn ClientStub cung cp mt b cc hm cc b m phn Client c th gi. Mi
mt hm ca ClientStub i din cho mt hm xa c ci t v thc thi trn Server.
Mi khi mt hm no ca ClientStub c gi bi Client, ClientStub s ng
gi mt thng ip m t v th tc xa tng ng m Client mun thc thi cng vi
cc tham s nu c. Sau n s nh h thng RPCRuntime cc b gi thng ip ny
n phn Server Stub ca Server.
Phn RPCRuntime qun l vic truyn thng ip thng qua mng gia my Client
v my Server. N m nhn vic truyn li, bo nhn, chn ng gi tin v m ha
thng tin.
RPCRuntime trn my Client nhn thng ip yu cu t ClientStub, gi n cho
RPCRuntime trn my Server bng lnh send(). Sau gi lnh wait() ch kt qu tr
v t Server.
Khi nhn c thng tip t RPCRuntime ca Client gi sang, RPCRuntime bn
pha server chuyn thng ip ln phn ServerStub.
ServerStub m thng ip ra xem, xc nh hm xa m Client mun thc hin
cng vi cc tham s ca n. ServerStub gi mt th tc tng ng nm trn phn Server.
Khi nhn c yu cu ca ServerStub, Server cho thc thi th tc c yu cu v
gi kt qu thc thi c cho ServerStub.
ServerStub ng gi kt qu thc trong mt gi tin tr li, chuyn cho phn
RPCRuntime cc b n gi sang RPCRuntime ca Client .
RPCRuntime bn pha Client chuyn gi tin tr li nhn c cho phn ClientStub.
ClientStub m thng ip cha kt qu thc thi v cho Client ti v tr pht ra li gi th
tc xa.
Trong cc thnh phn trn, RPCRuntime c cung cp bi h thng. ClientStub v
ServerStub c th to ra th cng (phi lp trnh) hay c th to ra bng cc cng c cung
cp bi h thng.
C ch RPC c h tr bi hu ht cc h iu hnh mng cng nh cc ngn ng
lp trnh.
1.2. Kch hot phng thc xa (RMI- Remote Method Invocation )
1.2.1. Gii thiu
RMI l mt s ci t c ch RPC trong ngn ng lp trnh hng i tng Java.
H thng RMI cho php mt i tng chy trn mt my o Java ny c th kch hot
mt phng thc ca mt i tng ang chy trn mt my o Java khc. i tng c
phng thc c gi t xa gi l cc i tng xa (Remote Object).
Mt ng dng RMI thng bao gm 2 phn phn bit: Mt chng trnh Server v
mt chng trnh Client.
Bin Son: Ng B Hng - Nguyn Cng Huy
81
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
Chng trnh Server to mt s cc Remote Object, to cc tham chiu
(reference) n chng v ch nhng chng trnh Client kch hot cc
phng thc ca cc Remote Object ny.
tham chiu Chng trnh Client ly mt n mt hoc nhiu Remote Object
trn Server v kch hot cc phng thc t xa thng qua cc tham chiu.
Mt chng trnh Client c th kch hot cc phng thc xa trn mt hay nhiu
Server. Tc l s thc thi ca chng trnh c tri rng trn nhiu my tnh. y chnh
l c im ca cc ng dng phn tn. Ni cch khc, RMI l c ch xy dng cc
ng dng phn tn di ngn ng Java.
1.2.2. Kin trc ca chng trnh Client-Server theo c ch RMI
Kin trc mt chng trnh Client-Server theo c ch RMI c m t nh hnh
di y:

Hnh 5.2 - Kin trc chng trnh kiu RMI
Trong :
Server l chng trnh cung cp cc i tng c th c gi t xa.
Client l chng trnh c tham chiu n cc phng thc ca cc i tng
xa trn Server.
Stub cha cc tham chiu n cc phng thc xa trn Server.
Skeleton n nhn cc tham chiu t Stub kch hot phng thc tng
ng trn Server.
Remote Reference Layer l h thng truyn thng ca RMI.
Con ng kch hot mt phng thc xa c m t nh hnh di y:
Bin Son: Ng B Hng - Nguyn Cng Huy
82
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng

Hnh 5.3 C ch hot ng ca RMI
1.2.3. Cc c ch lin quan trong mt ng dng i tng phn tn
Trong mt ng dng phn tn cn c cc c ch sau:
C ch nh v i tng xa (Locate remote objects): C ch ny xc nh
cch thc m chng trnh Client c th ly c

tham chiu (Stub) n cc
i tng xa. Thng thng ngi ta s dng mt Dch v danh b
(Naming Service) lu gi cc tham kho n cc i tng cho php gi t xa
m Client sau c th tm kim.
C ch giao tip vi cc i tng xa (Communicate with remote objects):
Chi tit ca c ch giao tip vi cc i tng xa c ci t bi h thng
RMI.

Ti cc lp dng bytecodes cho cc lp m n c chuyn ti qua li gia
My o (Load class bytecodes for objects that are passed around)

: V RMI
cho php cc chng trnh gi phng thc t xa trao i cc i tng vi
cc phng thc xa di dng cc tham s hay gi tr tr v ca phng
thc, nn RMI cn c c ch cn thit ti m Bytecodes ca cc i tng
t my o ny sang my o khc.
Hnh di y m t mt ng dng phn tn di RMI s dng dch v danh b
ly cc tham kho ca cc i tng xa. Trong :
Server ng k tn cho
i tng c th c
gi t xa ca mnh vi
Dch v danh b
(Registry Server).
Client tm i tng
xa thng qua tn
c ng k trn
Registry Server (looks
up) v tip gi cc
phng thc xa.
Hnh 5.4 Vai tr ca dch v tn
Bin Son: Ng B Hng - Nguyn Cng Huy
83
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
Hnh minh ha cng cho thy cch thc m h thng RMI s dng mt
WebServer sn c truyn ti m bytecodes ca cc lp qua li gia Client
v Server.
1.2.4. C ch vn hnh ca ca mt ng dng Client-Server theo kiu
RMI
Tin trnh vn hnh ca mt ng dng Client-Server theo kiu RMI din ra nh sau:
Bc 1: Server to ra cc i
tng cho php gi t xa cng vi
cc Stub v Skeleton ca chng.
Bc 2: Server s dng lp
Naming ng k tn cho mt
i tng t xa (1).
Bc 3: Naming ng k Stub
ca i tng t xa vi Registry
Server (2).
Bc 4: Registry Server sn sng
cung cp tham tho n i tng
t xa khi c yu cu (3).
Client yu cu Naming nh v i
tng xa qua tn c ng k
(phng thc lookup) vi dch v
tn (4).
Naming ti Stub ca i tng xa t dch v tn m i tng xa ng k
v Client (5).
Ci t i tng Stub v tr v tham kho i tng xa cho Client (6).
Client thc thi mt li gi phng thc xa thng qua i tng Stub (7).

















Bin Son: Ng B Hng - Nguyn Cng Huy
84
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.2.5. Cc lp h tr chng trnh theo kiu Client-Server trong Java
Java h tr cc lp cn thit ci t cc ng dng Client-Server theo kiu RMI
trong cc gi: java.rmi. Trong s cc lp thng c dng l:
java.rmi.Naming
java.rmi.RMISecurityManager
java.rmi.RemoteException;
java.rmi.server.RemoteObject
java.rmi.server.RemoteServer
java.rmi. server.UnicastRemoteObject
1.3. Xy dng mt ng dng phn tn vi RMI
Xy dng mt ng dng phn tn bng c ch RMI gm cc bc sau:
1. Thit k v ci t cc thnh phn ca ng dng.
2. Bin dch cc chng trnh ngun v to ra Stub v Skeleton.
3. To cc lp c th truy xut t mng cn thit.
4. Khi to ng dng
1.3.1. Thit k v ci t cc thnh phn ca ng dng.
u tin bn phi xc nh lp no l lp cc b, lp no l lp c gi t
xa. N bao gm cc bc sau:
nh ngha cc giao din cho cc phng thc xa (remote interfaces): Mt
remote interface m t cc phng thc m n c th c kch hot t xa bi
cc Client. i cng vi vic nh ngha Remote Interface l vic xc nh cc
lp cc b lm tham s hay gi tr tr v ca cc phng thc c gi t xa.

Ci t cc i tng t xa (remote objects): Cc Remote Object phi ci t
cho mt hoc nhiu Remote Interfaces c nh ngha. Cc lp ca
Remote Object class ci t cho cc phng thc c gi t xa c khai
bo trong Remote Interface v c th nh ngha v ci t cho c cc phng
thc c s dng cc b. Nu c cc lp lm i s hay gi tr tr v cho cc
phng thc c gi t xa th ta cng nh ngha v ci t chng.

Ci t cc chng trnh Client: Cc chng trnh Client c s dng cc
Remote Object c th c ci t bt k thi im no sau khi cc Remote
Interface c nh ngha.

1.3.2. Bin dch cc tp tin ngun v to Stubs v Skeleton
Giai on ny gm 2 bc: Bc th nht l dng chng trnh bin dch javac
bin dch cc tp tin ngun nh cc remote interface, cc lp ci t cho cc
remote interface, lp server, lp client v cc lp lin quan khc. K tip ta dng
trnh bin dch rmic to ra stub v skeleton cho cc i tng t xa t cc lp
ci t cho cc remote interface.

Bin Son: Ng B Hng - Nguyn Cng Huy
85
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.3.3. To cc lp c th truy xut t mng
To mt tp tin cha tt c cc file c lin quan nh cc remote interface stub,
cc lp h tr m chng cn thit phi ti v Client v lm cho tp tin ny c th
truy cp n thng qua mt Web server.
1.3.4. Thc thi ng dng
Thc thi ng dng bao gm vic thc thi rmiregistry server, thc thi server, v
thc thi client.
Tm li cc cng vic phi lm l:
To giao din (interface) khai bo cc phng thc c gi t xa ca i
tng.
To lp ci t (implement) cho giao din c khai bo.
Vit chng trnh Server.
Vit chng trnh Client.
Dch cc tp tin ngun theo dng RMI to ra cc lp tng ng v stub cho
client, skeleton cho server.
Khi ng dch v registry.
Thc hin chng trnh Server.
Thc thi chng trnh Client.
1.3.4. V d minh ha
Trong v d ny chng ta nh ngha mt phng thc String sayHello() c gi
t xa. Mi khi phng thc ny c kch hot n s tr v chui "Hello World" cho
Client gi n.
Di y l cc bc xy dng ng dng:
Bc 01: To giao din (interface) khai bo cc phng thc c gi t
xa ca i tng.
o C php tng qut:
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface InterfaceName extends Remote {
ReturnType remoteMethodOne() throws RemoteException;
ReturnType remoteMethodTwo() throws RemoteException;
. . .
}
o nh ngha remote interface c tn l HelloItf, c phng thc c
gi t xa l String sayHello() nh sau:
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface HelloItf extends Remote {
String sayHello() throws RemoteException;
}
Bin Son: Ng B Hng - Nguyn Cng Huy
86
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
Lu chng trnh ny vo tp tin HelloItf.java
Bc 02: To lp ci t (implement) cho giao din c khai bo:
o C php tng qut:
import java.rmi. server.UnicastRemoteObject;
import java.rmi.RemoteException;
public class RemoteClass extends UnicastRemoteObject implements
InterfaceName {
public RemoteClass() throws RemoteException {
super();
....... // Implement of Method
}
public ReturnType remoteMethodOne() throws RemoteException {
....... // Implement of Method
}
public ReturnType remoteMethodTwo() throws RemoteException {
....... // Definition of Method
}
}
o nh ngha lp ci t c tn l Hello ci t cho remote interface
HelloItf
import java.rmi. server.UnicastRemoteObject;
import java.rmi.RemoteException;
public class Hello extends UnicastRemoteObject implements HelloItf {
public Hello() throws RemoteException {
super();
}
public String sayHello() {
return "Hello World !";
}
}
Lu chng trnh ny vo tp tin Hello.java
Bc 03: Vit chng trnh Server:
o C php tng qut:
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;
public class ServerName {
public static void main(String args[]) {
if (System.getSecurityManager() == null) { // Ci t c ch bo mt
System.setSecurityManager(new RMISecurityManager());
}
try {
// To cc i tng t xa
Bin Son: Ng B Hng - Nguyn Cng Huy
87
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
RemoteClass remoteObject = new RemoteClass();

// ng k tn cho cc i tng t xa
Naming.rebind(RegistryName", remoteObject);
...
}
catch (Exception e) {
System.out.println(Error: . . . + e);
}
}
}
o To server c tn HelloServer cha mt i tng t xa obj thuc lp
ci t Hello. ng k tn cho i tng obj l HelloObject
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;
public class HelloServer {
public static void main(String args[]) {
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}
try {
Hello obj = new Hello();
Naming.rebind("HelloObject", obj);
System.out.println("HelloObject is registried");
}
catch (Exception e) {
System.out.println("Error: " + e);
}
}
}
Lu chng trnh ny vo tp tin HelloServer.java
Bc 04: Vit chng trnh Client:
o C php tng qut:
import java.rmi.Naming;
import java.rmi.RemoteException;
public class Client {
public static void main(String args[]) {
String remoteObjectURL = "rmi://NameServer/RegistryName;
Interfacename object = null;
try {
object = (InterfaceName)Naming.lookup(remoteObjectURL);
object.remoteMethodOne();
...
}
catch (Exception e) {
Bin Son: Ng B Hng - Nguyn Cng Huy
88
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
System.out.println(" Error: + e);
}
}
}
o To client c tn l HelloClient, tm i tng HelloObject trn
rmiregistry chng hn ti a ch 172.18.211.160. Gi phng thc
sayHello() v in kt qu tr v ra mn hnh.
import java.rmi.Naming;
import java.rmi.RemoteException;
public class HelloClient {
public static void main(String args[]) {
String helloURL = "rmi://172.18.211.160/HelloObject";
HelloItf object = null;
try {
object = (HelloItf)Naming.lookup( helloURL);
String message = object.sayHello();
System.out.println(message);
}
catch (Exception e) {
System.out.println("Client Error :" + e);
}
}
}
Lu chng trnh vo tp tin HelloClient.java
Bc 05: Dch cc tp tin ngun theo dng RMI to ra cc lp tng
ng v stub cho client, skeleton cho server:
o C php tng qut:
javac InterfaceName.java RemoteClass.java Server.java Client.java

( To ra cc lp InterfaceName.class RemoteClass.class Server.class
Client.class)
rmic RemoteClass
( To ra cc lp cho Skeleton v Stub: RemoteClass_Skel.class
RemoteClass_Stub.class)
o Bin dch cc lp trong Hello:
javac Hello.java HelloItf.java HelloServer.java HelloClient.java
rmic Hello.class


Bin Son: Ng B Hng - Nguyn Cng Huy
89
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng



Bc 06: Khi ng dch v rmiregistry
o C php tng qut:
start rmiregistry [port]
Cng mc nh l 1099.
o Khi ng dch v rmiregistry trn cng mc nh nh sau:

Khi rmiregistry server s chy trn mt ca s mi, gi nguyn ca s ny,
khng ng n li.
Bin Son: Ng B Hng - Nguyn Cng Huy
90
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng

Bc 07: Thc hin chng trnh Server
o C php tng qut:
java -Djava.security.policy =UrlOfPolicyFile ServerName
Trong UrlOfPolicyFile l a ch theo dng URL ca tp tin m t chnh
sch v bo mt m ngun ca Server (policy file). N qui nh "ai" (chng
trnh, my tnh, qu trnh trn) s c quyn download cc tp tin ca n trong
c stub. n gin trong phn ny ta cho php tt c mi ngi u c
quyn download cc tp tin ca Server. Khi trin khai cc ng dng tht s
ta phi c cc chnh sch bo mt nghim ngt hn (Tham kho ti liu v
Security ca Java). File policy c dng nh sau:
grant {
// Allow everything for now
permission java.security.AllPermission;
};
Lu ni dung trn vo tp tin c tn policy.java
o Thc thi HelloServer vi a tp tin plolicy nm th mc
D:\progs\policy.java

Bc 08: Thc thi chng trnh Client:
Bin Son: Ng B Hng - Nguyn Cng Huy
91
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
o C php tng qut
java ClientName
o Thc thi HelloClient vi a ch ca rmiregistry a vo trong tham s
thc thi c chng trnh HelloClient cn c hai class nm cng th mc vi
n l HelloItf.class v Hello_Stub.class.
1.4. Bi tp p dng
Mc ch:
Xy dng ng dng phn tn theo c ch RMI.
Yu cu
Sinh vin thc hin cc bi tp sau:
o Bi 1 : Xy dng mt ng dng phc v vic bn v my bay cho cc
i l phn tn cc tnh thnh khc nhau. ng dng ny c cc lp
sau:
Lp chuyn bay: i din cho mt chuyn bay
C cc thuc tnh: S hiu chuyn bay, Ngy gi bay,
Ni i, Ni n, Thi gian bay, Tng s gh, S lng
gh bn, S lng gh cn trng.
Cc phng thc trn mt chuyn bay: phng thc xem
thng tin v chuyn bay, phng thc mua v, phng
thc tr v. phc v cho nhiu i l cc phng thc
trn thuc loi uc gi t xa.
Lp Server, to ra nhiu chuyn bay v duy tr n cho php
cc i l thc hin cc giao dch trn chuyn bay c th.
Client l chng trnh cho php mi i l c quyn xem
thng tin v chuyn bay, mua v, tr v theo yu cu.
Mc lc
Bin Son: Ng B Hng - Nguyn Cng Huy
92
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
CHNG 1..........................................................................................................................1
Tng quan v lp trnh truyn thng....................................................................................1
1.1. C ch giao tip lin qu trnh l g ?.....................................................................2
1.2. Phn loi c ch giao tip lin qu trnh ................................................................2
1.3. M hnh tham kho OSI .........................................................................................3
1.4. Mng TCP/IP..........................................................................................................6
1.5. Dch v mng .........................................................................................................7
1.6. M hnh Client Server .........................................................................................7
1.6.1. Gii thiu.........................................................................................................7
1.6.2. V d v dch v Web......................................................................................8
1.6.3. Cc ch giao tip ........................................................................................9
1.6.3.1. Ch nghn :..........................................................................................9
1.6.3.2. Ch khng nghn:................................................................................9
1.7. Cc kiu kin trc chng trnh.............................................................................9
1.7.1. Kin trc n tng (Single-tier Architecture) ...............................................10
1.7.2. Kin trc hai tng (Two - Tier Architecture) ................................................10
1.7.2.1. Loi Fat Client........................................................................................11
1.7.2.2. Loi Fat Server .......................................................................................12
1.7.3. Kin trc a tng (N-Tier Architecture)........................................................12
1.8. Bi tp...................................................................................................................13
1.8.1. Bi tp bt buc.............................................................................................13
1.8.2. Bi tp gi ..................................................................................................13
Tm c v vit mt bo co khng qu 10 trang v giao thc POP3...............................13
CHNG 2........................................................................................................................14
S lc v ngn ng Java ..................................................................................................14
1.1. Gii thiu v ngn ng Java.................................................................................15
1.1.1. Lch s pht trin...........................................................................................15
1.1.2. Kh nng ca ngn ng Java.........................................................................15
1.1.2. Nhng c im ca ngn ng Java .............................................................15
1.1.3. My o Java (JMV - Java Virtual Machine) .................................................15
1.1.4. Hai kiu ng dng di ngn ng java.........................................................16
1.1.5. B pht trin ng dng Java (JDK- Java Development Kit) ........................16
1.1.6. Kiu d liu c bn di Java.......................................................................16
1.1.7. Cc php ton c bn ....................................................................................17
Bin Son: Ng B Hng - Nguyn Cng Huy
93
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.1.8. Qui cch t tn trong Java ...........................................................................17
1.2. Chng trnh ng dng kiu Application ............................................................18
1.2.1. Chng trnh HelloWorld .............................................................................19
1.2.3. Bin son chng trnh bng phn mm Notepad ca Ms Windows ...........19
1.2.4. Ci t b pht trin ng dng JDK..............................................................20
1.2.5. Bin dch v thc thi chng trnh................................................................20
1.2.6. Mt s v d...................................................................................................21
1.2.6.1. Hin th thng tin ra mn hnh...............................................................21
1.2.6.2. c k t t bn phm............................................................................21
1.3. Cc cu trc iu khin trong Java.......................................................................23
1.3.1. Lnh if else .................................................................................................23
1.3.2. Php ton ? ....................................................................................................24
1.3.3. Lnh switch ...................................................................................................25
1.3.4. Lnh while.....................................................................................................26
1.3.5. Lnh do - while..............................................................................................27
1.3.6. Lnh for .........................................................................................................27
1.3.7. Lnh break.....................................................................................................28
1.3.8. Lnh continue................................................................................................29
1.3.9. Mt s vn khc........................................................................................30
1.3.9.1. c i s ca chng trnh ..................................................................30
1.3.9.2. i chui thnh s..................................................................................31
1.4. Ngoi l (EXCEPTION) ......................................................................................31
1.5. Mt s vn lin quan n lp trong Java.........................................................33
1.5.1. nh ngha lp mi........................................................................................33
1.5.2. Phm vi nhn thy ca mt lp......................................................................34
1.5.3. Tnh tha k...................................................................................................35
1.6. Vo / Ra vi Stream............................................................................................36
1.6.1. Lp java.io.InputStream................................................................................37
1.6.2. Lp java.io.OutputStream.............................................................................39
1.6.3. Nhp chui t mt InputStream....................................................................40
1.6.4. Xut chui ra mt OutputStream ..................................................................41
1.7. Lung (Thread).....................................................................................................42
1.7.1. Cc mc ci t lung...................................................................................43
1.7.1.1. Tip cn lung mc ngi dng: ........................................................44
Bin Son: Ng B Hng - Nguyn Cng Huy
94
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.7.1.2. Tip cn lung mc ht nhn h iu hnh.........................................44
1.7.2. Lung trong java ...........................................................................................44
1.7.2.1 u tin ca lung ...............................................................................47
1.7.3. ng b ha gia cc lung..........................................................................49
1.8. Bi tp p dng.....................................................................................................49
Ch 1: C bn v Java........................................................................................49
Ch 2: Thit k lp trong Java ...........................................................................49
Ch 3: Thread .....................................................................................................50
CHNG 3........................................................................................................................51
ng dn (Pipe) ...................................................................................................................51
1.1. Gii thiu v ng dn ...........................................................................................52
1.2. ng dn trong Java...............................................................................................52
1.2.1. Gii thiu.......................................................................................................52
1.2.2. Cc cch to ng dn.....................................................................................53
1.3. Dch v phn hi thng tin (Echo Service) ..........................................................53
1.4. Gi lp dch v phn hi thng tin bng Pipe ......................................................54
1.4.1. Lp PipedEchoServer....................................................................................54
1.4.2. Lp PipedEchoClient ....................................................................................55
1.4.3. Lp PipedEcho..............................................................................................55
1.4.5. Bin dch v thc thi chng trnh................................................................56
CHNG 4........................................................................................................................57
Socket .................................................................................................................................57
1.1. Gii thiu v socket..............................................................................................58
1.1.1. Gii thiu.......................................................................................................58
1.1.2. S hiu cng (Port Number) ca socket........................................................58
1.1.3. Cc ch giao tip ......................................................................................60
1.2. Xy dng ng dng Client-Server vi Socket .....................................................61
1.2.1. M hnh Client-Server s dng Socket ch c ni kt (TCP) ..............61
1.2.2. M hnh Client-Server s dng Socket ch khng ni kt (UDP)........63
1.3. Socket di ngn ng Java ..................................................................................64
1.3.1. Xy dng chng trnh Client ch c ni kt .......................................65
1.3.1.1. Lp java.net.Socket ................................................................................65
1.3.1.2. Chng trnh TCPEchoClient ................................................................66
1.3.2. Xy dng chng trnh Server ch c ni kt ......................................67
Bin Son: Ng B Hng - Nguyn Cng Huy
95
Khoa Cng Ngh Thng Tin - i Hc Cn Th - Gio Trnh Lp Trnh Truyn Thng
1.3.2.1. Lp java.net.ServerSocket .....................................................................67
1.3.2.2. Xy dng chng trnh Server phc v tun t.....................................67
1.3.2.3. Chng trnh STCPEchoServer .............................................................68
1.3.2.4. Server phc v song song.......................................................................69
1.3.2.5. Chng trnh PTCPEchoServer .............................................................70
1.3.3. Xy dng chng trnh Client - Server ch khng ni kt ...................71
1.3.3.1. Lp DatagramPacket ..............................................................................72
1.3.3.2. Lp DatagramSocket..............................................................................73
1.3.3.3. Chng trnh UDPEchoServer...............................................................74
1.3.3.4. Chng trnh UDPEchoClient ...............................................................75
1.4. Bi tp p dng.....................................................................................................77
CHNG 5........................................................................................................................79
RPC v RMI .......................................................................................................................79
1.1. Li gi th tc xa (RPC- Remote Procedure Call) ..............................................80
1.1.1. Gii thiu.......................................................................................................80
1.1.2. Kin trc ca chng trnh Client-Server ci t theo c ch li gi th
tc xa 80
Hnh 5.1 Kin trc chng trnh kiu RPC........................................................................80
1.2. Kch hot phng thc xa (RMI- Remote Method Invocation ) .........................81
1.2.1. Gii thiu.......................................................................................................81
1.2.2. Kin trc ca chng trnh Client-Server theo c ch RMI .........................82
1.2.3. Cc c ch lin quan trong mt ng dng i tng phn tn .....................83
1.2.4. C ch vn hnh ca ca mt ng dng Client-Server theo kiu RMI ........84
1.2.5. Cc lp h tr chng trnh theo kiu Client-Server trong Java ..................85
1.3. Xy dng mt ng dng phn tn vi RMI .........................................................85
1.3.1. Thit k v ci t cc thnh phn ca ng dng..........................................85
1.3.2. Bin dch cc tp tin ngun v to Stubs v Skeleton...................................85
1.3.3. To cc lp c th truy xut t mng............................................................86
1.3.4. Thc thi ng dng .........................................................................................86
1.3.4. V d minh ha..............................................................................................86
1.4. Bi tp p dng.....................................................................................................92
Mc lc...............................................................................................................................92


Bin Son: Ng B Hng - Nguyn Cng Huy
96

You might also like