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

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

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

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

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. 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.3 - X l d liu qua cc tng

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

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

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
Hnh 1.7 M hnh Client-Server Bin Son: Ng B Hng - Nguyn Cng Huy

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

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 :
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.

Hnh 1.8 - Ch giao tip nghn

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. 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.

Hnh 1.9 - Ch giao tip khng nghn

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

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 o

Fat Client 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 Client u im
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.

Nhc im

V Business 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 cng ty x nghip. Phi ci li tt c cc my tnh Client khi nng cp chng trnh.

1.7.2.2. Loi Fat Server


Trong loi ny, phn ln cc chc nng v Business Rule c t phn Server. Phn Client ch thc hin mt s chc nng nh ca Business Rule v kim tra tnh hp l ca d liu nhp bi ngi dng.

Hnh 1.13 - Kin trc chng trnh Client Server theo kiu Fat Server u im

V Business Rule c t phn Server, cc my tnh Client khng cn phi c cu hnh mnh. Vic nng cp chng trnh khi Business Rule thay i tr nn nh nhng hn v ch phi ci t li phn Server.

Nhc im

To ra nhiu thng ip trao i gia Client v Server lm tng giao thng trn mng. Tng ti trn my Server v n phi ng thi thc hin cc chc nng ca Business Rule v Data Storage lm gim hiu nng ca chng trnh.

1.7.3. Kin trc a tng (N-Tier Architecture)


y l kin trc cho cc ng dng phn tn (Distributed Application). Thng thng l kin trc 3 tng. Chng trnh ng dng c tch thnh 3 phn ring bit tng ng cho 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. Thng thng, ngi ta gi tn cc thnh phn trn l: Client Application Server Database Server

1.8. Bi tp
1.8.1. Bi tp bt buc
Bi tp 1.1: Protocol HTTP Tm c v vit mt bo co khng qu 10 trang v giao thc HTTP. Bi tp 1.2: Chat Protocol Tm hiu v dch v Chat trn mng Internet. Vit mt bng bo co khng qua 10 trang trnh by 2 ni dung sau:

Mt bng m t cc chc nng thng c h tr trong mt dch v Chat. Xy dng Chat Protocol ring ca bn trong m t: o Cc chc nng h tr bi Chat Server. o Khun dng (Format) v cc loi thng ip (Message) h tr bi Protocol. o S trng thi hot ng ca server v client (gii thut). o Minh ha cc kch bn khc nhau cho tng chc nng ca dch v.

1.8.2. Bi tp gi
Bi tp 1.3: POP3 Protocol Tm c v 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 byte short int long float double Kch thc 1 byte 2 bytes 4 bytes 8 bytes 4 bytes 8 bytes 16

Bin Son: Ng B Hng - Nguyn Cng Huy

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[][]; Khi to: a = new int[3]; yt = new float[10]; names = new String[50]; maTran = int[10][10]; 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. 18

Bin Son: Ng B Hng - Nguyn Cng Huy

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 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
o

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. 35

Bin Son: Ng B Hng - Nguyn Cng Huy

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. 2. 3. 4.

PrintWriter pw = new PrintWriter(os); pw.wirte(str); hoc pw.println(str); // Nu mun c k t xung dng flush() // y d liu t buffer ra ngoi vi 41

Bin Son: Ng B Hng - Nguyn Cng Huy

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 Trong m hnh ny, Server c mt Lung phn pht (Dispatcher thread) v nhiu 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.

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 thc thi song song nhau. dng tm thi mn hnh kt qu khi chng trnh ang thc thi, ta nhp chut vo ca s 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 :
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

o o o o o 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. Bi 2 : Vit chng trnh th hin ra mn hnh cu : " Hello Java" Bi 3 : Vit chng trnh nhp vo 1 chui k t. i thnh ch Hoa v in ra mn hnh. 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. Bi 5 : Vit chng trnh gii phng trnh bc 2. Bi 6 : Vit chng trnh tnh tng ca dy s t 1 n n (Vi n c nhp t bn phm). 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. 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 7 21 23 25 80 110

Qu trnh h thng Dch v Echo Dch v FTP Dch v Telnet Dch v E-mail (SMTP) Dch v Web (HTTP) 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 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 chnh xc, Tc truyn chm.

Khng tn ti knh giao tip o gia hai bn giao tip 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 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 ClientServer. 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 ClientServer 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.

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 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. Hnh 4.5 Server ch song song 69

Bin Son: Ng B Hng - Nguyn Cng Huy

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. Vi mi Client, trn Server s c mt Phn 2 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 IOException

void

receive(Datagrampacket

dp)

throws

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 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: '+','-', '*', '/'. 77

Bin Son: Ng B Hng - Nguyn Cng Huy

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 ClientServer. 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. Chng trnh Client ly mt tham chiu 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. 2. 3. 4. Thit k v ci t cc thnh phn ca ng dng. Bin dch cc chng trnh ngun v to ra Stub v Skeleton. To cc lp c th truy xut t mng cn thit. 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; ... }

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 } }

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)

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.

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

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

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