You are on page 1of 54

n lp trnh mng

Truyn file qua mng da trn Socket TCP

LI CM N Li u tin em xin c by t lng bit n chn thnh ti thy gio Ths. ng Duy Thng - ging vin khoa CNTT trng HBK Nng, ngi thy trc tip ging dy v tn tnh gip , ch bo em trong xut thi gian qua. Cm n thy lun ng vin, hng dn, nh hng v truyn th cho em nhng kin thc v cng qu bu em c th hon thnh lun n tt nghip ny. Em xin chn thnh cm n cc thy gio, c gio trng HBK Nng v c bit l cc thy c trong b mn cng ngh thng tin, nhng ngi khng ngng truyn t cho chng em nhng kin thc qu bu trong sut qu trnh lm n. Di y l nhng g em tm hiu v nghin cu c trong thi gian qua. Do tnh thc t v kin thc cn hn ch, v vy em rt mong nhn c s ch bo cu cc thy c gio v s tham gia ng gp kin ca cc bn em c th hon thnh tt ti ca mnh. Mt ln na em xin chn thnh cm n ! Nng, ngy.thng .nm 2013 Sinh vin

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 1

n lp trnh mng

Truyn file qua mng da trn Socket TCP

MC LC

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 2

n lp trnh mng

Truyn file qua mng da trn Socket TCP

LI NI U Hin nay vn ton cu ho thng tin v tc pht trin ca khoa hc cng ngh din ra mt cch nhanh chng, mt k nguyn mi c m ra; k nguyn ca x hi ha thng tin. Cng ngh thng tin v truyn thng pht trin a th gii chuyn sang thi i mi thi i ca cng ngh thng tin. Vic nm bt v ng dng Cng ngh thng tin trong cc lnh vc khoa hc, kinh t, x hi em li cho cc doanh nghip v cc t chc nhng thnh tu v li ch to ln. My tnh tr thnh cng c c lc v khng th thiu ca con ngi. Cc t chc, cng ty hay cc c quan cn phi xy dng h thng mng my tnh cho ring mnh trao i d liu gia cc b phn. D liu c truyn i trn mng phi m bo: d liu c chuyn ti ch nhanh chng v ng n. Hu ht d liu c truyn qua mng l truyn di dng file. Nhm tm hiu thu o mt trong s cc phng php truyn file qua mng em chn ti "Tm hiu lp trnh Socket TCP trong Java v ng dng truyn file qua mng". Vi lp trnh socket TCP s bt buc cc my phi c ni mng vi nhau. Ta thy cc my mun trao i d liu qua mng, chng s to ra mi pha mt socket v trao i d liu bng cch c/ghi t socket. Khi mt chng trnh to ra mt socket, mt nh danh dng s (nh danh dng s ny cn c gi l s hiu cng) s c gn cho socket. Vic gn s hiu cng ny cho socket c th c thc hin bi chng trnh hoc h iu hnh. Trong mi gi tin m socket gi i c cha hai thng tin xc nh ch n ca gi tin: + Mt a ch mng xc nh h thng s nhn gi tin. + Mt s nh danh cng ni cho h thng ch bit socket no trn n s nhn d liu.
Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT Trang 3

n lp trnh mng

Truyn file qua mng da trn Socket TCP

Ni dung n tt ny c gng lm r v lp trnh socket TCP v xy dng chng trnh ng minh ha v truyn file qua mng bng ngn ng lp trnh Java. ti gm phn m u, bn chng v kt lun. Chng 1: Trnh by nhng kin thc cn bn v mng my tnh : nh ngha, phn loi, cc loi giao thc mng, cc m hnh hot ng ca mng my tnh. Chng 2: Gii thiu v Java, cc tnh cht, cc dng chng trnh ng dng ca Java, cu trc ca tp chng trnh Java Chng 3: Khi nim v socket, socket trong java v mt s lp trong lp trnh java socket. Chng 4: Xy dng chng trnh ng dng truyn file qua mng: M hnh v mt s giao din chng trnh pha server v pha client. Tip theo l kt lun, ph lc v ti liu tham kho.

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 4

n lp trnh mng

Truyn file qua mng da trn Socket TCP

CHNG 1: CN BN V MNG MY TNH 1.1. nh ngha mng my tnh Mng my tnh l mt tp hp cc my tnh c ni vi nhau bi ng truyn theo mt cu trc no v thng qua cc my tnh trao i thng tin qua li cho nhau. ng truyn l h thng cc thit b truyn dn c dy hay khng dy dng chuyn cc tn hiu in t t my tnh ny n my tnh khc. Cc tn hiu in t biu th cc gi tr d liu di dng cc xung nh phn (on off). Tt c cc tn hiu c truyn gia cc my tnh u thuc mt dng sng in t. Ty theo tn s ca sng in t c th dng cc ng truyn vt l khc nhau truyn cc tn hiu. y ng truyn c kt ni c th l dy cp ng trc, cp xon, cp quang, dy in thoi, sng v tuyn ... Cc ng truyn d liu to nn cu trc ca mng. Hai khi nim ng truyn v cu trc l nhng c trng c bn ca mng my tnh.

Hnh 1.1- Mt m hnh cc my tnh lin kt trong mng 1.2. Nhu cu pht trin mng my tnh Ngy nay, khi my tnh c s dng mt cch rng ri v s lng my tnh trong mt vn phng hay c quan c tng ln nhanh chng th vic kt
Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT Trang 5

n lp trnh mng

Truyn file qua mng da trn Socket TCP

ni chng tr nn v cng cn thit v s mang li nhiu hiu qu cho ngi s dng. Vi mt lng ln v thng tin, nhu cu x l thng tin ngy cng cao, mng my tnh tr nn qu quen thuc i vi chng ta trong mi lnh vc nh: khoa hc, qun s, quc phng, thng mi, dch v, gio dc... Ngi ta thy c vic kt ni cc my tnh thnh mng cho chng ta nhng kh nng mi to ln nh: - S dng chung ti nguyn: nhng ti nguyn (nh thit b, chng trnh, d liu) khi c tr thnh cc ti nguyn chung th mi thnh vin ca mng u c th tip cn c m khng quan tm ti nhng ti nguyn u. - Tng tin cy ca h thng: ngi ta c th d dng bo tr my mc, lu tr (backup) cc d liu chung v khi c trc trc trong h thng th chng c th c khi phc nhanh chng. Trong trng hp c trc trc trn mt trm lm vic th ngi ta cng c th s dng nhng trm khc thay th. - Nng cao cht lng v hiu qu khai thc thng tin: khi thng tin c th c s dng chung th n mang li cho ngi s dng kh nng t chc li cc cng vic vi nhng thay i v cht nh: + p ng nhng nhu cu ca h thng ng dng kinh doanh hin i. + Cung cp s thng nht gia cc d liu. + Tng cng nng lc x l nh kt hp cc b phn phn tn. + Tng cng truy nhp ti cc dch v mng khc nhau ang c cung cp trn th gii. Vi nhu cu i hi ngy cng cao ca x hi nn vn k thut trong mng l mi quan tm hng u ca cc nh tin hc. V d nh lm th no truy xut thng tin mt cch nhanh chng v ti u, trong khi vic x l thng tin trn mng qu nhiu, i khi c th lm tc nghn v gy ra mt thng tin mt cch ng tic. Hin nay, vic lm sao c c mt h thng mng chy tht tt, tht an ton vi li ch kinh t cao ang rt c quan tm. 1.3. Phn loi mng my tnh Do hin nay mng my tnh c pht trin khp ni vi nhng ng dng ngy cng a dng cho nn vic phn loi mng my tnh l mt vic rt phc tp.
Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT Trang 6

n lp trnh mng

Truyn file qua mng da trn Socket TCP

Da theo phm vi phn b ca mng ta c th phn ra cc loi mng nh sau: - Mng cc b LAN (Local Area Network): Mng LAN l mt nhm my tnh v cc thit b truyn thng mng c ni kt vi nhau trong mt khu vc nh nh mt ta nh cao c, khun vin trng i hc, khu gii tr Cc mng LAN thng c c im sau: + Bng thng ln, c kh nng chy cc ng dng trc tuyn nh xem phim, hi tho qua mng. + Kch thc mng b gii hn bi cc thit b + Chi ph cc thit b mng LAN tng i r + Qun tr n gin

Hnh 1.2- M hnh mng cc b LAN - Mng th MAN (Metropolitan Area Network): Mng MAN gn ging nh mng LAN nhng gii hn ca n l mt thnh ph hay mt quc gia. Mng MAN ni kt cc mng LAN l vi nhau thng qua cc phng tin truyn dn khc nhau (cp quang, cp ng, sng.) v cc phng thc truyn thng khc nhau. c im ca mng MAN: + Bng thng mc trung bnh, phc v cc ng dng cp thnh ph hay quc gia nh chnh ph in t, thng mi in t, cc ng dng ca cc ngn hng + Do MAN ni kt nhiu LAN vi nhau nn phc tp cng tng ng thi cng tc qun tr s kh khn hn. + Chi ph cc thit b mng MAN tng i t tin.
Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT Trang 7

n lp trnh mng

Truyn file qua mng da trn Socket TCP

- Mng din rng WAN (Wide Area Network): Mng WAN bao ph vng a l rng ln c th l mt quc gia, mt lc a hay ton cu. Mng WAN thng l mng ca cc cng ty a quc gia hay ton cu, in hnh l mng internet. Do phm vi rng ln ca mng WAN nn thng thng mng WAN l tp hp cc mng LAN, WAN ni li vi nhau bng cc phng tin nh: v tinh (satellites), sng biva (microwave), cp quang, cp in thoi. c im ca mng WAN: + Bng thng thp, d mt kt ni, thng ch ph hp vi cc ng dng offine nh e-mail, web, ftp + Phm vi hot ng rng ln khng gii hn + Do kt ni ca nhiu LAN, WAN li vi nhau nn mng rt phc tp v c tnh ton cu nn thng l c t chc quc t ng ra qun tr + Chi ph cho cc thit b v cc cng ngh mng WAN rt t tin

Hnh 1.3- M hnh mng din rng(WAN) - Mng Internet: L trng hp c bit ca mng WAN, n cung cp cc dch v ton cu nh mail, web, chat, ftp v phc v min ph cho mi ngi. 1.4. Mt s topo mng thng dng Theo nh ngha v mng my tnh, cc my tnh c ni vi nhau bi cc ng truyn vt l theo mt kin trc no , cc kin trc gi l Topology. Thng thng mng c ba loi kin trc l: mng hnh sao (Star Topology), mng dng tuyn (Bus Topology), mng dng vng(Ring Topology).

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 8

n lp trnh mng

Truyn file qua mng da trn Socket TCP

- Ring Topology: Mng c b tr vng trn, ng dy cp c thit k lm thnh mt vng khp kn, tn hiu chy theo mt chiu no . Cc nt truyn tn hiu cho nhau ti mt thi im c mt nt m thi. Mng dng vng c thun li l c th ni rng ra xa nhng ng dy phi khp kn, nu b ngt mt ni no th ton b h thng cng b ngng.

Hnh 1.4- Ring Topology - Bus Topology: dng Bus tt c cc nt c phn chia mt ng truyn chnh (bus). ng truyn ny c gii hn hai u bi mt loi u ni c bit gi l Terminator. Khi mt nt truyn d liu, tn hiu c qung b trn hai chiu ca bus, mi nt cn li u c nhn tn hiu trc tip. Loi mng ny dng dy cp t, d lp t. Tuy vy cng c nhng bt li l s c s n tc giao thng khi di chuyn vi lu lng ln v khi c s hng hc on no th rt kh pht hin, nu mt nt ngng hot ng s nh hng ti ton b h thng.

Hnh 1.5- Bus Topology Hnh 1.6- Star Topology - Star Topology: Mng hnh sao bao gm mt b tp trung v cc nt thng tin. Cc nt thng tin c th l cc trm cui, cc my tnh hay cc thit b khc ca mng. Mng hot ng theo nguyn l ni song song nn nu c mt nt b hng mng vn hot ng bnh thng. Mng c th m rng hoc thu hp ty theo yu cu ca ngi s dng, tuy nhin m rng ph thuc v kh nng ca trung tm.
Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT Trang 9

n lp trnh mng

Truyn file qua mng da trn Socket TCP

1.5. Giao thc mng Giao thc mng l mt tp cc quy tc, quy c trao i thng tin gia hai h thng my tnh hoc hai thit b my tnh vi nhau. Ni mt cch hnh thc th giao thc mng l mt ngn ng c cc my tnh trong mng s dng trao i d liu vi nhau. C nhiu loi giao thc c s dng trong mng my tnh nh: Apple Talk, DLC, NetBEUI, nhng hin nay giao thc c s dng ph bin nht trong mng my tnh l giao thc TCP/IP.
1.5.1 Giao thc TCP

nh ngha: TCP(Transmission Control Protocol) l giao thc hng kt ni, n cung cp mt ng truyn d liu tin cy gia hai my tnh. Tnh tin cy th hin vic n m bo d liu c gi s n c ch v theo ng th t nh khi n c gi. Khi hai ng dng mun giao tip vi nhau mt cch tin cy, chng s to ra ng kt ni gia chng v gi d liu thng qua ng ny. Cch trao i d liu ny tng t nh cch chng ta gi in thoi. Hy ly v d khi bn nhc in thoi ln v quay s ca ngi h hng ny, lc d mt kt ni s c to ra gia in thoi ca bn v ngi h hng, sau bn gi v nhn d liu (di dng m thanh) bng cch ni v nghe qua in thoi ca bn. Ton b vic thc hin kt ni v truyn d liu gia hai my in thoi c thc hin bi cng ty in thoi thng qua cc trm v ng dy in thoi, nhim v duy nht ca bn l quay s cung cp cho nh cung cp dch v in thoi bit s in thoi bn mun lin lc. Ging nh vy, trong vic truyn d liu qua mng th TCP ng vai tr nh nh cung cp dch v in thoi v d trn, n lm nhim v to kt ni v truyn d liu gia hai im giao tip m bo d liu khng b mt v ti ch theo ng trt t nh khi chng ta gi. Tnh tin cy ca ng truyn c th hin hai im sau: Mi gi tin cn gi s n c ch. lm c iu ny th mi ln pha gi gi xong mt gi tin n s ch nhn mt xc nhn t bn nhn rng nhn c gi tin. Nu sau mt khong thi gian m pha gi khng nhn c thng tin xc nhn phn hi th n s pht li gi tin. Vic pht li s c tin hnh cho n khi vic truyn tin thnh cng, tuy nhin sau mt s ln pht li max no m vn cha thnh cng
Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT Trang 10

n lp trnh mng

Truyn file qua mng da trn Socket TCP

th pha gi c th suy ra l khng th truyn tin c v s dng vic pht tin. Cc gi tin s c trnh ng dng nhn c theo ng th t nh chng c gi. Bi cc gi tin c th c dn i trn mng theo nhiu ng khc nhau trc khi ti ch nn th t khi ti ch ca chng c th khng ging nh khi chng c pht. Do m bo c th sp xp li gi tin pha nhn theo ng th t nh khi chng c gi, giao thc TCP s gn vo mi gi tin mt thng tin cho bit th t ca chng trong c khi tin chung c pht nh vy bn nhn c th sp xp li cc gi tin theo ng th t ca chng. Nh vy c th thy TCP cung cp cho chng ta mt knh truyn thng im- im phc v cho cc ng dng i hi giao tip tin cy nh HTTP (HyperText Transfer Protocol), FTP (File Tranfer Protocol), Telnet. Cc ng dng ny i hi mt knh giao tip tin cy bi th t ca d liu c gi v nhn l yu t quyt nh n s thnh cng hay tht bi ca chng. Hy ly v d khi HTTP c s dng c thng tin t mt a ch URL, d liu phi c nhn theo ng th t m chng c gi nu khng th m bn nhn c c th l mt trang HTML vi ni dung ln xn hoc mt file zip b li v khng gii nn. 1.5.2 Giao thc UDP nh ngha: UDP (User Datagram Protocol) l giao thc khng hng kt ni, n gi cc gi d liu c lp gi l datagram t my tnh ny n my tnh khc m khng m bo vic d liu s ti ch. phn trc chng ta thy trong giao thc TCP khi hai chng trnh mun giao tip vi nhau qua mng chng to ra mt kt ni lin kt hai ng dng v trao i d liu qua kt ni . Tri li giao thc UDP khi hai ng dng mun giao tip vi nhau chng khng to ra kt ni m ch n thun gi cc gi tin mt cch c lp t my ny ti my khc.Cc gi tin nh vy gi l cc datagram. Vic gi cc gi tin nh vy tng t nh vic chng ta gi th qua ng bu in. Cc bc th bn gi c lp vi nhau, th t cc th l khng quan trng v khng c g m bo l th s n c ch. Trong truyn thng bng UDP th cc datagram ging nh cc l th, chng cha thng tin cn gi i cng thng tin v a ch ch m chng phi n, tuy nhin chng
Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT Trang 11

n lp trnh mng

Truyn file qua mng da trn Socket TCP

khc vi cc l th mt im l nu nh trong vic gi th, nu l th ca bn khng n c ch th n s c gi tr li ni gi nu trn l th bn c a ch gi cn UDP s khng thng bo g cho pha gi v vic l th c ti c ch hay khng. Vy nu UDP l mt giao thc khng m bo giao tip tin cy th ti sao ngi ta li dng chng. iu l bi nu nh giao thc TCP m bo mt kt ni tin cy gia cc ng dng th chng cng i hi nhiu thi gian truyn tin do chng phi kim tra cc header cc gi tin m bo th t cc gi tin cng nh pht li cc gi tin khng n c ch do trong mt s trng hp th iu ny khng cn thit. Di y l mt s trng hp trong giao thc khng hng kt ni l thch hp hn so vi giao thc hng kt ni: Khi ch mt gi d liu cn truyn i v vic n c ch hay khng l khng quan trng, s dng giao thc UDP s loi b c cc th tc to v hy kt ni. So snh mt cht chng ta s thy giao thc hng kt ni TCP phi dng n by gi tin gi mt gi tin do n cn pht v nhn cc gi tin yu cu v chp nhn kt ni cng nh cc gi tin yu cu v xc nhn vic hy kt ni, trong khi giao thc khng kt ni UDP ch s dng duy nht mt gi tin chnh l gi tin cha d liu cn chuyn i. Chng ta ly v d v mt server ng h, nhim v ca n l gi thi gian hin ti ca n cho cc ng dng trn client khi c yu cu. Nu gi tin cha thi gian b tht lc trn ng truyn v khng ti c ch th client cng s khng i hi server phi gi li gi tin bi khi gi tin c pht li ln hai v ti c client th thng tin thi gian cha trong n khng cn ng na. Nu client to ra hai yu cu v nhn c cc gi tin tr li khng theo ng th t m server gi th client cng khng gp phi vn g bi n hon ton c th suy ra c rng cc gi khng c chuyn n ng th t bng cch tnh thi gian c cha trong cc gi. Trong trng hp ny tnh tin cy ca TCP l khng cn thit bi n lm gim hiu sut v c th cn tr hot ng ca server. Trng hp th hai chng ta xem xt vic s dng giao thc UDP l cc ng dng i hi cht ch v thi gian nh cc ng dng nghe audio thi gian thc. Trong trng hp ny vic hng ti mt knh giao tip tin cy khng phi l u im m ngc li l mt nhc im bi nu vic phi ch cho
Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT Trang 12

n lp trnh mng

Truyn file qua mng da trn Socket TCP

khi mt gi tin b mt c nhn c th gy ra nhng tc ng d nhn thy hoc khin chng trnh phi tm ngng. Vi cc ng dng ny giao thc khng hng kt ni c pht trin v chng lm vic tt hn hn. Chng ta c th tham kho ng dng RealAudio, trong ngi ta s dng mt giao thc khng hng kt ni truyn cc d liu m thanh qua mng. Bng sau so snh s khc bit gia hai ch giao tip hng kt ni v khng hng kt ni. Ch c hng kt ni(TCP) 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 Ch khng hng kt ni(UDP) 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 chnh xc, tc truyn chm D liu khng chnh xc, tc truyn nhanh. Thch hp cho cc ng dng cn tc , khng cn chnh xc cao: Truyn m thanh, hnh nh 1.6. Cc m hnh hot ng ca mng my tnh M hnh hot ng ca mng my tnh c hai loi: - M hnh hot ng peer to peer - M hnh hot ng clients/server 1.6.1. M hnh hot ng peer to peer Khng tn ti bt k my chuyn dng hoc cu trc phn cp gia cc my tnh. Mi my tnh u bnh ng v c vai tr nh nhau. Thng thng mi my tnh hot ng vi c vai tr my khch v my phc v. V vy khng c my no c ch nh qun l ton mng. Ngi dng tng my t quyt nh d liu no trn my ca mnh s c chia s dng chung trn mng.

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 13

n lp trnh mng

Truyn file qua mng da trn Socket TCP

Hnh 1.7- M hnh peer to peer 1.6.2. M hnh hot ng clients/ server Trong mng hot ng theo m hnh Clients/Server c mt hoc nhiu my c nhim v cung cp mt s dch v cho cc my khc trong mng. Cc my ny c gi l server cn cc my tnh c phc v gi l my clients.

Hnh 1.8- M hnh mng Clients/Server y l m hnh tng qut, trn thc t server c th c ni vi nhiu server khc tng hiu qu lm vic. Khi nhn c yu cu t client, server c th x l yu cu hoc gi tip yu cu va nhn c cho mt server khc. My server s thi hnh cc nhim v do my client yu cu. C rt nhiu dch v trn mng hot ng theo nguyn l nhn cc yu cu t client sau x l v tr li cc kt qu cho client yu cu.

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 14

n lp trnh mng

Truyn file qua mng da trn Socket TCP

CHNG 2: CN BN V NGN NG LP TRNH JAVA 2.1. Gii thiu Java Java l mt ngn ng lp trnh c Sun Microsystems gii thiu vo thng 6 nm 1995. T , n tr thnh mt cng c lp trnh ca cc lp trnh vin chuyn nghip. Java c xy dng trn nn tng ca C v C++. Do vy n s dng cc c php ca C v cc c trng hng i tng ca C++. Vo nm 1991, mt nhm cc k s ca Sun Microsystems c nh thit k mt ngn ng lp trnh iu khin cc thit b in t nh Tivi, my git, l nng, Mc d C v C++ c kh nng lm vic ny nhng trnh bin dch li ph thuc vo tng loi CPU. Trnh bin dch thng phi tn nhiu thi gian xy dng nn rt t. V vy mi loi CPU c mt trnh bin dch ring l rt tn km. Do nhu cu thc t i hi mt ngn ng chy nhanh, gn, hiu qu v c lp thit b tc l c th chy trn nhiu loi CPU khc nhau, di cc mi trng khc nhau. Oak ra i v vo nm 1995 c i tn thnh Java. Mc d mc tiu ban u khng phi cho Internet nhng do c trng khng ph thuc thit b nn Java tr thnh ngn ng lp trnh cho Internet. 2.2. Mt s tnh cht ca ngn ng Java - n gin - Hng i tng - c lp phn cng v h iu hnh - Mnh - Bo mt - Phn tn - a lung - ng

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 15

n lp trnh mng

Truyn file qua mng da trn Socket TCP

2.2.1. n gin Nhng ngi thit k mong mun pht trin mt ngn ng d hc v quen thuc vi a s ngi lp trnh. Do vy Java loi b cc c trng phc tp ca C v C++ nh: - Loi b thao tc con tr, thao tc nh ngha chng ton t - Khng cho php a k tha m s dng cc giao din - Khng s dng lnh goto cng nh file header (.h) - Loi b cu trc struct v union 2.2.2. Hng i tng Java l ngn ng lp trnh thun hng i tng. Mi chng trnh vit trn Java u phi c xy dng trn cc i tng. Nu trong C/ C++ ta c th to ra cc hm (khng gn vi i tng no) th trong Java ta ch c th to ra cc hm (phng thc) gn lin vi mt i tng. Trong Java khng cho php cc i tng c tnh nng a k tha m thay bng cc giao tip 2.2.3. c lp phn cng v h iu hnh i vi cc ngn ng lp trnh truyn thng nh C/ C++, phng php bin dch c thc hin nh sau :

Hnh 2.1- Cch bin dch chng trnh truyn thng Vi mi nn phn cng khc nhau, c mt trnh bin dch khc nhau bin dch m ngun chng trnh cho ph hp vi nn phn cng y. Do vy, khi chy trn mt nn phn cng khc bt buc phi bin dch li m ngun i vi cc chng trnh vit bng Java, trnh bin dch Java s bin dch m ngun thnh dng bytecode. Sau , khi chy chng trnh trn cc nn phn cng khc nhau, my o Java dng trnh thng dch Java chuyn m bytecode

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 16

n lp trnh mng

Truyn file qua mng da trn Socket TCP

thnh dng chy c trn cc nn phn cng tng ng. Do vy, khi thay i nn phn cng, khng phi bin dch li m ngun Java

Hnh 2.2- Dch chng trnh Java 2.2.4. Mnh m Java l ngn ng yu cu cht ch v kiu d liu. - Kiu d liu phi khai bo tng minh. - Java khng s dng con tr v cc php ton con tr. - Java kim tra tt c cc truy nhp n mng, chui khi thc thi m bo rng cc truy nhp khng ra ngoi gii hn kch thc - Trong cc mi trng lp trnh truyn thng, lp trnh vin phi t mnh cp pht b nh. Trc khi chng trnh kt thc th phi t gii phng b nh cp. Vn ny sinh khi lp trnh vin qun gii phng b nh xin cp trc . Trong chng trnh java, lp trnh vin khng phi bn tm n vic cp pht b nh. Qu trnh cp pht, gii phng c thc hin t ng, nh dch v thu nht nhng i tng khng cn s dng na (garbage collection). - C ch by li ca java gip n gin ha qu trnh x l li v hi phc sau li. 2.2.5. Bo mt Java cung cp mt mi trng qun l thc thi chng trnh vi nhiu mc kim sot tnh an ton: - mc th nht, d liu v cc phng thc c ng gi bn trong lp. Chng ch c truy xut thng qua cc giao din m lp cung cp - mc th hai, trnh bin dch kim sot m bo m l an ton, v tun theo cc nguyn tc ca java
Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT Trang 17

n lp trnh mng

Truyn file qua mng da trn Socket TCP

- Mc th ba c m bo bi trnh thng dch. Chng kim sot xem bytecode c m cc quy tc an ton trc khi thc thi - Mc th t kim sot vic np cc lp vo b nh gim st vic vi phm gii hn truy xut trc khi np vo h thng. 2.2.6. Phn tn Java c thit k h tr cc ng dng chy trn mng bng cc lp mng (java.net). Hn na, java h tr nhiu nn chy khc nhau nn chng c s dng rng ri nh l cng c pht trin trn Internet, ni s dng nhiu nn khc nhau 2.2.7. a lung Chng trnh java cung cp gii php a lung(Multithreading) thc thi cc cng vic ng thi. Chng cng cung cp gii php ng b gia cc lung. c tnh h tr a lung ny cho php xy dng cc ng dng trn mng chy hiu qu 2.2.8. Linh ng Java c thit k nh mt ngn ng ng p ng cho nhng mi trng m. Cc chng trnh Java cha rt nhiu thng tin thc thi nhm kim sot v truy nhp i tng lc chy. iu ny cho php kh nng lin kt ng m. 2.3. Cc dng chng trnh ng dng ca Java 2.3.1. Chng trnh ng dng c lp (Application) Chng trnh ng dng dng c lp l mt chng trnh ngun m sau khi dch c th thc hin trc tip. Chng trnh c lp trong java bt u thc hin v kt thc phng thc main() ging nh hm main() trong chng trnh C/ C++ Khi xy dng mt ng dng c lp cn lu : 1. To lp mt lp c nh ngha bi ngi s dng c phng thc main() gi l lp chnh v bo m n c nh ngha ng theo ng nguyn mu c quy nh bi java 2. Kim tra xem liu tp chng trnh c tn trng vi tn ca lp chnh v ui l .java hay khng
Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT Trang 18

n lp trnh mng

Truyn file qua mng da trn Socket TCP

3. Dch tp chng trnh ngun .java to ra cc tp m bytecode c ui .class tng ng 4. S dng chng trnh thng dch ca Java chy chng trnh dch 2.3.2. Chng trnh ng dng nhng(Applet) Applet l loi chng trnh Java c bit m khi thc hin m lnh ca chng phi c nhng trong vo mt trang web (cc file c ui HTM hoc HTML ), cc th HTML s c trnh duyt Web thc thi ( nh Netscape hoc Internet Explorer) cn on m lnh ca Applet s c my o Java nhng trong trnh duyt web thc thi. Cng c th dng trnh Appletviewer ca JDK thc thi mt Applet. Mt chng trnh dng Applet bao gm hai tp: .java v .html Chu trnh hot ng cu Applet: Chng trnh ng dng Applet c thc hin nh sau: - Khi mt applet c np v chy bi Web Browser th n s gi thng ip init() cng vi cc d liu, kch thc ca Window chng trnh applet khi ng. - Khi bt u thc hin, Web Browser thng bo cho applet bt u bng cch gi phng thc start(). - Khi ri khi trang Web c cha applet th chng trnh applet ny nhn c thng ip stop() dng chng trnh. Hot ng ca chng trnh applet c m t nh hnh di:

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 19

n lp trnh mng

Truyn file qua mng da trn Socket TCP

Hnh 2.3- Chu trnh hot ng ca applet Trong : - init(): phng thc ny c gi khi applet c np ln u v c xem nh l ton t to lp cho applet. - start(): c gi khi applet bt u thc hin, xut hin khi: + applet c np xung + applet c duyt li - stop(): c gi khi applet dng thc hin, nhng cha b loi b khi b nh. - destroy(): c gi ngay trc khi applet kt thc, khi trnh duyt Web c ng li v applet b loi b khi b nh. 2.3.3. Chng trnh ng dng dng lai ghp Java cho php xy dng mt chng trnh c th chy c c Web Browser (Applet) cng nh mt ng dng c lp (Application). xy dng c mt chng trnh nh th phi: - nh ngha lp ng dng m rng t lp Applet - Trong lp ng dng phi c hm main() 2.4. Cu trc ca tp chng trnh Java Tp chng trnh java c th c cc phn c c t nh sau: - nh ngha mt gi l ty chn thng qua nh danh ca gi ( package). Tt c cc lp, cc interface c nh ngha trong tp cha gi ny u thuc gi . Nu b qua nh ngha gi th cc nh ngha tp ny s thuc vo gi mc nh. - Mt s lnh nhp import - Mt s nh ngha lp v interface c th nh ngha theo th t bt k. Trong thng l lp public Nh vy, cu trc ca mt tp chng trnh Java c th khi qut nh sau: // Filename: New.java // Phn 1: ty chn // nh ngha gi package Tngi; // Phn 2: 0 hoc nhiu hn // cc gi cn s dng
Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT Trang 20

n lp trnh mng

Truyn file qua mng da trn Socket TCP

import java.io.*; // Phn 3: 0 hoc nhiu hn // nh ngha cc lp v cc interface public class New{...} class C1 {...} interface I1 {...} // ... class Cn {...} interface Im {...}

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 21

n lp trnh mng

Truyn file qua mng da trn Socket TCP

CHNG 3: LP TRNH SOCKET TRONG JAVA 3.1 Khi nim Socket 3.1.1 Lch s hnh thnh - Khi nim Socket xut hin ln u tin vo khong nm 1980 ti trng i hc Berkeley M. l mt chng trnh c thit k gip my tnh ni mng khp mi ni c th trao i thng tin vi nhau. Lc u c c s dng trn cc my Unix v c tn gi l Berkeley Socket Interface. - Tip cng vi s pht trin ca cc ng dng mng, socket c h tr trong nhiu ngn ng lp trnh v chy trn nhiu nn tng h iu hnh khc nhau. V d nh WinSock dng cho cc ng dng ca Microsoft, Socket++ dng cho cc lp trnh vin s dng Unix - C cu hi t ra l ti sao chng ta li s dng Socket trong truyn thng gia cc my tnh. tr li cu hi ny chng ta phi quay li thi im trc khi Socket ra i: Trong thi k ny trn h thng Unix vic vo/ra d liu c thc hin theo m hnh 3 bc Open-Read/Write-Close. thc hin vic vo ra d liu trc ht chng trnh phi to ra mt kt ni vi ti nguyn m n mun giao tip(ti nguyn ny c th l bn phm, b nh trong, file), sau khi kt ni c thc hin, chng trnh c th trao i d liu thng qua cc thao tc Read- a d liu t ti nguyn kt ni vo chng trnh x l hoc Write- a d liu x l t chng trnh ra ti nguyn. Mt v d in hnh cho kiu vo/ra ny l thao tc vi file d liu m chng ta kh quen thuc trong cc ngn ng lp trnh: Khi ngi lp trnh mun thao tc vi mt file d liu h tin hnh nh sau: + M file cn s dng vi cc quyn thch hp trn + Thc hin vic c d liu t file x l hay a d liu x l ghi vo file. + ng file sau khi s dng xong. - Khi vic trao i d liu gia cc chng trnh v kt ni mng c a vo h thng Unix ngi ta mong mun vic trao i d liu gia cc chng trnh cng s c thc hin theo m hnh ba bc ca vo/ra d liu nhm trnh cho ngi lp trnh nhng kh khn khi giao tip vi cc tng bn di
Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT Trang 22

n lp trnh mng

Truyn file qua mng da trn Socket TCP

tng ng dng. lm c iu , socket c s dng. Khi hai chng trnh mun giao tip vi nhau, mi chng trnh s to ra mt socket, chng ng vai tr l cc im cui trong mt kt ni v thc hin trao i thng tin gia hai chng trnh. i vi ngi lp trnh, socket c xem nh mt ti nguyn h thng m chng trnh cn giao tip nn chng trnh c th thc hin giao tip vi socket theo m hnh ba bc ging nh vic vo/ra d liu. Nh vy s ra i ca socket gn lin vi nhu cu truyn thng my tnh. Sau y chng ta s a ra nh ngha c th v socket. nh ngha - C nhiu nh ngha khc nhau v socket ty theo cch nhn ca ngi s dng. - Mt cch tng qut nht c th nh ngha: Mt Socket l mt im cui trong mt kt ni gia hai chng trnh ang chy trn mng - Nhn trn quan im ca ngi pht trin ng dng ngi ta c th nh ngha Socket l mt phng php thit lp kt ni truyn thng gia mt chng trnh yu cu dch v (c gn nhn l Client) v mt chng trnh cung cp dch v (c gn nhn l server) trn mng hoc trn cng mt my tnh. - i vi ngi lp trnh, h nhn nhn Socket nh mt giao din nm gia tng ng dng v tng khc trong m hnh mng OSI c nhim v thc hin vic giao tip gia chng trnh ng dng vi cc tng bn di ca mng.

Hnh 3.1- M hnh OSI rt gn

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 23

n lp trnh mng

Truyn file qua mng da trn Socket TCP

Hnh 3.2- M hnh Socket - Tuy nhin, cc lp trnh vin hin nay gn nh lun lun b ngn cn to socket ring bng cch th cng bi d bn dng Java, serlet hay CGI, PHP c th bn s khng bao gi m c cng mt cch tng minh. Thay vo cc lp trnh vin s dng th vin socket c h tr sn bi cc ngn ng lp trnh. Nh vy cc socket vn tn ti kt ni cc ng dng ca ngi dng, nhng cc chi tit ca socket c n trong nhng lp su hn mi ngi khng phi ng chm n.
S hiu cng 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.

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 24

n lp trnh mng

Truyn file qua mng da trn Socket TCP

Hnh 3.3- Cng trong Socket Trong hnh trn, a ch ca qu trnh B1 c xc nh bng hai thng tin (Host B, Port B1): a ch my tnh c th l a ch IP dng 203.162.88.162 hay l a ch cho dng trn min nh www.hpu.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 bit). Trong thc t th cc s hiu cng t 0 n 1023 (gm c 1024 cng) dnh cho cc dch v ni ting nh: http: 80, telnet:21, ftp:23,. Nu chng ta khng phi l ngi qun tr th nn dng t cng 1024 tr ln. 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 Dich v Echo Dch v FTP Dich v Telnet Dch v E-mail(SMTP) Dch v Web(HTTP) Dch v E-mail(POP)

M hnh Clients/Server s dng Socket ch hng ni kt TCP Giai on 1: Server to socket, gn s hiu cng v lng nghe yu cu kt ni.
Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT Trang 25

n lp trnh mng

Truyn file qua mng da trn Socket TCP

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. 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 cha s dng cho socket ca Client. Connect(): Client gi yu cu ni kt n server c a ch IP v Port xc nh. 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.

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 26

n lp trnh mng

Truyn file qua mng da trn Socket TCP

Sau khi chp nhn yu cu ni kt, thng thng server thc hin lnh read() v ngh cho n khi c thng ip yu cu(Reaquest 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 (Reply Message) 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 cc thng ip, quy 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 quy nh ca giao thc. Ngc li, nu chng ta pht trin mt ng dng clients/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

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 27

n lp trnh mng

Truyn file qua mng da trn Socket TCP

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

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 28

n lp trnh mng

Truyn file qua mng da trn Socket TCP

Nh vy ton b tin trnh din ra nh sau:

3.1.2 Nguyn l hot ng - Ta thy khi hai ng dng mun trao i d liu qua mng, chng s to ra mi pha mt socket v trao i d liu bng cch c/ghi t socket. hiu r cch thc socket trao i d liu chng ta hy xem xt nguyn l hot ng ca chng. - Trc ht chng ta hy xem xt lm th no cc socket c th xc nh c nhau. Khi mt chng trnh to ra mt socket, mt nh danh dng s (nh danh dng s ny cn c gi l s hiu cng) s c gn cho socket. Vic gn s hiu cng ny cho socket c th c thc hin bi chng trnh hoc h iu hnh ty theo cch socket c s dng nh th no. Trong mi gi tin m socket gi i c cha hai thng tin xc nh ch n ca gi tin: + Mt a ch mng xc nh h thng s nhn gi tin. + Mt s nh danh cng ni cho h thng ch bit socket no trn n s nhn d liu. - Nh hai thng tin ny m gi tin c th n c ng my tnh cha socket m n cn n (nh a ch mng) v c phn phi n ng socket ch (nh a ch cng ca socket ch).
Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT Trang 29

n lp trnh mng

Truyn file qua mng da trn Socket TCP

- Di gc lp trnh cc socket thng lm vic theo cp, mt socket ng vai tr lm server cn cc socket khc ng vai tr nh clients. Socket pha server xc nh mt cng cho giao tip mng, sau ch nghe yu cu m client gi ti n bng client socket. Do cc cng cho server socket phi c bit bi cc chng trnh client. V d server FTP s dng mt socket nghe ti cng 21 do nu mt chng trnh client mun giao tip vi server FTP n cn phi kt ni n socket c s hiu cng 21. - Nh vy s hiu cng ca socket pha server c xc nh bi chng trnh, ngc li cng cho client socket c xc nh bi h iu hnh. Khi mt socket pha client gi mt gi tin ti socket pha server th trong gi tin c cha thng tin v a ch ca h thng client v cng ca socket pha client nn server hon ton c th gi thng tin phn hi cho client. - Chng ta c th khi qut qu trnh trao i d liu thng qua cc socket nh sau: + Chng trnh pha server to ra mt socket, socket ny c chng trnh gn vi mt cng trn server. Sau khi c to ra socket ny (ta gi l socket pha server) s ch nghe yu cu t pha clients. + Khi chng trnh pha clients cn kt ni vi mt server, n cng to ra mt socket, socket ny cng c h iu hnh gn vi mt cng. Chng trnh client s cung cp cho socket ca n (ta gi l socket pha client) a ch mng v cng ca socket pha server v yu cu thc hin kt ni (nu chng trnh nh s dng giao thc hng kt ni) hoc truyn d liu (nu chng trnh s dng giao thc khng hng kt ni) + Chng trnh pha server v chng trnh pha clients trao i d liu vi nhau bng cch c t socket hoc ghi vo socket ca mnh. Cc socket hai pha nhn d liu t ng dng v ng gi gi i hoc nhn cc d liu c gi n v chuyn cho chng trnh ng dng bi socket c hai pha u bit c a ch mng v a ch cng ca nhau. - bc th hai chng ta thy chng trnh ng dng phi la chn giao thc m n nh s dng trao i d liu. Tu theo vic chng ta s dng giao thc no (TCP hay UDP) m cch thc x l trc yu cu ca clients c th khc.

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 30

n lp trnh mng

Truyn file qua mng da trn Socket TCP

- Sau y chng ta s xem xt chi tit cch thc trao i d liu ca socket vi tng loi giao thc. Socket h tr TCP a. pha Server: Khi mt ng dng trn server hot ng n s to ra mt socket v ng k vi server mt cng ng dng v ch i yu cu kt ni t pha clients qua cng ny.

Hnh 3.4-Clients gi yu cu n server

Hnh 3.5- Server chp nhn yu cu v to mt socket phc v clients b. pha clients: N bit a ch ca my trn server ang chy vo cng v server ang ch nghe yu cu. Do khi mun kt ni n server, n cng to mt socket cha a ch my client v cng ca ng dng trn my clients ng thi clients s cung cp cho socket ca n a ch v cng ca server m n cn kt ni v yu cu socket thc hin kt ni. Khi server nhn c yu cu kt ni t clients, nu n chp nhn th server s sinh ra mt socket mi c gn vi mt cng khc vi cng m n ang nghe yu cu. S d server lm nh vy bi n cn cng c tip tc nghe yu cu t pha clients trong khi vn cn mt kt ni vi clients. Sau chng trnh ng dng pha server s gi thng bo chp nhn kt ni cho clients cng thng tin v a ch cng mi ca socket m n dnh cho clients. c. Quay li pha clients, nu kt ni c chp nhn ngha l socket ca n c to ra thnh cng v n c th s dng socket giao tip vi server bng cch vit v ghi ti socket theo cch giao tip vi mt ti nguyn trn my tnh thng thng. Socket h tr UDP

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 31

n lp trnh mng

Truyn file qua mng da trn Socket TCP

a. pha Server: Khi mt ng dng trn server hot ng n s to ra mt socket v ng k vi server mt cng ng dng v ch i yu cu kt ni t pha clients qua cng ny. b. pha Clients: N bit a ch ca my trn server ang chy vo cng v server ang ch nghe yu cu. Do khi mun giao tip vi server, n cng to ra mt socket cha a ch my clients v cng ca ng dng trn my clients ng thi clients s cung cp cho socket ca n a ch v cng ca server m n cn kt ni. Khi clients mun gi tin server n s chuyn d liu cho socket ca mnh, socket ny s chuyn thng gi tin m client mun gi ti server di dng mt datagram c cha a ch my server v cng m server ang ch nghe yu cu. Nh vy khng h c mt kt ni no c thc hin gia client vi server v server cng khng cn to ra mt socket khc kt ni vi clients thay vo server dng ngay cng ban u trao i d liu. 3.2 Socket trong Java * Xy dng chng trnh Client ch c ni kt Cc bc tng qut: - M mt socket ni kt n server bit a ch IP(hay tn min) v s hiu cng. - Ly InputStream v OutputStream gn vi socket. - Tham kho protocol ca dch v nh dng ng d liu trao i vi server. -Trao i d liu vi server nh vo cc InputStream v OutputStream. - ng socket trc khi kt thc chng trnh. 3.2.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 clients.
public Socket(String HostName, int PortNumber) throws IOException

Phng thc ny dng kt ni n mt server c tn l Hostname, cng l PortNumber. Nu ni kt thnh cng, mt knh o s c hnh thnh gia clients v server. HostName: a ch IP hoc tn logic theo dng tn min.
Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT Trang 32

n lp trnh mng

Truyn file qua mng da trn Socket TCP

PortNumber: C gi tr t 0....65535 public InputStream getInputStream() Phng thc ny tr v InputStream ni vi Socket. Chng trnh clients dng InputStream ny nhn d liu t server gi v public OutputStream getOutputStream() Phng thc ny tr v OutputStream ni vi socket. Chng trnh client dng OutputStream ny gi d liu cho server. public close() Phng thc ny s ng socket li, gii phng knh o, xa ni kt gia clients v server. 3.2.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 kt ni v khng kt ni. Chng trnh TCPEchoClient s kt ni n EchoServer ch c kt ni, ln lt gi n EchoServer ch c kt ni, ln lt gi n EchoServer 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 arg[]){ Try{ Socket s=new socket(args[0],7); // Ni kt n Server InputStream is =s.getInputStream(); // Ly InputStream OutputStream os = s.getOutputStream(); For(int i= 0; i<=9;i++){ Os.write(i); Int ch= is.read(); System.out.print((char)ch); } } Catch(IOException ie){ System.out.println(Loi khong tao duoc socket); } }

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 33

n lp trnh mng
}

Truyn file qua mng da trn Socket TCP

Bin dich 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 EchoServer 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 clients kt ni n EchoServer trn cng vi my .

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 34

n lp trnh mng

Truyn file qua mng da trn Socket TCP

3.3 Mt s lp trong lp trnh Java Socket Java h tr lp trnh mng thng qua cc lp trong gi java.net. Mt s lp tiu biu cn dng cho lp trnh clients/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 chnng trnh clients ch c kt ni. ServerSocket: H tr cc phng thc lin quan n socket cho chng trnh server ch c kt ni. DatagramSocket: H tr cc phng thc lin quan n socket ch khng kt ni cho c clients v server. DatagramPacket: Lp ci t gi tin dng th tn ngi dng (Datagram Packet) trong giao tip gia clients v server ch khng kt ni.

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 35

n lp trnh mng

Truyn file qua mng da trn Socket TCP

CHNG 4: XY DNG CHNG TRNH NG DNG 4.1. Gii thiu Trao i d liu gia hai my tnh trong mng thc cht l s trao i d liu gia hai chng trnh ng dng chy trn hai my tnh . Trong , mt chng trnh c gn nhn l server v mt chng trnh c gn nhn l client, c nhiu phng php xy dng chng trnh ng dng mng nhng phng php s dng ph bin l lp trnh ng mng da trn c ch socket. Trong chng ny s trnh by mt ng dng ca lp trnh socket TCP l xy dng chng trnh truyn file qua mng gia hai my tnh bng Java Socket TCP.

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 36

n lp trnh mng

Truyn file qua mng da trn Socket TCP

4.2. Phn tch chng trnh Chng trnh ng dng c xy dng theo m hnh clients/server. Chng trnh bao gm hai m un server v client. Ngi s dng c th truyn file t pha client cho server hoc ngc li. M un pha server
To server socket v lng nghe kt ni t client

chp nhn kt ni t client ng Chn file cn gi cho client Gi file cho client

sai

bo li

END ng

Gi file mi

sai

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 37

n lp trnh mng

Truyn file qua mng da trn Socket TCP client to socket kt ni n socket server

M un pha client

kt ni thnh cng

sai

bo li

ng END Chn file cn gi cho server Gi file cho server

ng

Gi file mi?

sai

4.3 C ch hot ng ca chng trnh


Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT Trang 38

n lp trnh mng

Truyn file qua mng da trn Socket TCP

Chng trnh gm hai m un. Pha server l file chng trnh c tn l


FileTransferServer.java, pha client l file chng trnh c tn l FileTransferClient.java. Sau khi bin dch file .java ny ta nhn c

cc file .class tng ng. Chng trnh c thc thi ti du nhc h thng theo c php c:\>java FileTransferServer c:\>java FileTransferClient Chy chng trnh server mode: Chng trnh chy pha server c ch nh chy server mode, sau my tnh ny s ch i cc kt ni t pha clients n n. Ta phi nhp tip port number, ng vi server mode ny th ta c th chn bt c port number no ln hn 1024, v nhng port number di 1024 b gi trc v s dng bi h thng (well-known ports). Chng trnh ny cng c th thc hin giao nhn file gia mt server v nhiu my clients ng thi trong mt h thng mng nn n s yu cu ta nhp vo s lng my client ln nht c th kt ni n server ny. Chy chng trnh client mode: Tng t cho pha bn client, chng trnh s yu cu nhp vo a ch ca server (host address), ta c th nhp a ch IP hay nhp vo tn ca my chy server mode u c (trong trng hp trn hnh bn di th tn my chy server mode c a ch IP trong mng LAN l 192.168.1.43). Tip tc ta s nhp port number (s hiu cng) ca server socket ( bit) cn kt ni n.

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 39

n lp trnh mng

Truyn file qua mng da trn Socket TCP

4.4. Giao din chng trnh 4.4.1 Giao din pha Server

Hnh 4.1- La chn s hiu cng ca Server v s lng Client cn kt ni

Hnh 4.2- Giao din chnh ca chng trnh pha Server

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 40

n lp trnh mng

Truyn file qua mng da trn Socket TCP

Hnh 4.3- Giao din pha server khi chn file truyn i

Hnh 4.4- Thng bo gi file thnh cng t Server n Client

Hnh 4.5- Thng bo bn Clien ang gi file ti cho Server

Hnh 4.6- Thng bo bn nhn thnh cng file c gi t Client 4.4.2 Giao din pha Client

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 41

n lp trnh mng

Truyn file qua mng da trn Socket TCP

Hnh 4.7- Nhp a ch my Server v s hiu cng ca Server kt ni

Hnh 4.8- Giao din chnh ca chng trnh pha Client

Hnh 4.9- Thng bo bn Server ang gi file ti cho Client

Hnh 4.10- Thng bo bn nhn thnh cng file c gi t Server


Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT Trang 42

n lp trnh mng

Truyn file qua mng da trn Socket TCP

Hnh 4.11- Giao din pha server khi chn file truyn i

Hnh 4.12- Thng bo gi file thnh cng t Client n Server 4.5 Nhn xt Chng trnh ng dng c la chn vit bng ngn ng Java, ta chn Java v nhng l do sau y: Th nht, nhng ng dng mng kiu ny s gn gng hn khi vit bng Java, vi Java s c t dng m hn, v mi dng c th d dng gii thch vi c nhng ngi lp trnh mi bt u. Th hai, nhng chng trnh ng dng m hnh clients/server lp trnh bng Java gia tng ngy cng thng dng v n c th tr thnh tiu chun cho lp trnh mng trong vi nm ti. Java l mt ngn ng c lp nn, n c c ch by li (iu qun cc ngoi l), c th gii quyt hu n cc li xy ra trong qu trnh xut/nhp v nhng hot ng mng v kh nng phn lung (thread) mnh cung cp nhng phng php n gin xy dng nhng server mnh m.
Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT Trang 43

n lp trnh mng

Truyn file qua mng da trn Socket TCP

KT LUN
Truyn file qua mng l mt trong nhng ng dng ph bin trn mng LAN v Internet nh: ti xung cc file t mt my ch file xa, gi/nhn th in t, ... Truyn file qua mng da trn Socket TCP l mt phng php truyn file c tin cy cao bi v trc khi truyn n cn thit lp thnh cng knh truyn d liu Khng phi l phng php thay th hon ton nhng phng php truyn file khc m ta tng s dng. Bn cht ca phng php truyn file da vo Socket TCP l nhm tng thm hiu xut lm vic. ti Tm hiu lp trnh socket TCP trong java v ng dng truyn file qua mng t c kt qu nht nh. V c s l thuyt, n trnh by c cc ni dung v mng my tnh, s lc v ngn ng Java, lp trnh Socket TCP ni chung v lp trnh Socket TCP trong Java ni ring; cc ni dung lin quan n truyn file quua mng. V ng dng n phn tch mt cch kh chi tit c ch hot ng ca chng trnh pha clients, pha server v ci t thnh cng chng trnh. Java l mt ngn ng mnh m, tnh bo mt cao v c lp vi nn, do chng trnh ng dng ca n c th d dng chy trn cc h thng khc nhau m khng phi lp trnh li. Tuy nhin, do hn ch v thi gian v trnh nn nhiu tnh nng ca chng trnh cha c hon thin. Trong thi gian ti, chng trnh s c hon thin theo hng b sung cc chc nng cho ph hp yu cu c th ca vic truyn file qua mng, c th p dng vo thc t cuc sng.

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 44

n lp trnh mng

Truyn file qua mng da trn Socket TCP

Ti liu tham kho Ti liu ting Vit [1]. Gio trnh Lp trnh Hng i tng JAVA - Ngc Anh Th Press- NXB Thng K [2]. JAVA Lp trnh mng - Nguyn Phng Lan v Hong c Hi - NXB Gio Dc [3]. Lp trnh Socket vi TCP (bn in t) [4]. Gio trnh H thng mng CCNA- Nguyn Hng Sn - NXB Gio dc nm 2001 Ti liu ting Anh [1]. Computer Networking - By James F. Kurose and Keith W. Ross - Addison Wesley [2]. IP Network Address Translation - Michael Hasenstein -1997 Ti liu khc [1]. Website: http://quantrimang.com/ [2]. Website: http://www.planet-source-code.com/ [3]. Website: http://www.javavietnam.org/

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 45

n lp trnh mng

Truyn file qua mng da trn Socket TCP

Ph lc M ngun chng trnh ng dng 1. M ngun chng chnh pha Server


//FileTransferServer import java.io.*; import java.net.*; import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class FileTransferServer extends Frame { public static String strHostAddress = ""; public static int intPortNumber = 0, intMaxClients = 0; public static Vector vecConnectionSockets = null; public static FileTransferServer objFileTransfer; public static String strFileName = "",strFilePath = ""; public static Socket clientSocket = null; public static ObjectOutputStream outToServer = null; public static ObjectInputStream inFromServer = null; public static void main (String [] args) throws IOException { BufferedReader stdin = new BufferedReader(new InputStreamReader (System.in)); System.out.print("Chon so hieu cong de ket noi: "); System.out.flush(); intPortNumber = Integer.parseInt(stdin.readLine()); System.out.print("So luong may Client co the ket noi: "); System.out.flush(); intMaxClients = Integer.parseInt(stdin.readLine()); objFileTransfer = new FileTransferServer(); } public Label lblSelectFile; public Label lblTitle; public Label lblStudentName; public Label lblStudentClass; public TextField tfFile; public Button btnBrowse; public Button btnSend; public Button btnReset; public FileTransferServer () { setTitle("Chuong trinh truyen File phia Server");

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 46

n lp trnh mng

Truyn file qua mng da trn Socket TCP

setSize(400 , 300); setLayout(null); addWindowListener(new WindowAdapter () { public void windowClosing (WindowEvent e) { System.exit(0); } } ); lblTitle = new Label("Chuong trinh truyen File qua mang dua tren Socket TCP "); add(lblTitle); lblTitle.setBounds(50,30,450,50); lblSelectFile = new Label("Duong dan file can truyen:"); add(lblSelectFile); lblSelectFile.setBounds(50,100,200,20); lblStudentName = new Label("Sinh vien thuc hien:Pham Hong Thu"); add(lblStudentName); lblStudentName.setBounds(130,250,200,20); lblStudentClass = new Label("Lop : CT902"); add(lblStudentClass); lblStudentClass.setBounds(130,270,100,20); tfFile = new TextField(""); add(tfFile); tfFile.setBounds(50,134,200,20); btnBrowse = new Button("Chon File"); btnBrowse.addActionListener(new buttonListener()); add(btnBrowse); btnBrowse.setBounds(283,133,70,20); btnSend = new Button("Gui"); btnSend.addActionListener(new buttonListener()); add(btnSend); btnSend.setBounds(100,200,50,20); btnReset = new Button("Xoa"); btnReset.addActionListener(new buttonListener()); add(btnReset); btnReset.setBounds(170,200,50,20); show(); vecConnectionSockets = new Vector(); try { ServerSocket welcomeSocket = new ServerSocket(intPortNumber,intMaxClients); while (true) { vecConnectionSockets.addElement(new ThreadedConnectionSocket(welcomeSocket.accept())); Thread.yield(); } } catch (IOException ioe) {System.out.println(ioe);}

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 47

n lp trnh mng

Truyn file qua mng da trn Socket TCP

} public static String showDialog () { FileDialog fd = new FileDialog(new Frame(),"Select File...",FileDialog.LOAD); fd.show(); return fd.getDirectory()+fd.getFile(); } private class buttonListener implements ActionListener { public void actionPerformed (ActionEvent ae) { byte[] arrByteOfSentFile = null; if (ae.getSource() == btnBrowse) { strFilePath = showDialog(); tfFile.setText(strFilePath); int intIndex = strFilePath.lastIndexOf("\\"); strFileName = strFilePath.substring(intIndex+1); } if (ae.getSource() == btnSend) { try { FileInputStream inFromHardDisk = new FileInputStream (strFilePath); int size = inFromHardDisk.available(); arrByteOfSentFile = new byte[size]; inFromHardDisk.read(arrByteOfSentFile,0,size); for (int i=0;i<vecConnectionSockets.size();i++) { ThreadedConnectionSocket tempConnectionSocket = (ThreadedConnectionSocket)vecConnectionSockets.elementAt(i); tempConnectionSocket.outToClient.writeObject("IsFileTransfered"); tempConnectionSocket.outToClient.flush(); tempConnectionSocket.outToClient.writeObject(strFileName); tempConnectionSocket.outToClient.flush(); tempConnectionSocket.outToClient.writeObject(arrByteOfSentFile); tempConnectionSocket.outToClient.flush(); } JOptionPane.showMessageDialog(null,"Ban da gui thanh cong file toi Client","Xac nhan",JOptionPane.INFORMATION_MESSAGE); } catch (Exception ex) {} } if (ae.getSource() == btnReset) { tfFile.setText(""); }}} class ThreadedConnectionSocket extends Thread { public Socket connectionSocket; public ObjectInputStream inFromClient;

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 48

n lp trnh mng

Truyn file qua mng da trn Socket TCP

public ObjectOutputStream outToClient; public ThreadedConnectionSocket (Socket s) { connectionSocket = s; try { outToClient = new ObjectOutputStream(connectionSocket.getOutputStream()); outToClient.flush(); inFromClient = new ObjectInputStream(connectionSocket.getInputStream( )); } catch (Exception e) {System.out.println(e);} start(); } public void run () { try { int intFlag = 0; String strFileName = ""; while (true) { Object objRecieved = inFromClient.readObject(); switch (intFlag) { case 0: if (objRecieved.equals("IsFileTransfered")) { intFlag++; } break; case 1: strFileName = (String) objRecieved; int intOption = JOptionPane.showConfirmDialog(null,connectionSocket.getInetAddress() .getHostName()+" dang gui "+strFileName+"!\nBan co chac chan nhan khong?","Thong bao",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE); if (intOption == JOptionPane.YES_OPTION) { intFlag++; } else { intFlag = 0; } break; case 2: byte[] arrByteOfReceivedFile = (byte[])objRecieved; FileOutputStream outToHardDisk = new FileOutputStream(strFileName); outToHardDisk.write(arrByteOfReceivedFile); intFlag = 0;

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 49

n lp trnh mng

Truyn file qua mng da trn Socket TCP

JOptionPane.showMessageDialog(null,"Ban da nhan thanh cong file tu Client","Xac nhan",JOptionPane.INFORMATION_MESSAGE); break; } Thread.yield(); } } catch (Exception e) {System.out.println(e);} }} }

2. M ngun pha Clients


//FiletransferClient import java.io.*; import java.net.*; import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class FileTransferClient extends Frame { public static String strHostAddress = ""; public static int intPortNumber = 0, intMaxClients = 0; public static Vector vecConnectionSockets = null; public static FileTransferClient objFileTransfer; public static String strFileName = "",strFilePath = ""; public static Socket clientSocket = null; public static ObjectOutputStream outToServer = null; public static ObjectInputStream inFromServer = null; public static void main (String [] args) throws IOException { BufferedReader stdin = new BufferedReader(new InputStreamReader (System.in)); System.out.print("Nhap dia chi cua may server de ket noi: "); System.out.flush(); strHostAddress = stdin.readLine(); System.out.print("Nhap dia chi cong de ket noi voi may server: "); System.out.flush(); intPortNumber = Integer.parseInt(stdin.readLine()); objFileTransfer = new FileTransferClient(); } public Label lblSelectFile; public Label lblTitle; public Label lblStudentName; public Label lblStudentClass; public TextField tfFile; public Button btnBrowse; public Button btnSend;

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 50

n lp trnh mng

Truyn file qua mng da trn Socket TCP

public Button btnReset; public FileTransferClient () { setTitle("Chuong trinh truyen File phia Client"); setSize(400 , 300); setLayout(null); addWindowListener(new WindowAdapter () { public void windowClosing (WindowEvent e) { System.exit(0); } } ); lblTitle = new Label("Chuong trinh truyen File may Client "); add(lblTitle); lblTitle.setBounds(50,30,450,50); lblSelectFile = new Label("Duong dan file can truyen:"); add(lblSelectFile); lblSelectFile.setBounds(50,100,200,20); lblStudentName = new Label("Sinh vien thuc hien:Pham Hong Thu"); add(lblStudentName); lblStudentName.setBounds(130,250,200,20); lblStudentClass = new Label("Lop : CT902"); add(lblStudentClass); lblStudentClass.setBounds(130,270,100,20); tfFile = new TextField(""); add(tfFile); tfFile.setBounds(50,134,200,20); btnBrowse = new Button("Chon File"); btnBrowse.addActionListener(new buttonListener()); add(btnBrowse); btnBrowse.setBounds(283,133,70,20); btnSend = new Button("Gui"); btnSend.addActionListener(new buttonListener()); add(btnSend); btnSend.setBounds(100,200,50,20); btnReset = new Button("Xoa"); btnReset.addActionListener(new buttonListener()); add(btnReset); btnReset.setBounds(170,200,50,20); show(); try { clientSocket = new Socket (strHostAddress,intPortNumber); outToServer = new ObjectOutputStream(clientSocket.getOutputStream()); outToServer.flush(); inFromServer = new ObjectInputStream(clientSocket.getInputStream()); int intFlag = 0;

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 51

n lp trnh mng

Truyn file qua mng da trn Socket TCP

while (true) { Object objRecieved = inFromServer.readObject(); switch (intFlag) { case 0: if (objRecieved.equals("IsFileTransfered")) { intFlag++; } break; case 1: strFileName = (String) objRecieved; int intOption = JOptionPane.showConfirmDialog(this,clientSocket.getInetAddress().get HostName()+" dang gui "+strFileName+"!\nBan co chac chan nhan khong?","Thong bao",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);//xac nhan if (intOption == JOptionPane.YES_OPTION) { intFlag++; } else { intFlag = 0; } break; case 2: byte[] arrByteOfReceivedFile = (byte[])objRecieved; FileOutputStream outToHardDisk = new FileOutputStream(strFileName); outToHardDisk.write(arrByteOfReceivedFile); intFlag = 0; JOptionPane.showMessageDialog(this,"Ban dong y nhan file nay tu Server","Thong bao",JOptionPane.INFORMATION_MESSAGE);//file dc nhan;su chung thuc, su xac thuc break; } Thread.yield(); } } catch (Exception e) {System.out.println(e);} } public static String showDialog () { FileDialog fd = new FileDialog(new Frame(),"Select File...",FileDialog.LOAD); fd.show(); return fd.getDirectory()+fd.getFile(); } private class buttonListener implements ActionListener {

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 52

n lp trnh mng

Truyn file qua mng da trn Socket TCP

public void actionPerformed (ActionEvent ae) { byte[] arrByteOfSentFile = null; if (ae.getSource() == btnBrowse) { strFilePath = showDialog(); tfFile.setText(strFilePath); int intIndex = strFilePath.lastIndexOf("\\"); strFileName = strFilePath.substring(intIndex+1); } if (ae.getSource() == btnSend) { try { FileInputStream inFromHardDisk = new FileInputStream (strFilePath); int size = inFromHardDisk.available(); arrByteOfSentFile = new byte[size]; inFromHardDisk.read(arrByteOfSentFile,0,size); outToServer.writeObject("IsFileTransfered"); outToServer.flush(); outToServer.writeObject(strFileName); outToServer.flush(); outToServer.writeObject(arrByteOfSentFile); outToServer.flush(); JOptionPane.showMessageDialog(null,"Ban da gui thanh cong file toi Server","Xac nhan",JOptionPane.INFORMATION_MESSAGE); } catch (Exception ex) {} } if (ae.getSource() == btnReset) { tfFile.setText(""); }}} } class ThreadedConnectionSocket extends Thread { public Socket connectionSocket; public ObjectInputStream inFromClient; public ObjectOutputStream outToClient; public ThreadedConnectionSocket (Socket s) { connectionSocket = s; try { outToClient = new ObjectOutputStream(connectionSocket.getOutputStream()); outToClient.flush(); inFromClient = new ObjectInputStream(connectionSocket.getInputStream( )); } catch (Exception e) {System.out.println(e);} start(); }

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 53

n lp trnh mng

Truyn file qua mng da trn Socket TCP

public void run () { try { int intFlag = 0; String strFileName = ""; while (true) { Object objRecieved = inFromClient.readObject(); switch (intFlag) { case 0: if (objRecieved.equals("IsFileTransfered")) { intFlag++; } break; case 1: strFileName = (String) objRecieved; int intOption = JOptionPane.showConfirmDialog(null,connectionSocket.getInetAddress() .getHostName()+" dang gui "+strFileName+"!\nBan co chac chan nhan khong?","Thong bao",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE); if (intOption == JOptionPane.YES_OPTION) { intFlag++; } else { intFlag = 0; } break; case 2: byte[] arrByteOfReceivedFile = (byte[])objRecieved; FileOutputStream outToHardDisk = new FileOutputStream(strFileName); outToHardDisk.write(arrByteOfReceivedFile); intFlag = 0; JOptionPane.showMessageDialog(null,"Ban da gui thanh cong file toi Server","Xac nhan",JOptionPane.INFORMATION_MESSAGE); break; } Thread.yield(); } } catch (Exception e) {System.out.println(e);} } }

Sinh vin thc hin: Nguyn Th Lc Lp : 12TLT

Trang 54

You might also like