72
 Lp t rình mng t rong JAV A Phn I: Lp trình mng vi các lp InetAddress, UL, v! UL"onnection #$Lp InetAddress Các thiết bđược kết ni vi mng LAN có địa chvt lý d! nh"t# $i% n&! gi'( ch) các má! khác t*+n mng t*)ng vi,c t*!%n các gói tin đến đ'ng vt*-# .! nhi+n/ địa chn&! chcó -ch t*)ng mng LAN# 01t má! kh2ng th3 4ác định được vt*- t*+n 5nt6*n6t b7ng cách 89 d:ng các địa chvt lý/ v; các địa chvt lý kh2ng ch*a vt*- c<a má ! # =>n n?a/ các má! thư@ng di ch!3n t vt*- n&! 8ang vt*- khác/ t*)ng t*ư@ng h( c<a má! 4ách ta! h)Bc má! (alm chng hn#  Nh?ng ngư@i l( t*;nh m ng kh2ng cDn (hEi Fan t Gm đến tng chi tiết d ? li, được định t!ến như thế n&) t*)ng m1t mng LAN# =>n n?a/ Hava kh2ng cng c"( khE nIng t*! 4"t ti các gia) thJc tDng li+n kết d? li, mJc th"( được 89 d:ng bKi LAN# i,c hM t*như v! l& *"t khó khIn# ; mMi ki3 gia) thJc 89 d:ng m1t ki3 địa chkhác nha v& có các đBc t*ưng khác nha/ ch'ng ta cDn (hEi các chư>ng t*;nh khác nha ch) mMi ki3 gia) thJc mng khác nha# .ha! v&) đó/ Hava hM t*gia) thJc .CO5/ gia) thJc n&! có nhi, v: li+n kết các mng vi nha# Các thiết bm1t kết ni 5nt6*n6t t*Pc tiế( được cng c"( m1t định danh d! nh"t được gQi l& địa ch5# Các địa ch5 có th3 l& tRnh h)Bc đ1ng# Các địa ch5 được c"( (hát đ1ng thư@ng được 89 d:ng khi nhi% thiết bcDn t*! c( 5nt6*n6t t*)ng kh)Eng th@i gian nh"t định# 01t địa ch5 chcó th3 gSn vi m1t má!/ nó kh2ng th3 dTng chng# $a chn&! được 89 d:ng  bKi gia) thJc 5 đ3 định t!ến các datag* am ti đ'ng vt*-# Uh2ng c ó địa ch/ ta kh2ng th3 li+n lc được vi má! đóV v; thế t"t cE các má! t-nh đ% (hEi có m1t địa ch5 d! nh"t# L( Wava#n6t#5n6tAdd*688 bi3 diXn m1t địa ch5nt6*n6t# Nó ba) gYm hai t*ư@ng th2ng tinZ h)8tNam6 [m1t đối tượng ki3 \t*ing] v& add*688 [ m1t 8ki3 int]# Các t*ư@ng n& ! kh2ng  (hEi l& t*ư@ng (blic / v; thế ta kh2ng th3 t*! 4 "t ch'ng t*Pc tiế(# L( n&! đ ược 89 d:ng bKi hD hết các l( mng/ ba) gYm \)ck6t/ \6*v6*\)ck6t/ ^_L/ `atag*am\)ck6t/ `atag*amack6t/ #$#$ %o các &'i t()ng InetAddress L( 5n6tAdd*688 được 89 d:ng đ3 bi3 diXn các địa ch5 t*)ng m1t Jng d:ng mng 89 d:ng Hava# Uh2ng ging vi các l( khác/ kh2ng có các c)n8t*ct)* ch) l( 5n6tAdd*688# .! nhi+n/ l( 5n6tAdd*688 có ba (hư>ng thJc tRnh t*E v% các đối tượng 5n6tAdd *688

Lập Trình Mạng Trong JAVA

  • Upload
    nhan

  • View
    233

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 1/72

Lập trình mạng trong JAVA

Phần I: Lập trình mạng với các lớp InetAddress, UL, v! UL"onnection

#$Lớp InetAddress

Các thiết bị được kết nối với mạng LAN có địa chỉ vật lý d! nh"t# $i% n&! gi'( ch)

các má! khác t*+n mạng t*)ng vi,c t*!%n các gói tin đến đ'ng vị t*-# .! nhi+n/ địa chỉ n&! chỉ

có -ch t*)ng mạng LAN# 01t má! kh2ng th3 4ác định được vị t*- t*+n 5nt6*n6t b7ng cách 89 d:ng

các địa chỉ vật lý/ v; các địa chỉ vật lý kh2ng chỉ *a vị t*- c<a má!# =>n n?a/ các má! thư@ng di

ch!3n t vị t*- n&! 8ang vị t*- khác/ t*)ng t*ư@ng hợ( c<a má! 4ách ta! h)Bc má! (alm chng

hạn#

 Nh?ng ngư@i lậ( t*;nh mạng kh2ng cDn (hEi Fan tGm đến tng chi tiết d? li, đượcđịnh t!ến như thế n&) t*)ng m1t mạng LAN# =>n n?a/ Hava kh2ng cng c"( khE nIng t*! 4"t

tới các gia) thJc tDng li+n kết d? li, mJc th"( được 89 d:ng bKi LAN# i,c hM t*ợ như vậ! l& *"t

khó khIn# ; mMi ki3 gia) thJc 89 d:ng m1t ki3 địa chỉ khác nha v& có các đBc t*ưng khác

nha/ ch'ng ta cDn (hEi các chư>ng t*;nh khác nha ch) mMi ki3 gia) thJc mạng khác nha#

.ha! v&) đó/ Hava hM t*ợ gia) thJc .CO5/ gia) thJc n&! có nhi, v: li+n kết các mạng với nha#

Các thiết bị có m1t kết nối 5nt6*n6t t*Pc tiế( được cng c"( m1t định danh d! nh"t được

gQi l& địa chỉ 5# Các địa chỉ 5 có th3 l& tRnh h)Bc đ1ng# Các địa chỉ 5 được c"( (hát đ1ng

thư@ng được 89 d:ng khi nhi% thiết bị cDn t*! cậ( 5nt6*n6t t*)ng kh)Eng th@i gian nh"t định#

01t địa chỉ 5 chỉ có th3 gSn với m1t má!/ nó kh2ng th3 dTng chng# $ịa chỉ n&! được 89 d:ng

 bKi gia) thJc 5 đ3 định t!ến các datag*am tới đ'ng vị t*-# Uh2ng có địa chỉ/ ta kh2ng th3 li+n

lạc được với má! đóV v; thế t"t cE các má! t-nh đ% (hEi có m1t địa chỉ 5 d! nh"t#

Lớ( Wava#n6t#5n6tAdd*688 bi3 diXn m1t địa chỉ 5nt6*n6t# Nó ba) gYm hai t*ư@ng th2ng

tinZ h)8tNam6 [m1t đối tượng ki3 \t*ing] v& add*688 [m1t 8ố ki3 int]# Các t*ư@ng n&! kh2ng

 (hEi l& t*ư@ng (blic/ v; thế ta kh2ng th3 t*! 4"t ch'ng t*Pc tiế(# Lớ( n&! được 89 d:ng bKi hD

hết các lớ( mạng/ ba) gYm \)ck6t/ \6*v6*\)ck6t/ ^_L/ `atag*am\)ck6t/ `atag*amack6t/

#$#$ %ạo các &'i t()ng InetAddress

Lớ( 5n6tAdd*688 được 89 d:ng đ3 bi3 diXn các địa chỉ 5 t*)ng m1t Jng d:ng mạng 89

d:ng Hava# Uh2ng giống với các lớ( khác/ kh2ng có các c)n8t*ct)* ch) lớ( 5n6tAdd*688# .!

nhi+n/ lớ( 5n6tAdd*688 có ba (hư>ng thJc tRnh t*E v% các đối tượng 5n6tAdd*688

Page 2: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 2/72

Các (hư>ng thJc t*)ng lớ( 5n6tAdd*688

(blic 8tatic 5n6tAdd*688 5n6tAdd*688#g6t!Nam6[\t*ing h)8tnam6]

(blic 8tatic 5n6tAdd*688e 5n6tAdd*688#g6tAll!Nam6[\t*ing h)8tnam6]

(blic 8tatic 5n6tAdd*688 5n6tAdd*688#g6tL)cal=)8t[]

."t cE các (hư>ng thJc n&! đ% thPc hi,n kết nối tới 86*v6* `N\ c:c b1 đ3 biết được các

th2ng tin t*)ng đối tượng 5n6tAdd*688#

  .a 4ft (hư>ng thJc đD ti+n# hư>ng thJc n&! nhận t+n c<a h)8tnam6 l&m tham 8ố v& t*E

v% đối tượng ki3 5n6tAdd*688

- d:Z

t*!

5n6tAdd*688 dc 5n6tAdd*688#g6t!Nam6[jjj#mic*)8)t#c)m]V

\!8t6m#)t#(*intln[dc]V

catch[^nkn)jn=)8t4c6(ti)n 6]

 \!8t6m#6**#(*intln[6]V

- d: oZiết chư>ng t*;nh nhận h)8tnam6 t đối dpng l,nh v& in *a địa chỉ 5 tư>ng

Jng với h)8tnam6 đó#

im()*t Wava#n6t#qV

 (blic cla88 .im`C5

 (blic 8tatic v)id main[\t*inge a*g8]

t*!

i[a*g8#l6ngthro]

  \!8t6m#)t#(*intln[sCach 8 dngZ Wava .im`C5 =)8tnam6us]V

Page 3: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 3/72

  5n6tAdd*688 h)8t 5n6tAdd*688#g6t!Nam6[a*g8e]V

\t*ing h)8tNam6 h)8t#g6t=)8tNam6[]V

  \!8t6m#)t#(*intln[s=)8t nam6Zswh)8tNam6]V

\!8t6m#)t#(*intln[s`ia chi 5Zswh)8t#g6t=)8tAdd*688[]]V

catch[^nkn)jn=)8t4c6(ti)n 6] \!8t6m#)t#(*intln[sUh)ng tim tha! dia chis]V

*6t*nV

 

 

#$*$+hận các tr(ng th-ng tin c./ m0t &'i t()ng InetAddress

Chỉ có các lớ( t*)ng gói Wava#n6t có F!%n t*! 4"t tới các t*ư@ng c<a lớ( 5n6tAdd*688#Các lớ( t*)ng gói n&! có th3 đQc các t*ư@ng c<a m1t đối tượng 5n6tAdd*688 b7ng cách gQi

 (hư>ng thJc g6t=)8tnam6 v& g6tAdd*688[]#

(blic \t*ing g6t=)8tNam6[]Z hư>ng thJc n&! t*E v% m1t 4G bi3 diXn h)8tnam6 c<a

m1t đối tượng 5n6tAdd*688# Nế má! kh2ng có h)8tnam6/ th; nó 8x t*E v% địa chỉ 5 c<a

má! n&! dưới dạng m1t 4G ký tP#

(blic b!t6e g6tAdd*688[] Z Nế bạn mốn biết địa chỉ 5 c<a m1t má!/ (hư>ng thJc

g6tAdd*688[] t*E v% m1t địa chỉ 5 dưới dạng m1t mEng các b!t6#

01t 8ố địa chỉ 5 v& m1t 8ố m2 h;nh địa chỉ có các ý nghRa đBc bi,t# - d:/ oyz###o

l& địa chỉ l))(back# Các địa chỉ 5v{ t*)ng kh)Eng yy{### tới y|}#y~~#y~~#y~~ l& các

địa chỉ mltica8t#

Hava o#~ th+m v&) hai (hư>ng thJc ch) lớ( 5n6tAdd*688 ch) (hf( các Jng d:ng ki3m t*a

li, m1t n't c: th3 có đến được ha! kh2ng với n't 4"t (hát l& n't hi,n h&nhV nghRa l& ki3m t*a

46m m1t li+n kết mạng đ• được thiết lậ( ha! chưa# Các li+n kết có th3 bị (h)ng t€a v; nhi%

ng!+n nhGn như i*6jall/ các 86*v6* <! F!%n/ các *)t6* h)ạt đ1ng 8ai chJc nIng/ dG! cá( bịđJt/ h)Bc h)8t K 4a kh2ng bật#

(blic b))l6an i8_6achabl6[int tim6)t] th*)j8 54c6(ti)n

(blic b))l6an i8_6achabl6[N6tj)*k5nt6*ac6 int6*ac6/ int ttl/ int tim6)t] th*)j8

54c6(ti)n

Page 4: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 4/72

Các (hư>ng thJc n&! cố gSng kết nối t*+n c‚ng 6ch) t*+n h)8t K 4a đ3 t;m 46m nó có th3

đến được ha! kh2ng# Nế h)8t đá( Jng t*)ng kh)Eng th@i gian tim6)t mili giG!/ các (hư>ng

thJc n&! t*E v% giá t*ị t*6 nế đến được/ ngược lại nó t*E v% giá t*ị al86#

#$1$20t s' v3 d4 minh h5/:

- d: y Ziết chư>ng t*;nh nhậ( m1t h)8tNam6 t đối dpng l,nh v& in *a dpng th2ng bá)

ch) biết địa chỉ 5 tư>ng Jng với địa chỉ 5 đó th1c lớ( n&)#

im()*t Wava#n6t#qV

 (blic cla88 hanL)ai`C5

  (blic 8tatic v)id main[\t*inge a*g8]

  t*!

  i [a*g8#l6ngth r o]

  \!8t6m#)t#(*intln[sCach 8 dngZ Wava .im`C5 =)8tnam6us]V

 

  5n6tAdd*688 h)8t 5n6tAdd*688#g6t!Nam6[a*g8e]V

  \t*ing h)8tNam6 h)8t#g6t=)8tNam6[]V

  \!8t6m#)t#(*intln[s=)8t nam6Zs w h)8tNam6]V

  \!8t6m#)t#(*intln[s`ia chi 5Zs w h)8t#g6t=)8tAdd*688[]]V

  b!t6e b h)8t#g6tAdd*688[]V

  int i be u ƒ be Z y~„ w beV

  i [[i u o] … [i oy„]]

  \!8t6m#)t#(*intln[h)8t w s th)c dia chi l)( As]V

 

  i [[i o}o] … [i u oy†]]

  \!8t6m#)t#(*intln[h)8t w s th)c dia chi l)( s]V

 

  i [[i yy|] … [i u o}y]]

  \!8t6m#)t#(*intln[h)8t w s th)c dia chi l)( Cs]V

 

Page 5: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 5/72

  catch [^nkn)jn=)8t4c6(ti)n 6]

  \!8t6m#)t#(*intln[sUh)ng tim tha! dia chis]V

  *6t*nV

 

 

*$ Lớp UL

Cách đ>n giEn nh"t đ3 m1t chư>ng t*;nh Hava định vị v& t;m kiếm d? li, l& 89 d:ng m1t

đối tượng ^_L# ạn kh2ng cDn (hEi l) lSng tới các chi tiết b+n t*)ng c<a gia) thJc đang được 89

d:ng/ kh2n dạng d? li, được nhận/ ha! l&m thế n&) đ3 t*!%n tin với 86*v6*V bạn chỉ cDn ch)

 biết ^_L/ Hava 8x l"! d? li, v% ch) bạn#

Lớ( Wava#n6t#^_L l& m1t khái ni,m v% b1 định vị t&i ng!+n thống nh"t# Nế lư t*?

^_L dưới dạng m1t đối tượng \t*ing 8x kh2ng có lợi 8) với vi,c t‚ chJc ^_L như m1t đối

tượng với các t*ư@ng Z gia) thJc [(*)t)c)l]/ h)8nam6/ c‚ng [()*t]/ đư@ng d‡n [(ath]/ t+n tậ( tin

[il6nam6]/ m:c t&i li, [d)cm6nt 86cti)n]/ mMi t*ư@ng có th3 được thiết lậ( m1t cách đ1c lậ(#

*$#$ %ạo các UL

Có bốn c)n8t*ct)*/ khác nha v% th2ng tin m& nó cDn# C)n8t*ct)* m& bạn 89 d:ng (h:

th1c v&) th2ng tin m& bạn có/ v& kh2n dạng t*)ng ^_L đó# ."t cE các c)n8t*ct)* n&! 8x đưa*a ng)ại l, 0al)*m6d^_L4c6(ti)n [^_L kh2ng đ'ng kh2n dạng] nế ta tạ) *a m1t ^_L ch)

m1t gia) thJc m& nó kh2ng được hM t*ợ#^_L cng c"( các h&m c" t9 8aZ

(blic ^_L[\t*ing *l] th*)j8 0al)*m6d^_L4c6(ti)n

$G! l& c)n8t*ct)* đ>n giEn nh"tV tham 8ố c<a nó chỉ l& m1t ^_L K dạng 4G#

- d:Z

t*!

^_L n6j _L[htt(ZOOjjj#8n#c)mOind64#html]V

catch[0al)*m6d^_L4c6(ti)n 6]

  \!8t6m#6**#(*intln[6]V

(blic ^_L[\t*ing (*)t)c)l/ \t*ing h)8t/ \t*ing il6] th*)j8 0al)*m6d^_L4c6(ti)n

C)n8t*ct)* n&! 4G! dPng m1t ^_L t các 4G (hGn bi,t 4ác định gia) thJc/ h)8tnam6/ v& t,(

Page 6: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 6/72

tin# )*t được thiết lậ( b7ng ˆo v; vậ! c‚ng mBc định ch) gia) thJc 8x được 89 d:ng#

- d:Z

t*!

^_L n6j _L[htt(/Ojjj#8n#c)m/ind64#html]V

catch[0al)*m6d^_L4c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

(blic _L[\t*ing (*)t)c)l/ \t*ing h)8t/ int ()*t/ \t*ing il6] th*)j8 0al)*m6d^_L4c6(ti)n

.*)ng m1t 8ố -t t*ư@ng hợ( khi c‚ng mBc định kh2ng cpn đ'ng/ c)n8t*ct)* n&! ch) (hf( bạn 4ác

định c‚ng m1t cách *‰ *&ng/ l& m1t 8ố ki3 int# Các tham 8ố khác giống như t*+n#

- d:Z

t*!

^_L n6j _L[htt(/Ojjj#8n#c)m/†/ind64#html]V

catch[0al)*m6d^_L4c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

(blic ^_L[^_L / \t*ing 8] th*)j8 0al)*m6d^_L4c6(ti)n

=&m c" t9 n&! 4G! dPng m1t ^_L t!,t đối t ^_L tư>ng đốiV có th3 l& đG! l& c)n8t*ct)* bạn

8x 89 d:ng thư@ng 4!+n#- d:Z

^_L o/yV

t*!

  ^_L o n6j ^_L[htt(ZOOjjj#macaF#c)mOind64#html]V

^_L y n6j _L[o/v6nd)*#html]V

catch[0al)*m6d^_L4c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

.+n il6 được l)ại kh€i đư@ng d‡n c<a o/ v& t+n il6 mới v6nd)*#html được gán v&) đ3 tạ) l+n y#

C)n8t*ct)* n&! đBc bi,t h? -ch khi bạn mốn d!,t Fa m1t danh 8ách các il6 m& t"t cE cTng

n7m t*)ng m1t thư m:c#

Page 7: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 7/72

*$*$ Ph6n t3ch m0t UL th!nh các th!nh phần

Có 8á t*ư@ng th2ng tin t*)ng lớ( ^_LZ gia) thJc/ ()*t/ il6/ m:c tham chiế t&i li,#

(blic \t*ing g6t*)t)c)l[]

hư>ng thJc g6t*)t)c)l[] t*E v% m1t 4G ký tP bi3 diXn (hDn gia) thJc c<a ^_L

(blic \t*ing g6t=)8t[]

hư>ng thJc g6t=)8t[] t*E v% m1t 4G ký tP bi3 diXn (hDn h)8tnam6 c<a ^_L#

(blic int g6t)*t[]

hư>ng thJc g6t)*t[] t*E v% m1t 8ố ng!+n ki3 int bi3 diXn 8ố hi, c‚ng có t*)ng ^_L#

(blic int g6t`6alt)*t[]

hư>ng thJc g6t`6atl)*t[] t*E v% 8ố hi, c‚ng mBc định ch) gia) thJc c<a ^_L

(blic \t*ing g6tŠil6[]

hư>ng thJc g6tŠil6[] t*E v% m1t 4G ký tP chJa (hDn đư@ng d‡n c<a m1t ^_LV Hava kh2ng (hGn

chia m1t ^_L th&nh các (hDn đư@ng d‡n v& (hDn t,( tin *i+ng bi,t#

(blic \t*ing g6t_6[]

hư>ng thJc n&! t*E v% (hDn định danh đ)ạn c<a ^_L

- d:Z iết chư>ng t*;nh nhậ( v&) m1t ^_L t đối dpng l,nh v& hi3n thị tng th&nh (hDn tạ) n+n

^_L l+n m&n h;nh#

OOChư>ng t*;nh l"! th2ng tin c<a ^_L với các th2ng tin nhậ( t b&n (h-m

im()*t Wava#n6t#qV

cla88 g6t^_La*t8

 (blic 8tatic v)id main[\t*inge a*g8]

t*!

^_L n6j _L[a*g8e]V

\!8t6m#)t#(*intln[s^_L i8 sw]V

\!8t6m#)t#(*intln[s.h6 (*)t)c)l (a*t i8 sw#g6t*)t)c)l[]]V

\!8t6m#)t#(*intln[s.h6 h)8t (a*t i8 sw#g6t=)8t[]]V

\!8t6m#)t#(*intln[s.h6 il6 (a*t i8 sw#g6tŠil6[]]V

\!8t6m#)t#(*intln[s.h6 *66*6nc6 (a*t i8 sw#g6t_6[]]V

Page 8: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 8/72

  catch[0al)*m6d^_L4c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

*$1$ %ìm 7i8m d9 li; t< m0t UL

 Nế chỉ có ^_L thDn t'! th; kh2ng có g; th' vị# $i% th' vị l& d? li, n7m t*)ng các t,(

tin m& nó t*€ tới# Lớ( Wava#n6t#^_L có ba (hư>ng thJc đ3 t;m kiếm d? li, t m1t ^_L #

(blic inal 5n(t\t*6am )(6n\t*6am[] th*)j8 Wava#i)#54c6(ti)n

hư>ng thJc n&! kết nối tới m1t t&i ng!+n được tham chiế bKi m1t ^_L/ thPc hi,n c> chế bSt

ta! cDn thiết gi?a cli6nt v& 86*v6*/ v& t*E v% m1t lYng nhậ( 5n(t\t*6am#

.a 89 d:ng lYng n&! đ3 đQc d? li,# `? li, nhận t lYng n&! l& d? li, th2 c<a m1t t,( tin m&

^_L tham chiế [m• A\C55 nế đQc m1t t,( vIn bEn/ m• =.0L nế đQc m1t t&i li, =.0L/

m1t Enh nhị (hGn nế ta đQc m1t il6 Enh]# Nó kh2ng có các th2ng tin h6ad6* v& các th2ng tin

có li+n Fan đến gia) thJc

(blic ^_LC)nn6cti)n )(6nC)nn6cti)n[] th*)j8 Wava#i)#54c6(ti)n

hư>ng thJc )(6C)nn6cti)n[] mK m1t 8)ck6t tới m1t ^_L 4ác định v& t*E v% m1t đối tượng

^_L# 01t đối tượng ^_LC)nn6cti)n bi3 diXn m1t li+n kết mK tới m1t t&i ng!+n mạng# Nế

l@i gQi (hư>ng thJc th"t bại nó đưa *a ng)ại l, 54c6(ti)n#

(blic inal bW6ct g6tC)n6t6nt[] th*)j8 Wava#i)#54c6(ti)n

hư>ng thJc n&! cng c"( cách thJ ba đ3 tEi d? li, được tham chiế bKi m1t ^_L# hư>ng thJc

g6tC)nt6nt[] t;m kiếm d? li, được tham chiế bKi m1t ^_L v& ch!3n nó th&nh m1t ki3 đối

tượng n&) đó# Nế đối tượng tham chiế tới m1t ki3 đối tượng vIn bEn n&) đó như t,( tin A\C55

h)Bc t,( =.0L/ đối tượng được t*E v% th2ng thư@ng 8x l& m1t ki3 lYng nhậ( 5n(t\t*6am n&)

đó# Nế ^_L tham chiế tới m1t đối tượng Enh như Enh ‹5Š h)Bc H‹ th; (hư>ng thJc

g6tC)nt6nt[] t*E v% đối tượng Wava#ajt#5mag6*)dc6*

- d:Ziết chư>ng t*;nh nhậ( m1t ^_L t b&n (h-m/ kết nối với 5nt6*n6t v& hi3n thị m• ngYn

c<a t*ang Œ6b đó l+n m&n h;nh#

Page 9: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 9/72

im()*t Wava#n6t#qV

im()*t Wava#i)#qV

 (blic cla88 i6j\)*c6

  (blic 8tatic v)id main[\t*inge a*g8]

^_L V

\t*ing thi8Lin6V

i[a*g8#l6ngthu]

t*!

n6j _L[a*g8e]V

t*!

`ata5n(t\t*6am di8 n6j `ata5n(t\t*6am[#)(6n\t*6am[]]V

jhil6[[thi8Lin6di8#*6adLin6[]]rnll]

\!8t6m#)t#(*intln[thi8Lin6]V

catch[54c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

catch[0al)*m6d^_L4c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

*$=$ "ác ph(>ng th?c tin 3ch 

Lớ( ^_L cng c"( hai (hư>ng thJc ti,n -ch đ3 thPc hi,n các tha) tác t*+n ^_L# hư>ng

thJc 8am6Šil6[] 4ác định 46m hai ^_L có cTng t*€ tới m1t t&i li, ha! kh2ng# hư>ng thJc

t)4t6*nalŠ)*m[] ch!3n đ‚i m1t đối tượng ^_L th&nh m1t 4G ký tP được 89 d:ng t*)ng m1t

li+n kết =.0L h)Bc h1( th)ại c<a t*;nh d!,t#

(blic b))l6an 8am6Šil6[^_L )th6*]

1$ Lớp UL"onnection

Page 10: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 10/72

^_LC)nn6cti)n l& m1t lớ( t* tượng bi3 diXn m1t li+n kết t-ch cPc tới m1t t&i ng!+n

được 4ác định bKi m1t ^_L#

Lớ( ^_LC)nn6cti)n có hai m:c đ-ch khác nha nhưng li+n Fan với nha#

.hJ nh"t/ nó cng c"( nhi% khE nIng đi% khi3n h>n th2ng Fa vi,c tư>ng tác với m1t 86*v6*

chJ kh2ng (hEi lớ( ^_L# ới ^_LC)nn6cti)n ta có th3 ki3m t*a các h6ad6*050 được g9i bKi

m1t =tt( \6*v6* (hEn Jng tư>ng Jng# .a cng có th3 89 d:ng lớ( ^_LC)nn6cti)n đ3 tEi v% các

t,( nhị (hGn# Ng)&i *a ^_LC)nn6cti)n ch) (hf( bạn g9i d? li, t*K lại Œ6b 86*v6* b7ng l,nh

\.# Ch'ng ta 8x 46m t"t cE các kŽ thật đó t*)ng chư>ng n&!#

.hJ hai/ ^_LC)nn6cti)n l& m1t (hDn c<a c> chế FEn t*ị gia) thJc/ c> chế n&! cpn ba) gYm cE

lớ( ^_L\t*6am=andl6*# tưKng đ7ng 8a các t*;nh FEn t*ị gia) thJc *"t đ>n giEnZ ch'ng ch)

 (hf( bạn (hGn tách các chi tiết 49 lý m1t gia) thJc với vi,c 49 lý các ki3 d? li, c: th3/ cng

c"( các gia) di,n ngư@i dTng/ v& thPc hi,n các c2ng vi,c khác m& m1t t*;nh d!,t thư@ng l&m#Lớ( c> 8K ^_LC)nn6cti)n l& m1t lớ( t* tượngV đ3 c&i đBt m1t gia) thJc c: th3 bạn cDn (hEi

viết m1t lớ( c)n# Các lớ( c)n n&! có th3 được tEi bKi các Jng d:ng c<a *i+ng bạn ha! bKi các

t*;nh d!,t =)tHavaV t*)ng tư>ng lai/ các Jng d:ng Hava có th3 tEi v% các t*;nh FEn t*ị gia) thJc

khi cDn#

0K các ^_LC)nn6cti)n

01t chư>ng t*;nh 89 d:ng lớ( ^_LC)nn6cti)n t*Pc tiế( th6) m1t d•! các bước c> bEn 8aZ

G! dPng m1t đối tượng ^_L#

‹Qi (hư>ng thJc )(6nC)nn6cti)n[] c<a đối tượng ^_L đ3 t;m kiếm m1t đối tượng

^_LC)nn6cti)n ch) _L đó#

C" h;nh đối tượng ^_L#

$Qc các t*ư@ng h6ad6*#

Nhận m1t lYng nhậ( v& đQc d? li,#

Nhận m1t lYng 4"t v& ghi d? li,#

$óng li+n kết#

.! nhi+n/ kh2ng (hEi l'c n&) ta cng (hEi thPc hi,n t"t cE các bước n&!#- d:Z 0K m1t _LC)nn6cti)n tới htt(ZOO jjj#mic*)8)t#c)m

im()*t Wava#n6t#qV

im()*t Wava#i)#qV

 (blic cla88 g6t^_LC)nn6cti)n

Page 11: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 11/72

 (blic 8tatic v)id main[\t*inge a*g8]

^_L V

^_LC)nn6cti)n cV

t*!

n6j ^_L[shtt(ZOOjjj#mic*)8)t#c)ms]V

t*!

c#)(6nC)nn6cti)n[]V

catch[54c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

catch[0al)*m6d^_L4c6(ti)n 6]

  \!8t6m#6**#(*intln[6]V

0Bc dT lớ( ^_LC)nn6cti)n l& m1t lớ( t* tượng nhưng nó có m1t (hư>ng thJc được

c&i đBt# hư>ng thJc đó l& c)nn6ct[]V (hư>ng thJc n&! tạ) m1t li+n kết tới m1t 86*v6*V v; vậ! nó

 (h: th1c v&) ki3 dịch v: m& ta c&i đBt [=../ Š./##]# ."t nhi+n/ ta có th3 cEm th"! ti,n lợi ha!

cDn thiết (hEi nạ( chYng các (hư>ng thJc n&! t*)ng lớ(#

_"t nhi% các (hư>ng thJc v& các t*ư@ng t*)ng lớ( ^_LC)nn6cti)n có l& (hư>ng thJc

 (*)t6ct6d# 0Bt khác ta chỉ có th3 t*! cậ( tới ch'ng th2ng Fa các th3 hi,n c<a lớ(

^_LC)nn6cti)n h)Bc các lớ( c)n c<a nó# _"t -t khi ch'ng ta khKi tạ) v& t*! cậ( t*Pc tiế( các

đối tượngV tha! v&) đó/ m2i t*ư@ng th@i gian chạ! 8x tạ) *a các đối tượng khi cDn tT! th1c v&)

gia) thJc 89 d:ng# \a đó lớ( 8x được khKi tạ) b7ng cách 89 d:ng các (hư>ng thJc )*Nam6[]

v& n6j5n8tanc6[] c<a lớ( Wava#lang#Cla88#

(blic ab8t*act v)id c)nn6ct[] th*)j8 54c6(ti)n

hư>ng thJc c)nn6ct[] l& m1t (hư>ng thJc t* tượng mK m1t li+n kết tới m1t 86*v6*# .+n c<a86*v6* được l"! *a t m1t ^_L được lư t*? như l& m1t t*ư@ng t*)ng ^_LC)nn6cti)n/ v& được

thiết lậ( bKi c)n8t*ct)* c<a lớ(# Các lớ( c)n c<a lớ( ^_LC)nn6cti)n nạ( chYng các (hư>ng

thJc n&! đ3 FEn lý m1t ki3 li+n kết c: th3# - d:/ m1t (hư>ng thJc c)nn6ct[] c<a lớ(

Šil6^_LC)nn6cti)n ch!3n đ‚i ^_L th&nh m1t il6nam6 t*)ng thư m:c tư>ng Jng/ tạ) *a th2ng

tin 050 ch) il6/ v& mK m1t lYng Šil65n(t\t*6am tới il6# hư>ng thJc c)nn6ct[] c<a lớ(

Page 12: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 12/72

=tt(^_LC)nn6cti)n tạ) *a m1t đối tượng =tt(Cli6nt đ3 kết nối với 86*v6*# hư>ng thJc

)(6nC)nn6cti)n[] c<a đối tượng ^_L gQi (hư>ng thJc c)nn6ct[] tư>ng Jng/ v& t*E v% li+n kết đ•

được mK# ; vậ! ta hiếm khi cDn (hEi gQi (hư>ng thJc c)nn6ct[] m1t cách t*Pc tiế(#

$Qc d? li, t m1t 86*v6*

`ưới đG! l& các bước tối thi3 cDn đ3 t;m kiếm d? li, t m1t ^_L b7ng cách 89 d:ng đối tượng^_LC)nn6cti)nZ

) ước oZ G! dPng m1t đối tượng ^_L#

) ước yZ ‹Qi (hư>ng thJc )(6nC)nn6cti)n[] c<a lớ( ^_L đ3 t;m kiếm m1t đối tượng

^_L C)nn6cti)n ch) đối tượng _L đó#

) ước |Z ‹Qi (hư>ng thJc g6t5n(t\t*6am[]#

) ước {Z $Qc t lYng nhậ( b7ng cách 89 d:ng A5#

(blic bW6ct g6tC)nt6nt[] th*)j8 54c6(ti)như>ng thJc v% mBt E) giác giống như (hư>ng thJc g6tC)nt6nt[] c<a lớ( ^_L# .hPc tế/ (hư>ng

thJc ^_L#g6tC)nt6nt[] chỉ vi,c gQi (hư>ng thJc g6tC)nt6nt[] tEi v% đối tượng được chQn bKi

^_L c<a _LC)nn6cti)n n&!# $3 (hư>ng thJc g6tC)nt6nt[] h)ạt đ1ng/ m2i t*ư@ng cDn nhận

dạng v& hi3 ki3 n1i dng# =i,n na! chỉ có m1t 8ố ki3 n1i dng được hi3 l& t64tO(lain/

imag6Ogi/ v& imag6OW(6g# ạn có th3 c&i đBt th+m các ki3 t*;nh FEn lý n1i dng khác có th3

hi3 các ki3 n1i dng khác# hư>ng thJc g6tC)nt6nt[] chỉ l&m vi,c với các gia) thJc như =..

m& có m1t 8P hi3 biết *‰ *&ng v% các ki3 n1i dng 050# Nế ki3 n1i dng kh2ng được biết

t*ước/ h)Bc gia) thJc kh2ng hi3 các ki3 n1i dng/ th; ng)ại l, ^nkn)jn\6*vic4c6(ti)n đượcđưa *a#

(blic 5n(t\t*6am g6t5n(t\t*6am[]

hư>ng thJc g6tC)nt6nt[] chỉ l&m vi,c khi Hava có m1t t*;nh FEn lý n1i dng ch) ki3 n1i dng#

 Nế kh2ng (hEi t*ư@ng hợ( n&!/ bạn có lx 8x cDn m1t lYng 5n(t\t*6am chng/ lYng n&! ch)

 (hf( bạn tP đQc v& (hGn t-ch d? li,# $3 l&m như vậ!/ cDn gQi (hư>ng thJc g6t5n(t\t*6am[]#

hư>ng thJc n&! cng h? -ch khi t*;nh FEn lý n1i dng có 8‘n kh2ng thPc hi,n ch-nh 4ác cái

m& bạn mốn#

- d:Z .Ei v% m1t t*ang j6b th2ng Fa m1t ^_L#

im()*t Wava#n6t#qV

im()*t Wava#i)#qV

 (blic cla88 vi6j8)*c6

Page 13: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 13/72

  (blic 8tatic v)id main[\t*inge a*g8]

\t*ing thi8Lin6V

^_L V

^_LC)nn6cti)n cV

i[a*g8#l6ngthu]

t*!

n6j _L[a*g8e]V

t*!

c#)(6nC)nn6cti)n[]V

`ata5n(t\t*6am th6=tml n6j ata5n(t\t*6am[c#g6t5n(t\t*6am[]]V

t*!

jhil6[[thi8Lin6th6=tml#*6adLin6[]]rnll] \!8t6m#)t#(*intln[thi8Lin6]V

  catch[4c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

  catch[4c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

catch[0al)*m6d^_L4c6(ti)n 6]

\!8t6m#6**#(*intln[a*g8ews i8 n)t a (a*86abl6 _Ls]V

\!8t6m#6**#(*intln[6]V

hư>ng thJc )(6n\t*6am[] c<a lớ( ^_L t*E v% đối tượng 5n(t\t*6am t đối tượng

^_LC)nn6cti)n#

Page 14: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 14/72

(blic t(t\t*6am g6tt(t\t*6am[]

$2i khi bạn cDn (hEi ghi d? li, v&) m1t ^_LC)nn6cti)nˆchng hạn khi bạn mốn g9i d? li,

tới m1t j6b 86*v6* 89 d:ng l,nh \.# hư>ng thJc g6tt(t\t*6am[] t*E v% m1t lYng

t(t\t*6am t*+n đó bạn có th3 ghi d? li, đ3 t*!%n tới m1t 86*v6*# ; m1t ^_LC)nn6cti)n

kh2ng ch) (hf( 4"t kết FE *a K chế đ1 mBc định/ bạn (hEi gQi (hư>ng thJc 86t`)t(t[]t*ước khi !+ cD m1t lYng 4"t# 0Mi khi bạn có m1t lYng t(t\t*6am th2ng thư@ng bạn

 (hEi gSn nó với lYng atat(t\t*6am h)Bc m1t lớ( c)n khác c<a lớ( t(t\t*6am m& đưa *a

nhi% đBc t*ưng h>n#

- d:Z

t*!

^_L n6j _L[htt(ZOO jjj#8)m6h)8t#c)mOcgiˆbinOacgi]V

^_LC)nn6cti)n c #)(6nC)nn6cti)n[]Vc#86t`)t(t[t*6]V

`atat(t\t*6am d)8 n6j atat(t\t*6am[c#g6tt(t\t*6am[]]V

d)8#j*it6!t6[=6**6 i8 8)m6 data]V

catch[4c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

\P khác bi,t gi?a ^_L v& ^_LC)nn6cti)n l&Z

^_LC)nn6cti)n ch) (hf( t*! 4"t tới h6ad6* =..#

^_LC)nn6cti)n có th3 c" h;nh các tham 8ố !+ cD được g9i ch) 86*v6*#

^_LC)nn6cti)n có th3 ghi d? li, l+n 86*v6* cng như đQc d? li, t 86*v6*#

1$#$ Ph6n t3ch @e/der

=.. \6*v6* cng c"( m1t 8ố lượng th2ng tin đáng k3 t*)ng các h6ad6* 050 t*ước

mMi đá( Jng# .h2ng tin t*)ng các h6ad6* 050 có th3 ba) gYm c> chế m• hóa n1i dng được 89

d:ng/ ng&! v& gi@/ chi% d&i c<a n1i dng được t*E v% b7ng b!t6/ ng&! hết hạn c<a n1i dng/ ng&!m& n1i dng được 89a đ‚i lDn cối# .! nhi+n/ th2ng tin được g9i (h: th1c v&) 86*v6*V m1t

86*v6* n&) đó g9i t"t cE các th2ng tin n&! ch) mMi !+ cD/ các 86*v6* khác g9i các th2ng tin n&)

đó/ v& m1t 8ố -t 86*v6* kh2ng g9i th2ng tin n&)# Các (hư>ng thJc c<a m:c n&! ch) (hf( ta t*!

v"n m1t ^_LC)nn6cti)n đ3 t;m *a th2ng tin 050 n&) m& 86*v6* đ• cng c"(#

Page 15: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 15/72

 Ng)&i =../ *"t -t gia) thJc 89 d:ng các h6ad6* 050# Uhi viết lớ( c)n c<a lớ(

^_LC)nn6cti)n/ th2ng thư@ng cDn (hEi nạ( chYng các (hư>ng thJc n&! 8a) ch) ch'ng t*E v% các

giá t*ị có ý nghRa# hDn th2ng tin Fan t*Qng nh"t bạn có th3 thiế l& ki3 n1i dng 050#

^_LC)nn6cti)n cng c"( m1t 8ố (hư>ng thJc ti,n -ch n&) đó m& t*ợ gi'( bạn đ)án nhận *a ki3

n1i dng/ dPa t*+n t+n il6 c<a nó h)Bc m1t 8ố b!t6 đD ti+n c<a ch-nh d? li,#

(blic \t*ing g6tC)nt6nt.!(6[]

hư>ng thJc t*E v% ki3 n1i dng 050 c<a d? li,# Nó (h: th1c v&) j6b 86*v6* g9i m1t

h6ad6* 050 tư>ng Jng/ ba) gYm m1t ki3 n1i dng 4ác thPc# Nó kh2ng đưa *a ng)ại l, v& t*E

v% giá t*ị nll nế ki3 n1i dng kh2ng có# t64tOhtm 8x l& ki3 n1i dng m& bạn thư@ng 4!+n gB(

nh"t khi kết nối với j6b 86*v6*# Các ki3 n1i dng (h‚ biến khác ba) gYmZ t64tO(lain/ imag6Ogi/

imag6OW(6g#

(blic int g6tC)nt6ntL6ngth[]hư>ng thJc n&! ch) ta biết n1i dng có k-ch thước ba) nhi+ b!t6# _"t nhi% 86*v6* chỉ g9i các

h6ad6* đ1 d&i n1i dng khi ch'ng t*!%n m1t il6 nhị (hGn/ chJ kh2ng (hEi khi t*!%n m1t il6

vIn bEn# Nế kh2ng có chi% d&i n1i dng/ (hư>ng thJc g6tC)nt6ntL6ngth[] t*E v% ˆo# hư>ng

thJc n&! kh2ng đưa *a ng)ại l,# Nó được 89 d:ng khi ta cDn biết cDn đQc ba) nhi+ b!t6/ h)Bc khi

ta cDn tạ) *a m1t b6* đ< lớn đ3 lư t*? d? li,#

(blic \t*ing g6tC)nt6ntnc)ding[]

hư>ng thJc n&! t*E v% \t*ing ch) ta biết cách thJc m• hóa# Nế n1i dng được g9i kh2ng được

m• hóa [như t*)ng t*ư@ng hợ( c<a =.. 86*v6*]/ (hư>ng thJc n&! t*E v% giá t*ị nll# Nó kh2ng

đưa *a ng)ại l,#

(blic l)ng g6t`at6[]

hư>ng thJc g6t`at6[] t*E v% m1t 8ố ng!+n ki3 l)ng ch) bạn biết t&i li, đ• được g9i khi n&)#

.a có th3 ch!3n đ‚i nó 8ang m1t đối tượng ki3 Wava#til#`at6#

- d:Z `at6 d)c\6nt n6j `at6[c#g6t`at6[]]V

$G! l& th@i gian t&i li, được g9i t*+n 86*v6*# Nế h6ad6* 050 kh2ng có m1t h6ad6* `at6#

(blic l)ng g6t4(i*ati)n[]

(blic l)ng g6tLa8t0)dii6d[]

hư>ng thJc dat6/ g6tLa8t0)dii6d[]/ t*E v% ng&! m& t&i li, được 89a đ‚i lDn cối#

- d:Z $Qc các ^_L t dpng l,nh/ v& 89 d:ng „ (hư>ng thJc đ3 in *a ki3 n1i dng/ chi% d&i n1i

dng/ m• hóa n1i dng/ ng&! 89a đ‚i cối cTng/ ng&! hết hạn/ v& ng&! hi,n h&nh#

Page 16: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 16/72

1$*$ %ìm 7i8m các tr(ng @e/der 2I2

\á (hư>ng thJc cối cTng đpi h€i các t*ư@ng nh"t định t h6ad6* 050/ nhưng kh2ng

có giới hạn n&) v% 8ố các t*ư@ng h6ad6* m& m1t th2ng đi,( 050 có th3 có# NIm (hư>ng thJc

tiế( th6) ki3m t*a các t*ư@ng nh"t định t*)ng h6ad6* 050#

Šil6^_LC)nn6cti)n kh2ng có các h6ad6* 050 thPc 8P / v; vậ! t"t cE các (hư>ng thJc

n&! t*E v% giá t*ị nll khi bạn đang l&m vi,c với m1t il6Z ^_L/ h&nh vi mBc định c<a ch'ng#

=tt(^_LC)nn6cti)n8 t;m *a m1t t*ư@ng h6ad6* đ3 th€a m•n !+ cD c<a bạn# Nế được t;m th"!/

nó được t*E v%/ ngược lại nó t*E v% giá t*ị nll#

(blic \t*ing g6t=6ad6*Ši6ld[\t*ing nam6]

hư>ng thJc g6t=6ad6*Ši6ld[] t*E v% giá t*ị c<a t*ư@ng h6ad6* 050 được đBt t+n# .+n c<a

h6ad6* kh2ng (hGn bi,t ch? h)a v& ch? thư@ng v& kh2ng chJa d" kết th'c#

- d:/ đ3 t;m giá t*ị c<a các t*ư@ng h6ad6* C)nt6ntˆt!(6/ C)nt6ntˆ6nc)ding c<a m1t đối tượng

^_LC)nn6cti)n c bạn có th3 viếtZ

c#g6t=6ad6*Ši6ld[c)nt6ntˆt!(6]V

c#g6t=6ad6*Ši6ld[c)nt6ntˆ6nc)ding]V

$3 nhận th2ng tin v% các t*ư@ng `at6/ C)nt6ntˆl6ngth/ h)Bc 4(i*ati)n bạn cng thPc hi,n tư>ng

tPZ

c#g6t=6ad6*Ši6ld[dat6]Vc#g6t=6ad6*Ši6ld[64(i*68]V

c#g6t=6ad6*Ši6ld[C)nt6ntˆl6ngth]V

."t cE các (hư>ng thJc n&! đ% t*E v% các \t*ing/ kh2ng (hEi int cng kh2ng (hEi l)ng như các

 (hư>ng thJc g6tC)nt6ntL6ngth[]V g6t4(i*ati)n`at6[]/ g6tLa8t0)dii6d[]/ v& g6t`at6[]# Nế bạn

Fan tGm đến m1t giá t*ị 8ố/ bạn (hEi ch!3n đ‚i \t*ing th&nh l)ng h)Bc int#

(blic \t*ing g6t=6ad6*Ši6ldU6![int n]

hư>ng thJc n&! t*E v% khóa [nghRa l& t+n t*ư@ngZ v- d:/ C)nt6ntˆl6ngth h)Bc \6*v6*] c<a t*ư@ngh6ad6* thJ n# =6ad6* đD ti+n l& # - d:/ đ3 nhận khóa thJ „ c<a h6ad6* 050 c<a

^_LC)nn6cti)n/ bạn viếtZ

\t*ing h6ad6*~c#g6t=6ad6*Ši6ldU6![~]V

Page 17: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 17/72

(blic \t*ing g6t=6ad6*Ši6ld[int n]

hư>ng thJc n&! t*E v% giá t*ị t*ư@ng h6ad6* 050 thJ n# =6ad6* 050 đD ti+n l& m1t#

- d:Z \9 d:ng (hư>ng thJc kết hợ( với (hư>ng thJc g6t=6ad6*Ši6ldU6![]đ3 in *a h6ad6*

050#

(blic l)ng g6t=6ad6*Ši6ld`at6[\t*ing nam6/ l)ng d6alt]

hư>ng thJc n&! t*ước hết t;m kiếm t*ư@ng h6ad6* được 4ác định bKi tham 8ố nam6 v& cố gSng

ch!3n đ‚i 4G n&! 8ang ki3 l)ng#

1$1$ "ác ph(>ng th?c eB;estPropertC

ốn (hư>ng thJc 8a kh2ng thPc hi,n b"t k’ c2ng vi,c g; t*)ng lớ( c> 8K

^_LC)nn6cti)n/ cng kh2ng được c&i đBt t*)ng các lớ( Šil6^_LC)nn6cti)n h)Bc

=tt(C)nn6cti)n# ạn có th3 m)ng mốn nạ( chYng ch'ng t*)ng m1t lớ( c)n đ3 c&i đBt (hư>ng

thJc t*a cJ bEng bIm/ chng hạn đ3 4G! dPng m1t bEng bIm chJa t"t cE các h6ad6* 050 c<a

!+ cD#

(blic \t*ing g6t_6F68t*)(6*t![\t*ing (*)(6*t!“nam6]

hư>ng thJc n&! đưa *a m1t ng)ại l, 5ll6galAcc68**)* nế li+n kết l& mK/ ngược lại (hư>ng thJc

t*E v% giá t*ị nll# Nế bạn nạ( chYng nó/ các (hư>ng thJc c<a bạn cDn t*E v% giá t*ị gSn với m1t

th1c t-nh ch) t*ước như l& m1t 4G#

(blic 8tatic v)id 86t`6alt_6F68t*)(6*t![\t*ing (*)(6*t!“nam6/ \t*ing (*)(6*t!“val6]

hư>ng thJc n&! kh2ng thPc hi,n c2ng vi,c g;# Nế bạn nạ( chYng (hư>ng thJc n&!/ bạn 8x 89

d:ng nó đ3 lư t*? m1t giá t*ị mBc định ch) th1c t-nh ch) t*ước#

(blic v)id 86t_6F68t*)(6*t![\t*ing (*)(6*t!“nam6/ \t*ing (*)(6*t!“val6]

hư>ng thJc n&! t*E v% ng)ại l, 5ll6galAcc688**)* nế li+n kết đang mK# Ngược lại nó kh2ng

thPc hi,n g;# Nế bạn nạ( chYng nó/ bạn 8x 89 d:ng nó đ3 lư t*? giá t*ị c<a m1t th1c t-nh ch)

t*ước#

(blic \t*ing g6t`6alt_6F68t[\t*ing (*)(6*t!“nam6]

hư>ng thJc n&! l2n t*E v% giá t*ị nll# Nế bạn nạ( chYng (hư>ng thJc n&!/ bạn cDn t*E v% giá

t*ị mBc định được gán ch) m1t th1c t-nh ch) t*ước như l& m1t \t*ing#

(*)t6ct6d ^_LC)nn6cti)n[^_L ]

C)nt*ct)* t*)ng ^_LC)nn6cti)n nhận m1t tham 8ố l& ^_L đ3 thPc hi,n vi,c li+n kết# ."t cE các

t-nh ch"t khác c<a m1t ^_LC)nn6cti)n ban đD được thiết lậ( l& các giá t*ị mBc định c<a ch'ng

Page 18: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 18/72

v& bạn có th3 tha! đ‚i ch'ng b7ng tậ( các (hư>ng thJc# ; c)n8t*ct)* có t-nh ch"t (*)t6ct6d/ chỉ

có các đối tượng t*)ng gói Wava#n6t mới có th3 tạ) *a m1t ^_LC)nn6cti)n# ^_LC)nn6cti)n l&

m1t lớ( t* tượng v; vậ! bạn chỉ có th3 gQi c)n8t*ct)* c<a nó t c)n8t*ct)* c<a m1t t*)ng các

lớ( c)n c<a nó#

 Nế bạn đang tạ) *a lớ( c)n c<a lớ( ^_LC)nn6cti)n/ bạn (hEi gQi c)n8t*ct)* n&! t*)ng

dpng đD c<a c)n8t*ct)* c<a lớ( c)n như 8aZ

m!^_LC)nn6cti)n[^_L ]

8(6*[]V

 Nế bạn kh2ng đưa v&) m1t l@i gQi c: th3 tới c)n8t*ct)* t*)ng lớ( c)n c<a bạn/ Hava cố

gSng tạ) *a m1t c)n8t*ct)* kh2ng tham 8ố c<a lớ( chaZ v- d: ^_LC)nn6cti)n[]#

; lớ( ^_LC)nn6cti)n kh2ng cng c"( các c)n8t*ct)* kh2ng tham 8ố/ l)ại b€ l@i gQi c:

th3 8x gG! *a lMi bi+n dịch#

1$=$ "ác tr(ng v! các ph(>ng th?c cD liEn B;/n

Có mư@i ba t*ư@ng t*)ng lớ( Wava#n6t# ^_LC)nn6cti)n# E! t*ư@ng l& các biến tRnh định

nghRa các giá t*ị mBc định ch) các th3 hi,n c<a lớ( ^_LC)nn6cti)n# \á (hư>ng thJc khác định

nghRa t*ạng thái c<a m1t đối tượng ^_LC)nn6cti)n c: th3# 01t v&i (hư>ng thJc g6t v& 86t tha!

đ‚i các giá t*ị c<a ch'ng# =D hết các (hư>ng thJc thiết lậ( các t*ư@ng đưa *a ng)ại l,5ll6galAcc6884c6(ti)n8 nế bạn gQi ch'ng t*)ng khi li+n kết đang mK# Nh;n chng/ bạn chỉ có

th3 thiết lậ( các th1c t-nh c<a m1t đối tượng ^_LC)nn6cti)n t*)ng khi li+n kết đóng#

(*)t6ct6d ^_L *l

(blic ^_L g6t^_L[]

.*ư@ng *l 4ác định ^_L m& ^_LC)nn6cti)n li+n kết tới nó# Nó được thiết lậ( bKi

c)n8t*ct)* khi bạn tạ) *a m1t ^_LC)nn6cti)n/ v& kh2ng cDn tha! đ‚i# ạn có th3 t;m kiếm giá

t*ị b7ng cách gQi (hư>ng thJc g6t^_L[]#

im()*t Wava#n6t#qV

im()*t Wava#i)#54c6(ti)nV

 (blic cla88 (*int^_LC)nn6cti)n

Page 19: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 19/72

 (blic 8tatic v)id main[\t*inge a*g8]

  ^_L V

^_LC)nn6cti)n cV

t*!

n6j _L[shtt(ZOOjjj#)*a#c)mOs]Vt*!

c#)(6nC)nn6cti)n[]V

\!8t6m#)t#(*intln[c#g6t^_L[]]V

catch[54c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

catch[0al)*m6d^_L4c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

(*)t6ct6d b))l6an c)nn6ct6d

.*ư@ng c)nn6ct6d l& đ'ng nế li+n kết l& mK v& l& 8ai nế li+n kết đóng# ; bạn kh2ng mK li+n

kết khi m1t đối tượng ^_LC)nn6cti)n được tạ) *a/ giá t*ị ban đD c<a nó l& al86# ạn chỉ có th3

t*! cậ( tới biến n&! th2ng Fa các th3 hi,n c<a lớ( ^_LC)nn6cti)n v& các lớ( c)n c<a nó#

Uh2ng có các (hư>ng thJc đQc h)Bc tha! đ‚i giá t*ị c<a nó# Uhi viết m1t t*;nh FEn t*ị gia) thJc/

 bạn có nhi,m v: thiết lậ( giá t*ị c<a biến n&! l& t*6 v& thiết lậ( lại nó b7ng giá t*ị al86 khi li+n

kết đóng# _"t nhi% (hư>ng thJc t*)ng gói Wava#n6t# ^_LC)nn6cti)n đQc biến n&! đ3 4ác định

46m ch'ng có th3 thPc hi,n vi,c g;# Nế vi,c thiết lậ( kh2ng ch-nh 4ác chư>ng t*;nh c<a bạn 8x

gB( các lMi kh2ng dX ch”n đ)án#

(*)t6ct6d b))l6an all)j^86*5nt6*acti)n

(blic v)id 86tAll)j 86*5nt6*acti)n[b))l6an all)j86*int6*acti)n]

(blic b))l6an g6tAll)j^86*5nt6*acti)n[]

01t 8ố ^_LC)nn6cti)n cDn tư>ng tác với ngư@i dTng# - d:/ m1t t*;nh d!,t j6b có th3 !+ cD

86*nam6 v& (a88j)*d# .! nhi+n/ *"t nhi% Jng d:ng kh2ng th3 khng định m1t ngư@i 89 d:ng

đang có mBt đ3 tư>ng tác với nó# Như ý nghRa c<a t+n/ all)j^86*5nt6*acti)n 4ác định 46m li,

tư>ng tác ngư@i 89 d:ng có được (hf( ha! kh2ng# chế đ1 mBc định nó được thiết lậ( l& al86#

Page 20: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 20/72

; biến n&! l& (*)t6ct6d/ ta có th3 89 d:ng (hư>ng thJc g6tAll)j^86*5nt6*acti)n[]đ3 đQc giá t*ị

c<a nó v& 89 d:ng (hư>ng thJc 86tAll)j^86*5nt6*acti)n[]đ3 thiết lậ( giá t*ị c<a nó# ‹iá t*ị t*6

chỉ *a *7ng tư>ng tác với ngư@i 89 d:ng l& được (hf(V giá t*ị al86 chỉ *a *7ng kh2ng có tư>ng tác

với ngư@i dTng# ‹iá t*ị có th3 được đQc K b"t k’ th@i đi3m n&)/ nhưng nó chỉ có th3 được thiết

lậ( khi li+n kết bị đóng# ‹Qi (hư>ng thJc 86tAll)j^86*5nt6*acti)n[] khi li+n kết mK 8x đưa *ang)ại l, 5ll6galAcc688**)* [chJ kh2ng (hEi l& 5ll6galAcc6884c6(ti)n]# Các chư>ng t*;nh

thư@ng kh2ng đón bSt các lMi [kh2ng giống như các ng)ại l,]V m1t lMi kh2ng được đón bSt thư@ng

 b1c chư>ng t*;nh (hEi kết th'c#

Phần *: Lập trình Foc7et cho gi/o th?c %"P

#$ 2- hình clientGserver

02 h;nh được (h‚ biến nh"t v& được ch"( nhận *1ng *•i t*)ng các h, thống (hGn tán l&m2 h;nh cli6ntO86*v6*# .*)ng m2 h;nh n&! 8x có m1t tậ( các tiến t*;nh m& mMi tiến t*;nh đóng vai

t*p như l& m1t t*;nh FEn lý t&i ng!+n ch) m1t tậ( hợ( các t&i ng!+n ch) t*ước v& m1t tậ( hợ(

các tiến t*;nh cli6nt t*)ng đó mMi tiến t*;nh thPc hi,n m1t tác v: n&) đó cDn t*! 4"t tới t&i

ng!+n (hDn cJng h)Bc (hDn m%m dTng chng# En thGn các t*;nh FEn lý t&i ng!+n cDn (hEi

t*! 4"t tới các t&i ng!+n dTng chng được FEn lý bKi m1t tiến t*;nh khác/ v; vậ! m1t 8ố tiến

t*;nh va l& tiến t*;nh cli6nt va l& tiến t*;nh 86*v6*# Các tiến t*;nh (hát *a các !+ cD tới các

86*v6* b"t k’ khi n&) ch'ng cDn t*! 4"t tới m1t t*)ng các t&i ng!+n c<a các 86*v6*# Nế !+

cD l& đ'ng đSn th; 86*v6* 8x thPc hi,n h&nh đ1ng được !+ cD v& g9i m1t đá( Jng t*E l@i tới tiếnt*;nh cli6nt#

02 h;nh cli6ntO86*v6* cng c"( m1t cách tiế( cận t‚ng Fát đ3 chia 8– t&i ng!+n t*)ng

các h, thống (hGn tán# 02 h;nh n&! có th3 được c&i đBt b7ng *"t nhi% m2i t*ư@ng (hDn cJng v&

 (hDn m%m khác nha# Các má! t-nh được 89 d:ng đ3 chạ! các tiến t*;nh cli6ntO86*v6* có nhi%

ki3 khác nha v& kh2ng cDn thiết (hEi (hGn bi,t gi?a ch'ngV cE tiến t*;nh cli6nt v& tiến t*;nh

86*v6* đ% có th3 chạ! t*+n cTng m1t má! t-nh# 01t tiến t*;nh 86*v6* có th3 89 d:ng dịch v: c<a

m1t 86*v6* khác#

02 h;nh t*!%n tin cli6ntO86*v6* hướng tới vi,c cng c"( dịch v:# —á t*;nh t*a) đ‚i d?

li, ba) gYmZ

Page 21: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 21/72

o# .*!%n m1t !+ cD t tiến t*;nh cli6nt tới tiến t*;nh 86*v6*

y# ˜+ cD được 86*v6* 49 lý

|# .*!%n đá( Jng ch) cli6nt

02 h;nh t*!%n tin n&! li+n Fan đến vi,c t*!%n hai th2ng đi,( v& m1t dạng đYng b1 hóa

c: th3 gi?a cli6nt v& 86*v6*# .iến t*;nh 86*v6* (hEi nhận thJc được th2ng đi,( được !+ cD K

 bước m1t nga! khi nó đến v& h&nh đ1ng (hát *a !+ cD t*)ng cli6nt (hEi được tạm dng [bị

 (h)ng t€a] v& b1c tiến t*;nh cli6nt K t*ạng thái ch@ ch) tớ khi nó nhận được đá( Jng d) 86*v6*

g9i v% K bước ba#

02 h;nh cli6ntO86*v6* thư@ng được c&i đBt dPa t*+n các tha) tác c> bEn l& g9i [86nd] v&

nhận [*6c6iv6]#

—á t*;nh gia) tiế( cli6nt v& 86*v6* có th3 diXn *a th6) m1t t*)ng hai chế đ1Z bị (h)ng t€a

[bl)ck6d] v& kh2ng bị (h)ng t€a [n)nˆbl)ck6d]#

Chế đ1 bị (h)ng t€a [bl)ck6d]Z

Page 22: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 22/72

.*)ng chế đ1 bị (h)ng t€a/ khi tiến t*;nh cli6nt h)Bc 86*v6* (hát *a l,nh g9i d? li,

[86nd]/ vi,c thPc thi c<a tiến t*;nh 8x bị tạm ngng ch) tới khi tiến t*;nh nhận (hát *a l,nh nhận d?

li, [*6c6iv6]#

.ư>ng tP đối với tiến t*;nh nhận d? li,/ nế tiến t*;nh n&) đó [cli6nt h)Bc 86*v6*] (hát *a

l,nh nhận d? li,/ m& tại th@i đi3m đó chưa có d? li, g9i tới th; vi,c thPc thi c<a tiến t*;nh cng

8x bị tạm ngng ch) tới khi có d? li, g9i tới#

Chế đ1 kh2ng bị (h)ng t€a [n)nˆbl)ck6d]

.*)ng chế đ1 n&!/ khi tiến t*;nh cli6nt ha! 86*v6* (hát *a l,nh g9i d? li, thPc 8P/ vi,c

thPc thi c<a tiến t*;nh v‡n được tiến h&nh m& kh2ng Fan tGm đến vi,c có tiến t*;nh n&) (hát *a

l,nh nhận d? li, đó ha! kh2ng#

.ư>ng tP ch) t*ư@ng hợ( nhận d? li,/ khi tiến t*;nh (hát *a l,nh nhận d? li,/ nó 8xnhận d? li, hi,n có/ vi,c thPc thi c<a tiến t*;nh v‡n được tiến h&nh m& kh2ng Fan tGm đến vi,c

có tiến t*;nh n&) (hát *a l,nh g9i d? li, tiế( th6) ha! kh2ng#

*$ "ác 7i8n trHc "lientGFerver

*$#$ "lientGFerver h/i tầng toKtier clientGserver

Uiến t*'c cli6ntO86*v6* đ>n giEn nh"t l& kiến t*'c hai tDng# .*)ng thPc tế hD hết các kiến

t*'c cli6ntO86*v6* l& kiến t*'c hai tDng# 01t Jng d:ng hai tDng cng c"( nhi% t*ạm l&m vi,c vớim1t tDng t*;nh diXn thống nh"t/ tDng n&! t*!%n tin với tDng lư t*? d? li, tậ( t*ng# .Dng t*;nh

diXn th2ng thư@ng l& cli6nt/ v& tDng lư t*? d? li, l& 86*v6*#

=D hết các Jng d:ng 5nt6*n6t như l& 6mail/ t6ln6t/ t( thậm ch- l& cE Œ6b l& các Jng

d:ng hai tDng# hDn lớn các lậ( t*;nh vi+n t*;nh Jng d:ng viết các Jng d:ng cli6ntO86*v6* có 4

thế 89 d:ng kiến t*'c n&!#

.*)ng Jng d:ng hai tDng t*!%n thống/ khối lượng c2ng vi,c 49 lý được d&nh ch) (h-a

cli6nt t*)ng khi 86*v6* chỉ đ>n giEn đóng vai t*p như l& chư>ng t*;nh ki3m 8)át lYng v&) *a gi?aJng d:ng v& d? li,# Uết FE l& kh2ng chỉ hi, nIng c<a Jng d:ng bị giEm đi d) t&i ng!+n hạn

chế c<a C/ m& khối lượng d? li, t*!%n đi t*+n mạng cng tIng th6)# Uhi t)&n b1 Jng d:ng

được 49 lý t*+n m1t C/ Jng d:ng bSt b1c (hEi !+ cD nhi% d? li, t*ước khi đưa *a b"t k’ kết

FE 49 lý n&) ch) ngư@i dTng# Nhi% !+ cD d? li, cng l&m giEm hi, nIng c<a mạng# 01t

Page 23: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 23/72

v"n đ% thư@ng gB( khác đối với Jng d:ng hai tDng l& v"n đ% bE) t*;# Chỉ cDn m1t tha! đ‚i nh€ đối

với Jng d:ng cng cDn (hEi tha! đ‚i lại t)&n b1 Jng d:ng cli6nt v& 86*v6*#

Page 24: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 24/72

*$*$ "lientGFerver M/ tầng

.a có th3 t*ánh được các v"n đ% c<a kiến t*'c cli6ntO86*v6* hai tDng b7ng cách mK *1ng

kiến t*'c th&nh ba tDng# 01t kiến t*'c ba tDng có th+m m1t tDng mới tác bi,t vi,c 49 lý d? li, K

vị t*- t*ng tGm#

.h6) kiến t*'c ba tDng/ m1t Jng d:ng được chia th&nh ba tDng tách bi,t nha v% mBt

l)gic# .Dng đD ti+n l& tDng t*;nh diXn thư@ng ba) gYm các gia) di,n đY hQa# .Dng thJ hai/ cpnđược gQi l& tDng t*ng gian ha! tDng tác nghi,(# .Dng thJ ba chJa d? li, cDn ch) Jng d:ng#

.Dng thJ ba v% c> bEn l& chư>ng t*;nh thPc hi,n các l@i gQi h&m đ3 t;m kiếm d? li, cDn thiết#

.Dng t*;nh diXn nhận d? li, v& định dạng nó đ3 hi3n thị# \P tách bi,t gi?a chJc nIng 49 lý với

gia) di,n đ• tạ) n+n 8P linh h)ạt ch) vi,c thiết kế Jng d:ng# Nhi% gia) di,n ngư@i dTng được

4G! dPng v& t*i3n khai m& kh2ng l&m tha! đ‚i l)gic Jng d:ng#

.Dng thJ ba chJa d? li, cDn thiết ch) Jng d:ng# `? li, n&! có th3 ba) gYm b"t k’

ngYn th2ng tin n&)/ ba) gYm c> 8K d? li, như *acal6/ \—L \6*v6* h)Bc t&i li, 0L#

*$1$ Ni8n trHc nKtầng

Uiến t*'c nˆtDng được chia th&nh các tDng như 8aZ

.Dng gia) di,n ngư@i dTngZ FEn lý tư>ng tác c<a ngư@i dTng với Jng d:ng

.Dng l)gic t*;nh diXnZ ác định cách thJc hi3n thị gia) di,n ngư@i dTng v& các !+ cD c<a

Page 25: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 25/72

ngư@i dTng được FEn

lý như thế n&)#

.Dng l)gic tác nghi,(Z

02 h;nh hóa các F! tSc

tác nghi,(# .Dng các dịch v: hạ

tDngZ Cng c"( m1t

chJc nIng b‚ t*ợ cDn

thiết ch) Jng d:ng như

các th&nh (hDn

[t*!%n th2ng đi,(/ hM

t*ợ gia) tác]#

1$2- hình tr;COn

tin Foc7et

Page 26: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 26/72

Uhi lậ( t*;nh/ ta cDn Fan tGm đến chế đ1 bị (h)ng t€a/ v; nó có th3 d‡n đến t;nh hống

m1t tiến t*;nh n&) đó 8x *>i v&) vpng lB( v2 hạn c<a Fá t*;nh g9i h)Bc nhận#

.*)ng chư>ng o ch'ng ta đ• biết hai gia) thJc .C v& ^` l& các gia) thJc tDng gia)

vận đ3 t*!%n d? li,# 0Mi gia) thJc có nh?ng ư v& nhược đi3m *i+ng# Chng hạn/ gia) thJc

.C có đ1 tin cậ! t*!%n tin ca)/ nhưng tốc đ1 t*!%n tin bị hạn chế d) (hEi có giai đ)ạn thiết lậ(

v& giEi (hóng li+n kết khi t*!%n tin/ khi gói tin có lMi ha! bị th"t lạc th; gia) thJc .C (hEi có

t*ách nhi,m t*!%n lại/Ngược lại/ gia) thJc ^` có tốc đ1 t*!%n tin *"t nhanh v; nó chỉ có m1t

c> chế t*!%n tin *"t đ>n giEnZ kh2ng cDn (hEi thiết lậ( v& giEi (hóng li+n kết# Uhi lậ( t*;nh ch)

.C ta 89 d:ng các 8)ck6t lYng/ cpn đối với gia) thJc ^` ta 8x 89 d:ng lớ( `atag*am\)ck6t

v& atag*amack6t#

.*!%n tin hướng li+n kết nghRa l& cDn có giai đ)ạn thiết lậ( li+n kết v& giEi (hóng li+n

kết t*ước khi t*!%n tin# `? li, được t*!%n t*+n mạng 5nt6*n6t dưới dạng các gói [(ack6t] có

k-ch thước h? hạn được gQi l& datag*am# 0Mi datag*am chJa m1t h6ad6* v& m1t (a!l)ad#

=6ad6* chJa địa chỉ v& c‚ng cDn t*!%n gói tin đến/ cng như địa chỉ v& c‚ng 4"t (hát c<a góitin/ v& các th2ng tin khác được 89 d:ng đ3 đEm bE) đ1 tin cậ! t*!%n tin/ (a!l)ad chJa d? li,#

.! nhi+n d) các datag*am có chi% d&i h? hạn n+n thư@ng (hEi (hGn chia d? li, th&nh nhi%

gói v& kh2i (h:c lại d? li, ban đD t các gói K n>i nhận#

.*)ng Fá t*;nh t*!%n tin có th3 có th3 có m1t ha! nhi% gói bị m"t ha! bị h€ng v& cDn

 (hEi t*!%n lại h)Bc các gói tin đến kh2ng th6) đ'ng t*;nh tP# $3 t*ánh nh?ng đi% n&!/ vi,c (hGn

chia d? li, th&nh các gói/ tạ) các h6ad6*/ (hGn t-ch h6ad6* c<a các gói đến/ FEn lý danh 8ách

các gói đ• nhận được v& các gói chưa nhận được/ ### *"t nhi% c2ng vi,c cDn (hEi thPc hi,n/ v& đpi

h€i *"t nhi% (hDn m%m (hJc tạ(#

.hật ma! mSn/ ta kh2ng cDn (hEi tP thPc hi,n c2ng vi,c n&!# \)ck6t l& m1t c1c cách

mạng c<a 6*k6l6! ^N5# Ch'ng ch) (hf( ngư@i lậ( t*;nh 46m m1t li+n kết mạng như l& m1t

lYng m& có th3 đQc d? li, *a ha! ghi d? li, v&) t lYng n&!#

Page 27: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 27/72

% mBt lịch 89 \)ck6t l& m1t 8P mK *1ng c<a m1t t*)ng nh?ng ý tưKng Fan t*Qng nh"t

c<a ^N5Z t"t cE các tha) tác v&)O*a giống như v&) *a t,( tin đối với ngư@i lậ( t*;nh/ ch) dT ta

đang l&m vi,c với b&n (h-m/ m&n h;nh đY hQa/ m1t il6 th2ng thư@ng/ ha! m1t li+n kết mạng# Các

\)ck6t ch6 d" ngư@i lậ( t*;nh kh€i các chi tiết mJc th"( c<a mạng như m2i ki3 đư@ng t*!%n/

các k-ch thước gói/ !+ cD t*!%n lại gói/ các địa chỉ mạng###

01t 8)ck6t có th3 thPc hi,n bE! tha) tác c> bEnZ

Uết nối với m1t má! K 4a [v- d:/ ch”n bị đ3 g9i v& nhận d? li,]

‹9i d? li,

Nhận d? li,

NgSt li+n k+t

‹án c‚ng

Ngh6 d? li, đến Ch"( nhận li+n kết t các má! K 4a t*+n c‚ng đ• được gán

Lớ( \)ck6t c<a Hava được 89 d:ng bKi cE cli6nt v& 86*v6*/ có các (hư>ng thJc tư>ng Jng

với bốn tha) tác đD ti+n# a tha) tác cối chỉ cDn ch) 86*v6* đ3 ch@ các cli6nt li+n kết với ch'ng#

Các tha) tác n&! được c&i đBt bKi lớ( \6*v6*\)ck6t# Các 8)ck6t ch) cli6nt thư@ng được 89 d:ng

th6) m2 h;nh 8aZ

01t 8)ck6t mới được tạ) *a b7ng cách 89 d:ng h&m \)ck6t[]#

\)ck6t cố gSng li+n kết với m1t h)8t K 4a# 0Mi khi li+n kết được thiết lậ(/ các h)8t K 4a nhận các lYng v&) v& lYng *a t 8)ck6t/ v& 89

d:ng các lYng n&! đ3 g9i d? li, ch) nha# Ui3 li+n kết n&! được gQi l& 8)ng c2ng [llˆ

d(l64]ˆcác h)8t có th3 nhận v& g9i d? li, đYng th@i# nghRa c<a d? li, (h: th1c v&) gia)

thJc#

Uhi vi,c t*!%n d? li, h)&n th&nh/ m1t h)Bc cE hai (h-a ngSt li+n kết# 01t 8ố gia) thJc/ như

=../ đpi h€i mMi li+n kết (hEi bị đóng 8a mMi khi !+ cD được (h:c v:# Các gia) thJc khác/

chng hạn Š./ ch) (hf( nhi% !+ cD được 49 lý t*)ng m1t li+n kết đ>n#

=$ Foc7et cho "lient

=$#$ "ác constr;ctor

(blic \)ck6t[\t*ing h)8t/ int ()*t] th*)j8 ^nkn)jn=)8t4c6(ti)n/ 54c6(ti)n

=&m n&! tạ) m1t 8)ck6t .C với h)8t v& c‚ng 4ác định/ v& thPc hi,n li+n kết với h)8t K 4a#

Page 28: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 28/72

- d:Z

t*!

\)ck6t 8 n6j \)ck6t[ jjj#vnn#vn/†]V

catch[^nkn)jn=)8t4c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

catch[54c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

.*)ng h&m n&! tham 8ố h)8t l& h)8tnam6 ki3 \t*ing/ nế h)8t kh2ng 4ác định h)Bc má!

ch< t+n mi%n kh2ng h)ạt đ1ng th; c)n8t*ct)* đưa *a ng)ại l, ^nkn)jn=)8t4c6(ti)n# ; m1t lý

d) n&) đó m& kh2ng th3 mK được 8)ck6t th; c)n8t*ct)* 8x đưa *a ng)ại l, 54c6(ti)n# Có

nhi% ng!+n nhGn khiến ch) m1t li+n kết th"t bạiZ h)8t m& ta đang cố gSng kết nối tới kh2ngch"( nhận li+n kết/ kết nối 5nt6*n6t có th3 bị ngSt/ h)Bc v"n đ% định t!ến có th3 ngIn nga các

gói tin c<a ta tới đ-ch#

- d:Z iết chư>ng t*;nh đ3 ki3m t*a t*+n oy{ c‚ng đD ti+n nh?ng c‚ng n&) đang có 86*v6* h)ạt

đ1ng

im()*t Wava#n6t#qV

im()*t Wava#i)#qV

cla88 )*t\cann6*

 (blic 8tatic v)id main[\t*inge a*g8]

\t*ing h)8tsl)calh)8tsV

i[a*g8#l6ngthu]

h)8ta*g8eV

)*[int iVioy{Viww]t*!

\)ck6t 8n6j \)ck6t[h)8t/i]V

\!8t6m#)t#(*intln[sC) m)t 86*v6* dang h)at d)ng t*6n c)ngZswi]V

catch[^nkn)jn=)8t4c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

Page 29: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 29/72

  catch[54c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

 

(blic \)ck6t[5n6tAdd*688 h)8t/ int ()*t]th*)j8 54c6(ti)n

.ư>ng tP như c)n8t*ct)* t*ước/ c)n8t*ct)* n&! tạ) m1t 8)ck6t .C với th2ng tin l& địa chỉ c<a

m1t h)8t được 4ác định bKi m1t đối tượng 5n6tAdd*68 v& 8ố hi, c‚ng ()*t/ 8a đó nó thPc hi,n

kết nối tới h)8t# Nó đưa *a ng)ại l, 54c6(ti)n nhưng kh2ng đưa *a ng)ại l,

^nkn)jn=)8t4c6(ti)n# C)n8t*ct)* đưa *a ng)ại l, t*)ng t*ư@ng hợ( kh2ng kết nối được tới

h)8t#

(blic \)ck6t [\t*ing h)8t/ int ()*t/ 5n6tAdd*688 int6*ac6/ int l)cal)*t] th*)j8 54c6(ti)n/

^nkn)jn=)8t4c6(ti)n

C)n8t*ct)* n&! tạ) *a m1t 8)ck6t với th2ng tin l& địa chỉ 5 được bi3 diXn bKi m1t đối tượng

\t*ing v& m1t 8ố hi, c‚ng v& thPc hi,n kết nối tới h)8t đó# \)ck6t kết nối tới h)8t K 4a th2ng Fa

m1t gia) tiế( mạng v& 8ố hi, c‚ng c:c b1 được 4ác định bKi hai tham 8ố 8a# Nế l)cal)*t

 b7ng th; Hava 8x lPa chQn m1t c‚ng ng‡ nhi+n có 8‘n n7m t*)ng kh)Eng t oy{ đến „~~|~#

(blic \)ck6t [5n6tAdd*688 h)8t/ int ()*t/ 5n6tAdd*688 int6*ac6/ int l)cal)*t] th*)j8

54c6(ti)n/ nkn)jn=)8t4c6(ti)n

C)n8t*ct)* chỉ khác c)n8t*ct)* t*+n K chM địa chỉ c<a h)8t l'c n&! được bi3 diXn bKi m1t đối

tượng 5n6tAdd*688#

=$*$ +hận các th-ng tin vO Foc7et

$ối tượng \)ck6t có m1t 8ố t*ư@ng th2ng tin *i+ng m& ta có th3 t*! nhậ( tới ch'ng

th2ng Fa các (hư>ng thJc t*E v% các th2ng tin n&!#

(blic 5n6tAdd*688 g6t5n6tAdd*688[]Ch) t*ước m1t đối tượng \)ck6t/ (hư>ng thJc g6t5n6tAdd*688[] ch) ta biết h)8t K 4a m& \)ck6t

kết nối tới/ h)Bc li+n kết đ• bị ngSt th; nó ch) biết h)8t K 4a m& \)ck6t đ• kết nối tới#

(blic int g6t)*t[]

hư>ng thJc n&! ch) biết 8ố hi, c‚ng m& \)ck6t kết nối tới t*+n h)8t K 4a#

Page 30: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 30/72

(blic int g6tL)cal)*t[]

.h2ng thư@ng m1t li+n kết thư@ng có hai đDZ h)8t K 4a v& h)8t c:c b1# $3 t;m *a 8ố hi, c‚ng K

 (h-a h)8t c:c b1 ta gQi (hư>ng thJc g6tL)cal)*t[]#

(blic 5n6tAdd*688 g6tL)calAdd*688[]

hư>ng thJc n&! ch) ta biết gia) tiế( mạng n&) m& m1t 8)ck6t gSn kết với nó#

(blic 5n(t\t*6am g6t5n(t\t*6am[] th*)j8 54c6(ti)n

hư>ng thJc g65n(t\t*6am[] t*E v% m1t lYng nhậ( đ3 đQc d? li, t m1t 8)ck6t v&) chư>ng

t*;nh# .h2ng thư@ng ta có th3 gSn kết lYng nhậ( th2 5n(t\t*6am tới m1t lYng lQc h)Bc m1t

lYng ký tP nh7m đưa các chJc nIng ti,n -ch [chng hạn như các lYng 5n(t\t*6am/ h)Bc

5n(t\t*6am_6ad6*]# $3 tGng ca) hi, nIng/ ta có th3 đ,m d? li, b7ng cách gSn kết nó với lYng

lQc 6*6d5n(t\t*6am h)Bc 6*6d_6ad6*#

(blic t(t\t*6am g6tt(t\t*6am[] th*)j8 54c6(ti)n

hư>ng thJc g6tt(t\t*6am[] t*E v% m1t lYng 4"t th2 đ3 ghi d? li, t Jng d:ng *a đD cối

c<a m1t 8)ck6t# .h2ng thư@ng/ ta 8x gSn kết lYng n&! với m1t lYng ti,n lợi h>n như lớ(

`ata(t\t*6am h)Bc t(t\t*6amŒ*it6* t*ước khi 89 d:ng nó# $3 tIng hi, FE ghi#

=ai (hư>ng thJc g6t5n(t\t*6am[] v& g6tt(t\t*6am[] l& các (hư>ng thJc ch) (hf( ta l"! v%

các lYng d? li, nhậ( v& 4"t# Như đ• đ% cậ( K chư>ng | v&) *a t*)ng Hava được tiến h&nh th2ng

Fa các lYng/ vi,c l&m vi,c với các 8)ck6t cng kh2ng (hEi l& m1t ng)ại l,# $3 nhận d? li, t

m1t má! K 4a ta nhận v% m1t lYng nhậ( t 8)ck6t v& đQc d? li, t lYng đó# $3 ghi d? li, l+nm1t má! K 4a ta nhận v% m1t lYng 4"t t 8)ck6t v& ghi d? li, l+n lYng# `ưới đG! l& h;nh vx

đ3 ta h;nh dng t*Pc Fan h>n#

Page 31: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 31/72

=$1$ Dng Foc7et

$ến th@i đi3m ta đ• có đD! đ< các th2ng tin cDn thiết đ3 t*i3n khai m1t Jng d:ng (h-a

cli6nt# Uhi viết m1t chư>ng t*;nh Jng d:ng (h-a cli6nt t"t cE mQi c2ng vi,c đ% ch!3n v% vi,c

FEn lý lYng v& ch!3n đ‚i d? li, t lYng th&nh dạng thJc m& ngư@i 89 d:ng có th3 hi3

được# En thGn các 8)ck6t *"t đ>n giEn bKi v; các (hDn vi,c (hJc tạ( đ• được ch6 d" đi# $G!

ch-nh l& lý d) đ3 8)ck6t t*K th&nh m1t lPa chQn có t-nh chiến lược ch) lậ( t*;nh mạng#

(blic v)id cl)86[] th*)j8 54c6(ti)n

Các 8)ck6t được đóng m1t cách tP đ1ng khi m1t t*)ng hai lYng đóng lại/ h)Bc khi chư>ng t*;nhkết th'c/ h)Bc khi 8)ck6t được th hYi bKi gabbag6 c)ll6ct)*# .! nhi+n/ thPc tế ch) th"! vi,c ch)

*7ng h, thống 8x tP đóng 8)ck6t l& kh2ng tốt/ đBc bi,t l& khi các chư>ng t*;nh chạ! t*)ng kh)Eng

th@i gian v2 hạn# $3 đóng m1t 8)ck6t ta có th3 dTng (hư>ng thJc cl)86[]#

0Mi khi m1t \)ck6t đ• bị đóng lại/ ta v‡n có th3 t*! 4"t tới các t*ư@ng th2ng tin 5n6tAdd*688/

địa chỉ c:c b1/ v& 8ố hi, c‚ng c:c b1 th2ng Fa các (hư)ng thJc g6t5n6tAdd*688[]/ g6t)*t[]/

g6tL)cal=)8t[]/ v& g6tL)cal)*t[]# .! nhi+n khi ta gQi các (hư>ng thJc g6t5n(t\t*6am[] h)Bc

g6tt(t\t*6am[] đ3 đQc d? li, t lYng đQc 5n(t\t*6am h)Bc ghi d? li, (t\t*6am th;

ng)ại l, 54c6(ti)n được đưa *a#

Các 8)ck6t đóng m1t n9a [=alˆcl)86d 8)ck6t]

Page 32: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 32/72

hư>ng thJc cl)86[] đóng cE các lYng nhậ( v& lYng 4"t t 8)ck6t# .*)ng m1t 8ố

t*ư@ng hợ( ta chỉ mốn đóng m1t n9a kết nối/ h)Bc l& lYng nhậ( h)Bc l& lYng 4"t# St đD t

Hava o#|/ các (hư>ng thưc 8htd)jn5n(t[] v& 8htd)jnt(t[] ch) (hf( ta thPc hi,n đi% n&!#

(blic v)id 8htd)jn5n(t[] th*)j8 54c6(ti)n

(blic v)id 8htd)jnt(t[] th*)j8 54c6(ti)n

Các (hư>ng thJc n&! kh2ng thPc 8P ngSt li+n kết# .! nhi+n/ nó chỉ đi% chỉnh lYng kết nối tới

nó 8a) ch)#

.*)ng Hava o#{ đưa th+m v&) hai (hư>ng thJc các lYng nhậ( v& lYng 4"t mK ha! đóng

(blic b))l6an i85n(t\htd)jn[]

(blic b))l6an i8t(t\htd)jn[]

=$=$ %hi8t lập các tQC ch5n cho Foc7et

{#{#o# .C“N`LA˜

(blic v)id 86t.c(N) 6la![b))l6an )n] th*)j8 \)ck6t4c6(ti)n

(blic b))l6an g6t.c(N)`6la![] th*)j8 \)ck6t4c6(ti)n

.hiết lậ( giá t*ị .C“N`LA˜ l& t*6 đ3 đEm bE) *7ng các gói tin được g9i đi nhanh nh"t có

th3 m& kh2ng Fan tGm đến k-ch thước c<a ch'ng# .h2ng thư@ng/ các gói tin nh€ được kết hợ(

lại th&nh các gói tin lớn h>n t*ước khi được g9i đi# .*ước khi g9i đi m1t gói tin khác/ h)8t c:c b1

đợi đ3 nhận các 4ác thPc c<a gói tin t*ước đó t h, thống K 4a#

{#{#y# \“L5N‹_

(blic v)id 86t\)Ling6*[b))l6an )n/ int 86c)nd8] th*)j8 \)ck6t4c6(ti)n

(blic int g6t\)Ling6*[] th*)j8 \)ck6t4c6(ti)n

.T! chQn \“L5N‹_ 4ác định (hEi thPc hi,n c2ng vi,c g; với datag*am v‡n chưa được g9i đi

khi m1t 8)ck6t đ• bị đóng lại# chế đ1 mBc định/ (hư>ng thJc cl)86[] 8x có hi, lPc nga! lậ(

tJcV nhưng h, thống v‡n cố gSng đ3 g9i (hDn d? li, cpn lại# Nế \“L5N‹_ được thiết lậ(

 b7ng / các gói tin chưa được g9i đi bị (há h<! khi 8)ck6t bị đóng lại# Nế \“L5N‹_ lớn h>n

/ th; (hư>ng thJc cl)86[] (h)ng t€a đ3 ch@ ch) d? li, được g9i đi v& nhận được 4ác thPc t

Page 33: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 33/72

 (h-a nhận# Uhi hết th@i gian Fi định/ 8)ck6t 8x bị đóng lại v& b"t k’ (hDn d? li, cpn lại 8x

kh2ng được g9i đi#

{#{#|# \“.50^.

(blic v)id 86t\).im6)t[int milli86c)nd8] th*)j8 \)ck6t4c6(ti)n

(blic int g6t\).im6)t[] th*)j8 \)ck6t4c6(ti)n

.h2ng thư@ng khi ta đQc d? li, t m1 8)ck6t/ l@i gQi (hư>ng thJc (h)ng t€a ch) tới khi nhận đ<

8ố b!t6# 7ng cách thiết lậ( (hư>ng thJc \“.50^./ ta 8x đEm bE) *7ng l@i gQi (hư>ng thJc

8x kh2ng (h)ng t€a t*)ng kh)Eng th@i gian Fá 8ố giG! F! định#

=$R$ "ác ph(>ng th?c c./ lớp SMTect

Lớ( \)ck6t nạ( chYng (hư>ng thJc ch”n c<a lớ( Wava#lang#bW6ct/ t)\t*ing[]# ; các

8)ck6t l& các đối tượng tạm th@i v& thư@ng chỉ tYn tại khi li+n kết tYn tại#

(blic \t*ing t)\t*ing[]

hư>ng thJc t)\t*ing[] tạ) *a m1t 4G ký tP như 8aZ

\)ck6tadd*jjj#)*6ill!#c)mOo}†#oyy#y†#oo/()*t†/l)cal()*t~~~e

hư>ng thJc n&! thư@ng h? -ch ch) vi,c g™ *ối#

=$$ "ác ngoại l Foc7et

=D hết các (hư>ng thJc c<a lớ( \)ck6t được khai bá) đưa *a ng)ại l, 54c6(ti)n/

h)Bc lớ( c)n c<a lớ( 54c6(t)n l& lớ( \)ck6t4c6(ti)n#

=$$ "ác lớp Foc7etAddress

Lớ( \)ck6tAdd*688 bSt đD có t (hi+n bEn Hava o#{/ bi3 diXn m1t đD cối c<a li+n

kết# Lớ( \)ck6tAdd*688 l& m1t lớ( t* tượng m& kh2ng có (hư>ng thJc n&) ng)&i c)n8t*t)*

mBc định# Lớ( n&! có th3 được 89 d:ng ch) cE các 8)ck6t .C v& 8)ck6t kh2ng (hEi l& .C# Các

lớ( c)n c<a lớ( \)ck6tAdd*688 cng c"( th2ng tin chi tiết h>n th-ch hợ( ch) ki3 8)ck6t# .*)ng

thPc tế/ chỉ hM t*ợ .CO5#

0:c đ-ch ch-nh c<a lớ( \)ck6tAdd*688 l& cng c"( m1t n>i lư t*? các th2ng tin li+n kết

8)ck6t tạm th@i [như địa chỉ 5 v& 8ố hi, c‚ng] có th3 được 89 d:ng lại đ3 tạ) *a 8)ck6t mới#

(blic \)ck6tAdd*688 g6t_6m)t6\)ck6tAdd*688[]

Page 34: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 34/72

(blic \)ck6tAdd*688 g6tL)cal\)ck6tAdd*688[]

CE hai (hư>ng thJc n&! t*E v% giá t*ị nll nế 8)ck6t v‡n chưa kết nối tới#

R$ Lớp FerverFoc7et

Lớ( \6*v6*\)ck6t có đ< mQi thJ ta cDn đ3 viết các 86*v6* b7ng Hava# Nó có các

c)n8t*ct)* đ3 tạ) các đối tượng \6*v6*\)ck6t mới/ các (hư>ng thJc đ3 lSng ngh6 các li+n kết

t*+n m1t c‚ng 4ác định/ v& các (hư>ng thJc t*E v% m1t \)ck6t khi li+n kết được thiết lậ(/ v; vậ!

ta có th3 g9i v& nhận d? li,#

VWng &i c./ m0t server

o# 01t \6*v6*\)ck6t mới được tạ) *a t*+n m1t c‚ng 4ác định b7ng cách 89 d:ng m1t

c)n8t*ct)* \6*v6*\)ck6t#

y# \6*v6*\)ck6t lSng ngh6 li+n kết đến t*+n c‚ng đó b7ng cách 89 d:ng (hư>ng thJc

acc6(t[]# hư>ng thJc acc6(t[] (h)ng t€a ch) tới khi m1t cli6nt thPc hi,n m1t li+n kết/ (hư>ng

thJc acc6(t[] t*E v% m1t đối tượng \)ck6t m& li+n kết gi?a cli6nt v& 86*v6*#

|# .T! th1c v&) ki3 86*v6*/ h)Bc (hư>ng thJc g6t5n(t\t*6am[]/ g6tt(t\t*6am[]

h)Bc cE hai được gQi đ3 nhận các lYng v&) *a đ3 t*!%n tin với cli6nt#

{# 86*v6* v& cli6nt tư>ng tác th6) m1t gia) thJc th€a thận 8‘n ch) tới khi ngSt li+n kết#

~# \6*v6*/ cli6nt h)Bc cE hai ngSt li+n kết

„# \6*v6* t*K v% bước hai v& đợi li+n kết tiế( th6)#

R$#$ "ác constr;ctor

(blic \6*v6*\)ck6t[int ()*t] th*)j8 54c6(ti)n/ ind4c6(ti)n

C)n8t*ct)* n&! tạ) m1t 8)ck6t ch) 86*v6* t*+n c‚ng 4ác định# Nế ()*t b7ng / h, thống chQn

m1t c‚ng ng‡ nhi+n ch) ta# C‚ng d) h, thống chQn đ2i khi được gQi l& c‚ng v2 danh v; ta kh2ng

 biết 8ố hi, c‚ng# ới các 86*v6*/ các c‚ng v2 danh kh2ng h? -ch lSm v; các cli6nt cDn (hEi biết

t*ước c‚ng n&) m& nó nối tới [giống như ngư@i gQi đi,n th)ại ng)&i vi,c 4ác định cDn gQi ch) ai

cDn (hEi biết 8ố đi,n th)ại đ3 li+n lạc với ngư@i đó]#

- d:Z $3 tạ) m1t 86*v6* 8)ck6t ch) c‚ng †

Page 35: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 35/72

t*!

\6*v6*\)ck6t htt(d n6j \6*v6*\)ck6t[†]V

catch[54c6(ti)n 6]

 \!8t6m# 6**#(*intln[6]V

C)n8t*ct)* đưa *a ng)ại l, 54c6(ti)n nế ta kh2ng th3 tạ) v& gán \)ck6t ch) c‚ng được !+

cD# Ng)ại l, 54c6(ti)n (hát 8inh khiZ

C‚ng đ• được 89 d:ng

Uh2ng có F!%n h)Bc cố li+n kết với m1t c‚ng n7m gi?a v& oy|#

- d:V

im()*t Wava#n6t#qVim()*t Wava#i)#qV

 (blic cla88 c)ngL)cal=)8t

  (blic 8tatic v)id main[\t*inge a*g8]

\6*v6*\)ck6t 88V

)*[int iVioy{Viww]   t*!

88 n6j \6*v6*\)ck6t[i]V

88#cl)86[]V

catch[54c6(ti)n 6]

  \!8t6m#)t#(*intln[sC) m)t 86*v6* t*6n c)ng swi]V

 

 

(blic \6*v6*\)ck6t[int ()*t/ int F66l6ngth/ 5n6tAdd*688 bindAdd*688]th*)j8 54c6(ti)n

C)n8t*ct)* n&! tạ) m1t đối tượng \6*v6*\)ck6t t*+n c‚ng 4ác định với chi% d&i h&ng đợi 4ác

Page 36: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 36/72

định# \6*v6*\)ck6t chỉ gán ch) địa chỉ 5 c:c b1 4ác định# C)n8t*ct)* n&! h? -ch ch) các 86*v6* 

chạ! t*+n các h, thống có nhi% địa chỉ 5#

R$*$ "hXp nhận v! ngYt liEn 78t

01t đối tượng \6*v6*\)ck6t h)ạt đ1ng t*)ng m1t vpng lB( ch"( nhận các li+n kết# 0Mi

lDn lB( nó gQi (hư>ng thJc acc6(t[]# hư>ng thJc n&! t*E v% m1t đối tượng \)ck6t bi3 diXn li+n

kết gi?a cli6nt v& 86*v6*# .ư>ng tác gi? cli6nt v& 86*v6* được tiến h&nh th2ng Fa 8)ck6t n&!# Uhi

gia) tác h)&n th&nh/ 86*v6* gQi (hư>ng thJc cl)86[] c<a đối tượng 8)ck6t#

 Nế cli6nt ngSt li+n kết t*)ng khi 86*v6* v‡n đang h)ạt đ1ng/ các lYng v&) *a kết nối

86*v6* với cli6nt 8x đưa *a ng)ại l, 5nt6**(t6d4c6(ti)n t*)ng lDn lB( tiế( th6)#

(blic \)ck6t acc6(t[] th*)j8 54c6(ti)n

Uhi bước thiết lậ( li+n kết h)&n th&nh/ v& ta 8‘n 8&ng đ3 ch"( nhận li+n kết/ cDn gQi (hư>ng thJcacc6(t[] c<a lớ( \6*v6*\)ck6t# hư>ng thJc n&! (h)ng t€aV nó dng Fá t*;nh 49 lý v& đợi ch)

tới khi cli6nt được kết nối# Uhi cli6nt thPc 8P kết nối/ (hư>ng thJc acc6(t[] t*E v% đối tượng

\)ck6t# .a 89 d:ng các (hư>ng thJc g6t5n(t\t*6am[] v& g6tt(t\t*6am[] đ3 t*!%n tin với

cli6nt#

- d:Z

t*!

\6*v6*\)ck6t th6\6*v6* n6j \6*v6*\)ck6t[~zz„]Vjhil6[t*6]

\)ck6t c)n th6\6*v6*#acc6(t[]V

*int\t*6am ( n6j *int\t*6am[c)n#g6tt(t\t*6am[]]V

 (#(*intln[an da k6t n)i t)i 86*v6* na!# !6ˆb!6 n)j#]V

c)n#cl)86[]V

catch[54c6(ti)n 6]

  \!8t6m#6**#(*intln[6]V

(blic v)id cl)86[] th*)j8 54c6(ti)n

 Nế ta đ• kết th'c l&m vi,c với m1t đối tượng 86*v6* 8)ck6t th; cDn (hEi đóng lại đối tượng n&!#

Page 37: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 37/72

- d:Z C&i đBt m1t 86*v6* da!tim6

im()*t Wava#n6t#qV

im()*t Wava#i)#qV

im()*t Wava#til#`at6V

 (blic cla88 da!tim6\6*v6*

 (blic inal 8tatic int da!tim6)*t o|V

 (blic 8tatic v)id main[\t*ingea*g8]

\6*v6*\)ck6t th6\6*v6*V

\)ck6t c)nV

*int\t*6am (V

t*!th6\6*v6* n6j \6*v6*\)ck6t[da!tim6)*t]V

t*!

 ( n6j *int\t*6am[c)n#g6tt(t\t*6am[]]V

 (#(*intln[n6j `at6[]]V

c)n#cl)86[]V

catch[54c6(ti)n 6]

th6\6*v6*#cl)86[]V

\!8t6m# 6**#(*intln[6]V

catch[54c6(ti)n 6]

\!8t6m# 6**#(*intln[6]V

(blic v)id cl)86[] th*)j8 54c6(ti)n Nế đ• h)&n th&nh c2ng vi,c với m1t \6*v6*\)ck6t/ ta cDn (hEi đóng nó lại/ đBc bi,t nế chư>ng

t*;nh c<a ta tiế( t:c chạ!# $i% n&! nh7m tạ) đi% ki,n ch) các chư>ng t*;nh khác mốn 89 d:ng

nó# $óng m1t \6*v6*\)ck6t kh2ng đYng nh"t với vi,c đóng m1t \)ck6t#

Lớ( \6*v6*\)ck6t cng c"( m1t 8ố (hư>ng thJc ch) ta biết địa chỉ c:c b1 v& c‚ng m& t*+n đó đối

Page 38: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 38/72

tượng 86*v6* đang h)ạt đ1ng# Các (hư>ng thJc n&! h? -ch khi ta đ• mK m1t đối tượng 86*v6*

8)ck6t t*+n m1t c‚ng v2 danh v& t*+n m1t gia) tiế( mạng kh2ng

(blic 5n6tAdd*688 g6t5n6tAdd*688[]

hư>ng thJc n&! t*E v% địa chỉ được 89 d:ng bKi 86*v6* [l)calh)8t]# Nế l)calh)8t có địa chỉ 5/

địa chỉ n&! được t*E v% bKi (hư>ng thJc 5n6tAdd*688#g6tL)cal=)8t[]#

- d:Z

t*!

\6*v6*\)ck6t htt(d n6j \6*v6*\)ck6t[†]V

5n6tAdd*688 ia htt(d#g6t5n6tAdd*688[]V

catch[54c6(ti)n 6]

(blic int g6tL)cal=)8t[]

Các c)nt*ct)* \6*v6*\)ck6t ch) (hf( ta ngh6 d? li, t*+n c‚ng kh2ng định t*ước b7ng cách gán

8ố ch) c‚ng# hư>ng thJc n&! ch) (hf( ta t;m *a c‚ng m& 86*v6* đang ngh6#

$ "ác M(ớc c!i &Zt ch(>ng trình ph3/ "lient M[ng J/v/

\a khi đ• t;m hi3 các lớ( v& các (hư>ng thJc cDn thiết đ3 c&i đBt chư>ng t*;nh \)ck6t#

m:c „ v& m:c z ch'ng ta 8x đi v&) các bước c: th3 đ3 c&i đBt các chư>ng t*;nh Cli6nt v&

\6*v6*#

"ác M(ớc &\ c!i &Zt "lient

ước oZ.ạ) m1t đối tượng \)ck6t

\)ck6t cli6nt n6j \)ck6t[h)8tnam6/()*tNam6]V

ước yZ.ạ) m1t lYng 4"t đ3 có th3 89 d:ng đ3 g9i th2ng tin tới \)ck6t

*intŒ*it6* )tn6j *intŒ*it6*[cli6nt#g6tt(t\t*6am[]/t*6]V

ước |Z.ạ) m1t lYng nhậ( đ3 đQc th2ng tin đá( Jng t 86*v6*

6*6d_6ad6* inn6j 6*6d_6ad6*[n6j 5n(t\t*6am_6ad6*[cli6nt#g6t5n(t\t*6am[]]]V

ước {Z.hPc hi,n các tha) tác v&)O*a với các lYng nhậ( v& lYng 4"t

$ối với các lYng 4"t/ *intŒ*it6*/ ta 89 d:ng các (hư>ng thJc (*int v& (*intln/ tư>ng tP như

\!8t6m#)t#(*intln# $ối với lYng nhậ(/ 6*6d_6ad6*/ ta có th3 89 d:ng (hư>ng thJc *6ad[] đ3

Page 39: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 39/72

đQc m1t ký tP/ h)Bc m1t mEng các ký tP/ h)Bc gQi (hư>ng thJc *6adLin6[] đ3 đQc v&) m1t dpng

ký tP# CDn ch' ý *7ng (hư>ng thJc *6adLin6[] t*E v% nll nế kết th'c lYng#

ước ~Z $óng 8)ck6t khi h)&n th&nh Fá t*;nh t*!%n tin

- d:Z iết chư>ng t*;nh cli6nt li+n kết với m1t 86*v6*# Ngư@i 89 d:ng nhậ( v&) m1t dpng ký tP

t b&n (h-m v& g9i d? li, ch) 86*v6*#

im()*t Wava#n6t#qV

im()*t Wava#i)#qV

 (blic cla88 ch)Cli6nto

 (blic 8tatic v)id main[\t*inge a*g8]

\t*ing h)8tnam6sl)calh)8tsV

i[a*g8#l6ngthu]

  h)8tnam6a*g8eV

*intŒ*it6* (jnllV

6*6d_6ad6* b*nllV

t*!

\)ck6t 8n6j \)ck6t[h)8tnam6/yz]V

 b*n6j 6*6d_6ad6*[n6j 5n(t\t*6am_6ad6*[8#g6t5n(t\t*6am[]]]V

6*6d_6ad6* 86*n6j 6*6d_6ad6*[n6j 5n(t\t*6am_6ad6*[\!8t6m#in]]V

 (jn6j *intŒ*it6*[8#g6tt(t\t*6am[]]V

\!8t6m#)t#(*intln[s`a k6t n)i d)c v)i 86*v6*###s]V

jhil6[t*6]

\t*ing 8t86*#*6adLin6[]V

i[8t#6Fal8[s64its]]

 b*6akV

  (j#(*intln[8t]V

 (j#l8h[]V

\!8t6m#)t#(*intln[b*#*6adLin6[]]V

Page 40: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 40/72

 

catch[54c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

inall!

t*!

i[b*rnll]b*#cl)86[]V

i[(jrnll](j#cl)86[]V

catch[54c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

Chư>ng t*;nh ch)Cli6nt đQc v&) h)8tnam6 t đối dpng l,nh# .iế( th6) ta tạ) m1t 8)ck6t với

h)8tnam6 đ• 4ác định t*+n c‚ng 8ố yz# ."t nhi+n c‚ng n&! h)&n t)&n d) ta lPa chQn 8a) ch) nó

kh2ng t*Tng với c‚ng đ• có dịch v: h)ạt đ1ng# i,c tạ) 8)ck6t th&nh c2ng có nghRa l& ta đ• li+n

kết được với 86*v6*# .a nhận lYng nhậ( t 8)ck6t th2ng Fa (hư>ng thJc g6t5n(t\t*6am[] v&

gSn kết nó với các lYng ký tP v& lYng đ,m nh@ l,nhZ

 b*n6j 6*6d_6ad6*[n6j 5n(t\t*6am_6ad6*[8#g6t5n(t\t*6am[]]V

.ư>ng tP ta l"! v% lYng 4"t th2ng Fa (hư>ng thJc g6t(t\t*6am[] c<a 8)ck6t# \a đó gSn

kết lYng n&! với lYng *intŒ*it6* đ3 g9i d? li, tới 86*v6*Z

 (jn6j *intŒ*it6*[8#g6tt(t\t*6am[]]V

$3 đQc d? li, t b&n (h-m ta gSn b&n (h-m với các lYng nhậ( nh@ cG l,nhZ

6*6d_6ad6* 86*n6j 6*6d_6ad6*[n6j 5n(t\t*6am_6ad6*[\!8t6m#in]]V

\a đi đ• tạ) được các lYng th; v"n đ% nhận v& g9i d? li, t*K th&nh v"n đ% đ>n giEn l& đQc d?

li, t các lYng nhậ( b*/ 86* v& ghi d? li, l+n lYng 4"t (j#

$ "ác M(ớc &\ c!i &Zt ch(>ng trình Ferver M[ng J/v/

$3 c&i đBt chư>ng t*;nh \6*v6* b7ng \6*v6*\)ck6t ta thPc hi,n các bước 8aZ

Page 41: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 41/72

ước o

.ạ) m1t đối tượng \6*v6*\)ck6t

\6*v6*\)ck6t 88n6j \6*v6*\)ck6t[()*t]

ước yZ

.ạ) m1t đối tượng \)ck6t b7ng cách ch"( nhận li+n kết t !+ cD li+n kết c<a cli6nt# \a khi

ch"( nhận li+n kết/ (hư>ng thJc acc6(t[] t*E v% đối tượng \)ck6t th3 hi,n li+n kết gi?a Cli6nt v&

\6*v6*#

jhil6[c)ndi)n]

\)ck6t 888#acc6(t[]V

d)\)m6thing[8]V

 Ngư@i ta kh!ến cá) *7ng ch'ng ta n+n gia) c2ng vi,c 49 lý đối tượng 8 ch) m1t t!ến đ)ạn n&)

đó#

ước |Z .ạ) m1t lYng nhậ( đ3 đQc d? li, t cli6nt

6*6d_6ad6* inn6j 6*6d_6ad6*[n6j 5n(t\t*6am_6ad6*[8#g6t5n(t\t*6am[]]]V

ước {Z .ạ) m1t lYng 4"t đ3 g9i d? li, t*K lại ch) 86*v6*

*intŒ*it6* (jn6j *intŒ*it6*[8#g6tt(t\t*6am[]/t*6]V

.*)ng đó tham 8ố t*6 được 89 d:ng đ3 4ác định *7ng lYng 8x được tP đ1ng đ”! *a#

ước ~Z .hPc hi,n các tha) tác v&) *a với các lYng nhậ( v& lYng 4"t#

ước „Z $óng 8)ck6t 8 khi đ• t*!%n tin 4)ng# i,c đóng 8)ck6t cng đYng nghRa với vi,c đóng

các lYng#

- d:Z iết chư>ng t*;nh 86*v6* ch)\6*v6* đ3 (h:c v: chư>ng t*;nh ch)Cli6nto đ• viết K bước

~

im()*t Wava#n6t#qV

im()*t Wava#i)#qV

 (blic cla88 ch)\6*v6*o

 (blic inal 8tatic int `ŠA^L.“_.yzV

Page 42: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 42/72

  (blic 8tatic v)id main[\t*inge a*g8]

int ()*t`ŠA^L.“_.V

t*!

\6*v6*\)ck6t 88n6j \6*v6*\)ck6t[()*t]V

\)ck6t 8nllV

jhil6[t*6]

 t*!

888#acc6(t[]V

*intŒ*it6* (jn6j *intŒ*it6*[n6j t(t\t*6amŒ*it6*[8#g6tt(t\t*6am[]]]V

6*6d_6ad6* b*n6j 6*6d_6ad6*[n6j 5n(t\t*6am_6ad6*[8#g6t5n(t\t*6am[]]]V

jhil6[t*6]

\t*ing lin6b*#*6adLin6[]V

i[lin6#6Fal8[s64its]]b*6akV

\t*ing ((6*lin6#t)^((6*Ca86[]V

 (j#(*intln[((6*]V

 (j#l8h[]V

catch[54c6(ti)n 6]

  inall!

t*!

i[8rnll]

8#cl)86[]V

catch[54c6(ti)n 6]

catch[54c6(ti)n 6]

Chư>ng t*;nh bSt đD b7ng vi,c tạ) *a m1t đối tượng \6*v6*\)ck6t t*+n c‚ng 4ác định# \6*v6*

lSng ngh6 các li+n kết t*)ng m1t vpng lB( v2 hạn# Nó ch"( nhận li+n kết b7ng cách gQi (hư>ng

Page 43: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 43/72

thJc acc6(t[]# hư>ng thJc acc6(t[] t*E v% m1t đối tượng \)ck6t th3 hi,n mối li+n kết gi?a cli6nt

v& 86*v6*# .a cng nhận v% các lYng nhậ( v& lYng 4"t t đối tượng \)ck6t nh@ các (hư>ng

thJc g6t5n(t\t*6am[] v& g6t(t\t*6am[]# i,c nhận !+ cD t cli6nt 8x th2ng Fa các lYng

nhậ( v& vi,c g9i đá( Jng tới 86*v6* 8x th2ng Fa lYng 4"t#

]$ ^ng d4ng &/ t;C8n &oạn trong lập trình J/v/

Các 86*v6* như đ• viết K t*+n *"t đ>n giEn nhưng nhược đi3m c<a nó l& bị hạn chế v% mBt

hi, nIng v; nó chỉ FEn lý được m1t cli6nt tại m1t th@i đi3m# Uhi khối lượng c2ng vi,c m&

86*v6* cDn 49 lý m1t !+ cD c<a cli6nt l& Fá lớn v& kh2ng biết t*ước được th@i đi3m h)&n th&nh

c2ng vi,c 49 lý th; các 86*v6* n&! l& kh2ng th3 ch"( nhận được#

$3 khSc (h:c đi% n&!/ ngư@i ta FEn lý mMi (hi+n c<a cli6nt b7ng m1t t!ến đ)ạn *i+ng/

ch) (hf( các 86*v6* l&m vi,c với nhi% cli6nt đYng th@i# \6*v6* n&! được gQi l& 86*v6* tư>ngt*anh [c)nc**6nt 86*v6*]ˆ86*v6* tạ) *a m1t t!ến đ)ạn đ3 FEn lý tng !+ cD/ 8a đó tiế( t:c

lSng ngh6 các cli6nt khác#

Chư>ng t*;nh cli6ntO86*v6* ch'ng ta đ• 4ft mK m:c „ v& m:c z l& chư>ng t*;nh

cli6ntO86*v6* đ>n t!ến đ)ạn# Các 86*v6* đ>n t!ến đ)ạn chỉ FEn lý được m1t li+n kết tại m1t

th@i đi3m# .*)ng thPc tế m1t 86*v6* có th3 (hEi FEn lý nhi% li+n kết cTng m1t l'c# $3 thPc hi,n

đi% n&! 86*v6* ch"( nhận các li+n kết v& ch!3n các li+n kết n&! ch) tng t!ến đ)ạn 49 lý#

.*)ng (hDn dưới đG! ch'ng ta 8x 46m 4ft cách tiến h&nh c&i đBt m1t chư>ng t*;nhcli6ntO86*v6* đa t!ến đ)ạn#

Chư>ng t*;nh (h-a 86*v6*

im()*t Wava#i)#qV

im()*t Wava#n6t#qV

cla88 ch)\6*v6 64t6nd8 .h*6ad

 (*ivat6 \)ck6t 8)ck6tV

 (*ivat6 6*6d_6ad6* inV

 (*ivat6 *intŒ*it6* )tV

 (blic ch)\6*v6 [\)ck6t 8] th*)j8 54c6(ti)n

Page 44: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 44/72

  8)ck6t 8V

\!8t6m#)t#(*intln[s\6*vingZ sw8)ck6t]V

in n6j 6*6d_6ad6*[n6j 5n(t\t*6am_6ad6*[8)ck6t#g6t5n(t\t*6am[]]]V

OO Ch) (hf( at)ˆl8hZ

)t n6j *intŒ*it6*[n6j 6*6dŒ*it6*[n6j

t(t\t*6amŒ*it6*[ 8)ck6t#g6tt(t\t*6am[]]]/ t*6]V

OO Nế b"t k’ l@i gQi n&) K t*+n đưa *a ng)ại l,

OO th; chư>ng t*;nh gQi có t*ách nhi,m đóng 8)ck6t# Ngược lại t!ến đ)ạn 8x

OO 8x đóng 8)ck6t

8ta*t[]V

 (blic v)id *n[]

t*!

jhil6 [t*6]

\!8t6m#)t#(*intln[s####\6*v6* i8 jaiting###s]V

\t*ing 8t* in#*6adLin6[]V

i [8t*#6Fal8[64it] ] b*6akV

\!8t6m#)t#(*intln[s_6c6iv6dZ s w 8t*]V

\!8t6m#)t#(*intln[sŠ*)mZ sw 8)ck6t]V

\t*ing ((6*8t*#t)^((6*Ca86[]V

OO g9i lại ch) cli6nt

)t#(*intln[((6*]V

\!8t6m#)t#(*intln[s`i8c)nn6ct6d jith##sw8)ck6t]V

catch [54c6(ti)n 6]

inall!

t*!

8)ck6t#cl)86[]V

catch[54c6(ti)n 6]

Page 45: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 45/72

 (blic cla88 .C\6*v6*o

8tatic int _.V #

  (blic 8tatic v)id main[\t*inge a*g8] th*)j8 54c6(ti)n

i [a*g8#l6ngth o]

  _.5nt6g6*#(a*865nt[a*g8e]V OO Nhậ( 8ố hi, c‚ng t đối dpng l,nh

OO .ạ) m1t đối tượng \6*v6* \)ck6t

\6*v6*\)ck6t 8 n6j \6*v6*\)ck6t[_.]V

5n6tAdd*688 add*8 5n6tAdd*688#g6tL)cal=)8t[]V\!8t6m#)t#(*intln[s.CO\6*v6* *nning )n Z sw add*8 ws /)*t sw8#g6tL)cal)*t[]]V

t*!

  jhil6[t*6]

OO h)ng t€a ch) tới khi có m1t li+n kết đến

\)ck6t 8)ck6t 8#acc6(t[]V

t*!

n6j ch)\6*v6[8)ck6t]V OO .ạ) m1t t!ến đ)ạn FEn lý *i+ng tng li+n kết catch[54c6(ti)n 6]

8)ck6t#cl)86[]V

inall!

8#cl)86[]V

Chư>ng t*;nh (h-a cli6nt

im()*t Wava#n6t#qV

im()*t Wava#i)#qV

Page 46: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 46/72

 (blic cla88 .CCli6nto

 (blic 8tatic v)id main[\t*inge a*g8] th*)j8 54c6(ti)n

i [a*g8#l6ngth r y]

  \!8t6m#)t#(*intln[s\9 d:ngZ Wava .CCli6nt h)8tid ()*tšs]V

\!8t6m#64it[]V

t*!

5n6tAdd*688 add* 5n6tAdd*688#g6t!Nam6[a*g8e]V

\)ck6t 8)ck6t n6j \)ck6t[add*/ 5nt6g6*#(a*865nt[a*g8oe]]V

t*! \!8t6m#)t#(*intln[s8)ck6t s w 8)ck6t]V

6*6d_6ad6* in n6j 6*6d_6ad6*[n6j 5n(t\t*6am_6ad6*[

8)ck6t#g6t5n(t\t*6am[]]]V

OO t(t i8 at)maticall! l8h6d b! *intŒ*it6*Z

*intŒ*it6* )t n6j *intŒ*it6*[n6j 6*6dŒ*it6*[ n6j

t(t\t*6amŒ*it6*[8)ck6t#g6tt(t\t*6am[]]]/t*6]V

OO $Qc dpng ký tP t b&n (h-m

`ata5n(t\t*6am m!in(t n6j `ata5n(t\t*6am[n6j6*6d5n(t\t*6am[\!8t6m#in]]V

t*!

  )*[VV]

\!8t6m#)t#(*intln[s.!(6 an!thing )ll)j6d b! _.^_N/ )* 4it t)

t6*minat6 th6 (*)g*am#s]V

\t*ing 8t*inm!in(t#*6adLin6[]V

OO —it i th6 86* t!(6d ct*lw`

i [8t*in#6Fal8[s64its]] b*6akV6l86

)t#(*intln[8t*in]V OO \6nd th6 m688ag6

\t*ing 8t*)t in#*6adLin6[]V OO _6civ6 it back

i [ 8t*in#l6ngth[]8t*)t#l6ngth[]] OO C)m(a*6 )th \t*ing8

\!8t6m#)t#(*intln[s_6c6iv6dZ sw8t*)t]V

Page 47: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 47/72

  6l86

\!8t6m#)t#(*intln[sch) bad ˆ 8t*ing n6Falsw 8t*)t]V

OO ) )* VV

catch [54c6(ti)n 6]

6#(*int\tack.*ac6[]V OO ^86* i8 64iting

inall!

\!8t6m#)t#(*intln[sŠ###64its]V

8)ck6t#cl)86[]V

catch[^nkn)jn=)8t4c6(ti)n 6]

\!8t6m#6**#(*intln[sCan›t ind h)8ts]V

\!8t6m#64it[o]V catch [\)ck6t4c6(ti)n 6]

\!8t6m#6**#(*intln[sCan›t )(6n 8)ck6ts]V

6#(*int\tack.*ac6[]V

\!8t6m#64it[o]V

_$ N8t l;ận

Ch'ng ta đ• t;m hi3 cách lậ( t*;nh mạng ch) gia) thJc .C# Các \)ck6t cpn được gQi l&

8)ck6t lYng v; đ3 g9i v& nhận d? li, đ% được tiến h&nh th2ng Fa vi,c đQc ghi các lYng# .a

đQc cng đ• t;m hi3 c> chế h)ạt đ1ng c<a 8)ck6t v& cách thJc lậ( các chư>ng t*;nh 86*v6* v&

cli6nt# Ng)&i *a/ chư>ng n&! cng đ• giEi th-ch tạ) 8a) cDn có c&i đBt 86*v6* đa t!ến đ)ạn v& t;m

hi3 cách thJc đ3 lậ( các chư>ng t*;nh cli6ntO86*v6* đa t!ến đ)ạn#

.*)ng chư>ng tiế( th6) ch'ng ta 8x hQc cách 4G! dPng m1t chư>ng t*;nh cli6ntO86*v6*

ch) gia) thJc ^`/ m1t gia) thJc gDn với gia) thJc .C#

Page 48: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 48/72

Lập trình ?ng d4ng cho gi/o th?c U`P

#$ %ang B;/n vO gi/o th?c U`P

.CO5 l& m1t hQ các gia) thJc được gQi l& hQ gia) thJc 5/ ba) gYm bốn tDng# CDn nhớ *7ng .CO5kh2ng (hEi l& m1t gia) thJc m& thPc 8P l& m1t hQ các gia) thJc/ v& ba) gYm các gia) thJc mJc th"( khác

như 5/ .C/ v& ^`# ^` n7m K tDng gia) vận/ (h-a t*+n gia) thJc 5# .Dng gia) vận cng c"( khE nIng

t*!%n tin gi?a các mạng th2ng Fa các gat6ja!# Nó 89 d:ng các địa chỉ 5 đ3 g9i các gói tin t*+n 5nt6*n6t

h)Bc t*+n mạng th2ng Fa các t*;nh đi% khi3n thiết bị khác nha# .C v& ^` l& m1t (hDn c<a hQ gia)

thJc .CO5V mMi gia) thJc có nh?ng ư v& nhược đi3m *i+ng c<a nó#

‹ia) thJc ^` l& gia) thJc đ>n giEn/ (hi li+n kết v& cng c"( dịch v: t*+n tDng gia) vận với tốc đ1nhanh# Nó hM t*ợ li+n kết m1tˆnhi% v& thư@ng được 89 d:ng thư@ng 4!+n t*)ng li+n kết m1tˆnhi% b7ng

cách 89 d:ng các datag*am mltica8t v& nica8t#

‹ia) thJc 5 l& gia) thJc c> bEn c<a 5nt6*n6t# .C v& ^` đ% l& hai gia) thJc tDng gia) thJc vận t*+n c> 

8K c<a gia) thJc 5# =;nh dưới đG! chỉ *a cách ánh 4ạ m2 h;nh \5 ánh 4ạ v&) kiến t*'c .CO5 v& hQ

gia) thJc .CO5#

Page 49: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 49/72

#$#$ 20t s' th;ật ng9 U`P

.*ước khi ki3m t*a 46m gia) thJc ^` h)ạt đ1ng như thế n&)/ ch'ng ta cDn l&m F6n với m1t 8ố thật

ng?# .*)ng (hDn dưới đG!/ ch'ng ta 8x định nghRa m1t 8ố thật ng? c> bEn có li+n Fan đến gia) thJc

^`#

ack6t

.*)ng t*!%n 8ố li,/ m1t (ack6t l& m1t d•! các 8ố nhị (hGn/ bi3 diXn d? li, v& các t-n hi, đi% khi3n/

các gói tin n&! được ch!3n đi v& ch!3n tới tới h)8t# .*)ng gói tin/ th2ng tin được 8S( 4ế( th6) m1t

kh2n dạng c: th3#

`atag*am

01t datag*am l& m1t gói tin đ1c lậ(/ tP chJa/ mang đD! đ< d? li, đ3 định t!ến t ngYn tới đ-ch m&

kh2ng cDn th2ng tin th+m#

Page 50: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 50/72

0.^

0.^ l& viết tSt c<a 0a4imm .*an8mi88i)n ^nit# 0.^ l& m1t đBc t*ưng c<a tDng li+n kết m2 tE 8ố b!t6

d? li, tối đa có th3 t*!%n t*)ng m1t gói tin# 0Bt khác/ 0.^ l& gói d? li, lớn nh"t m& m2i t*ư@ng mạng

ch) t*ước có th3 t*!%n# - d:/ th6*n6t có 0.^ cố định l& o~ b!t6# .*)ng ^`/ nế k-ch thước c<a

m1t datag*am lớn h>n 0.^/ 5 8x thPc hi,n (hGn đ)ạn/ chia datag*am th&nh các (hDn nh€ h>n [các

đ)ạn]/ v; vậ! mMi đ)ạn nh€ có k-ch thước nh€ h>n 0.^#

)*t

^` 89 d:ng các c‚ng đ3 ánh 4ạ d? li, đến v&) m1t tiến t*;nh c: th3 đang chạ! t*+n m1t má! t-nh# ^`

định đư@ng đi ch) (ack6t tại vị t*- 4ác định b7ng cách 89 d:ng 8ố hi, c‚ng được 4ác định t*)ng h6ad6*

c<a datag*am# Các c‚ng được bi3 diXn bKi các 8ố o„ˆbit/ v; thế các c‚ng n7m t*)ng dEi t đến „~~|~#

Các c‚ng cng được 46m như l& các đi3m cối c<a các li+n kết l)gic/ v& được chia th&nh ba l)ại 8aZ

• Các c‚ng (h‚ biếnZ . đến oy|• Các c‚ng đ• đIng kýZ oy{ đến {}o~o• Các c‚ng đ1ngOd&nh *i+ng {}o~y đến „~~|~

Ch' ý *7ng các c‚ng ^` có th3 nhận nhi% h>n m1t th2ng đi,( K m1t th@i đi3m# .*)ng m1t 8ố t*ư@ng

hợ(/ các dịch v: .C v& ^` có th3 89 d:ng cTng m1t 8ố hi, c‚ng/ như z [ch)] h)Bc t*+n c‚ng y|

[.6ln6t]#

^` có các c‚ng th2ng d:ng 8aZ

..L [.im6 .) Liv6]

Page 51: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 51/72

‹iá t*ị ..L ch) (hf( ch'ng ta thiết lậ( m1t giới hạn t*+n c<a các *)t6* m& m1t datag*am có th3 đi Fa#

‹iá t*ị ..L ngIn nga các gói tin kh€i bị kœt t*)ng các vpng lB( định t!ến v2 hạn# ..L được khKi tạ)

 bKi (h-a g9i v& giá t*ị được giEm đi bKi mMi *)t6* FEn lý datag*am# Uhi ..L b7ng / datag*am bị l)ại

 b€#

0ltica8ting

0ltica8ting l& (hư>ng (há( dPa t*+n ch”n có t-nh ch"t mK đ3 (hGn (hối các th2ng tin giống nha đến

nhi% ngư@i dTng# 0ltica8ting l& m1t đBc t*ưng ch-nh c<a gia) thJc ^`# 0ltica8ting ch) (hf( ch'ng

ta t*!%n tin th6) ki3 m1t nhi%/ v- d: g9i tin h)Bc thư đi,n t9 tới nhi% ngư@i nhận/ đ&i (hát thanh t*+n

5nt6*n6t/ h)Bc các chư>ng t*;nh d6m) t*Pc t!ến#

#$*$ @oạt &0ng c./ gi/o th?c U`P

Uhi m1t Jng d:ng dPa t*+n gia) thJc ^` g9i d? li, tới m1t h)8t khác t*+n mạng/ ^` th+m v&) m1t

h6ad6* có đ1 d&i † b!t6 chJa các 8ố hi, c‚ng ngYn v& đ-ch/ cTng với t‚ng chi% d&i d? li, v& th2ng tin

ch6ck8m# 5 th+m v&) h6ad6* c<a *i+ng nó v&) đG mMi datag*am ^` đ3 tạ) l+n m1t datag*am 5Z

#$1$ "ác nh()c &i\m c./ gi/o th?c U`P

\) với gia) thJc .C/ ^` có nh?ng nhược đi3m 8aZ

.hiế các t-n hi, bSt ta!# .*ước khi g9i m1t đ)ạn/ ^` kh2ng g9i các t-n hi, bSt ta! gi?a b+n

g9i v& b+n nhận# ; thế (h-a g9i kh2ng có cách n&) đ3 biết datag*am đ• đến đ-ch ha! chưa# `)vậ!/ ^` kh2ng đEm bE) vi,c d? li, đ• đến đ-ch ha! chưa#

\9 d:ng các (hi+n# $3 .C l& hướng li+n kết/ các (hi+n được d! t*; gi?a các h)8t# .C 89 d:ng các chỉ 8ố (hi+n [8688i)n 5 ] đ3 d! t*; các li+n kết gi?a hai h)8t# ^` kh2ng hM t*ợ 

 b"t k’ (hi+n n&) d) bEn ch"t (hi li+n kết c<a nó# $1 tin cậ!# ^` kh2ng đEm bE) *7ng chỉ có m1t bEn 8a) d? li, tới đ-ch# $3 g9i d? li, tới các

h, thống cối/ ^` (hGn chia d? li, th&nh các đ)ạn nh€# ^` kh2ng đEm bE) *7ng các đ)ạn

n&! 8x đến đ-ch đ'ng thJ tP như ch'ng đ• được tạ) *a K ngYn# Ngược lại/ .C 89 d:ng các 8ố

thJ tP cTng với 8ố hi, c‚ng v& các gói tin 4ác thPc thư@ng 4!+n/ đi% n&! đEm bE) *7ng các gói

tin đến đ-ch đ'ng thJ tP m& nó đ• được tạ) *a# E) mật# .C có t-nh bE) mật ca) h>n ^`# .*)ng nhi% t‚ chJc/ i*6jall v& *)t6* c"m các gói

tin ^`/ đi% n&! l& v; các hack6* thư@ng 89 d:ng các c‚ng ^`# Ui3m 8)át lYng# ` kh2ng có ki3m 8)át lYngV kết FE l&/ m1t Jng d:ng ^` được thiết kế tYi

có th3 l&m giEm bIng th2ng c<a mạng#

#$=$ "ác (; &i\m c./ U`P

Page 52: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 52/72

Uh2ng cDn thiết lậ( li+n kết# ^` l& gia) thJc (hi li+n kết/ v; thế kh2ng cDn (hEi thiết lậ( li+n

kết# ; ^` kh2ng 89 d:ng các t-n hi, hand8haking/ n+n có th3 t*ánh được th@i gian t*X# $ó

ch-nh l& lý d) tại 8a) `N\ thư@ng 89 d:ng gia) thJc ^` h>n l& .Cˆ`N\ 8x chậm h>n *"t

nhi% khi dTng .C#

.ốc đ1# ^` nhanh h>n 8) với .C# Ki v; đi% n&!/ nhi% Jng d:ng thư@ng được c&i đBt t*+ngia) thJc ^` h>n 8) với gia) thJc .C#

=M t*ợ h;nh t*ạng [.)()l)g!]# ^` hM t*ợ các li+n kết oˆo/ oˆn/ ngược lại .C chỉ hM t*ợ li+n kết

oˆo# U-ch thước h6ad6*# ^` chỉ có † b!t6 h6ad6* ch) mMi đ)ạn/ ngược lại .C cDn các h6ad6* y

 b!t6/ v; vậ! 89 d:ng bIng th2ng -t h>n#

Eng dưới đG! t‚ng kết nh?ng 8P kác nha gi?a hai gia) thJc .C v& ^`Z

#$R$ Nhi n!o thì nEn sb d4ng U`P

_"t nhi% Jng d:ng t*+n 5nt6*n6t 89 d:ng ^`# `Pa t*+n các ư v& nhược đi3m c<a ^` ch'ng ta có th3

kết lận ^` có -ch khiZ

\9 d:ng ch) các (hư>ng thJc t*!%n b*)adca8ting v& mltica8ting khi ch'ng ta mốn t*!%n tin

với nhi% h)8t#

U-ch thước datag*am nh€ v& t*;nh tP đ)ạn l& kh2ng Fan t*Qng Uh2ng cDn thiết lậ( li+n kết ng d:ng kh2ng g9i các d? li, Fan t*Qng Uh2ng cDn t*!%n lại các gói tin Ing th2ng c<a mạng đóng vai t*p Fan t*Qng

i,c c&i đBt Jng d:ng ^` t*)ng Hava cDn có hai lớ( l& `atag*amack6t v& `atag*am\)ck6t#

`atag*amack6t đóng gói các b!t6 d? li, v&) các gói tin ^` được gQi l& datag*am v& ch) (hf( ta mK

Page 53: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 53/72

các datag*am khi nhận được# 01t `atag*am\)ck6t đYng th@i thPc hi,n cE hai nhi,m v: nhận v& g9i gói

tin# $3 g9i d? li,/ ta đBt d? li, t*)ng m1t `atag*amack6t v& g9i gói tin b7ng cách 89 d:ng

`atag*am\)ck6t# $3 nhận d? li,/ ta nhận m1t đối tượng `atag*amack6t t `atag*am\)ck6t v& 8a đó

đQc n1i dng c<a gói tin#

^` kh2ng có b"t k’ khái ni,m n&) v% li+n kết gi?a hai h)8t# 01t 8)ck6t g9i t"t cE d? li, tới m1t c‚ng

h)Bc nhận t"t cE d? li, t m1t c‚ng m& kh2ng cDn Fan tGm h)8t n&) g9i# 01t `atag*am\)ck6t có th3

g9i d? li, tới nhi% h)8t đ1c lậ( h)Bc nhận d? li, t nhi% h)8t đ1c lậ(# \)ck6t kh2ng d&nh *i+ng ch)

m1t li+n kết c: th3 th3 n&) cE như t*)ng gia) thJc .C# Các 8)ck6t .C 46m li+n kết mạng như l& m1t

lYngZ ta g9i v& nhận d? li, với các lYng nhậ( v& lYng 4"t nhận được t 8)ck6t# ^` kh2ng ch) (hf(

đi% n&!V ta (hEi l&m vi,c với tng gói tin# ."t cE d? li, được đBt t*)ng datag*am được g9i đi dưới dạng

m1t gói tin# ‹ói tin n&! cng có th3 nhận được bKi m1t nhóm h)Bc cng có th3 bị m"t# 01t gói tin kh2ng

nh"t thiết (hEi li+n Fan đến gói tin tiế( th6)# Ch) t*ước hai gói tin/ kh2ng có cách n&) đ3 biết được gói

tin n&) được g9i t*ước v& gói tin n&) được g9i 8a#

*$ Lớp `/t/gr/mP/c7et

Các datag*am ^` đưa *"t -t th2ng tin v&) datag*am 5# =6ad6* ^` chỉ đưa tám b!t6 v&) h6ad6* 5#

=6ad6* ^` ba) gYm 8ố hi, c‚ng ngYn v& đ-ch/ chi% d&i c<a d? li, v& h6ad6* ^`/ tiế( đến l& m1t

ch6ck8m tT! chQn# ; mMi c‚ng được bi3 diXn b7ng hai b!t6 n+n t‚ng 8ố c‚ng ^` t*+n m1t h)8t 8x l&

„~~|„# Chi% d&i cng được bi3 diXn b7ng hai b!t6 n+n 8ố b!t6 t*)ng datag*am tối đa 8x l& „~~|„ t* đi

tám † b!t6 d&nh ch) (hDn th2ng tin h6ad6*#

.*)ng Hava/ m1t datag*am ^` được bi3 diXn bKi lớ( `atag*amack6tZ

(blic inal cla88 `atag*amack6t 64t6nd8 bW6ct

Lớ( n&! cng c"( các (hư>ng thJc đ3 nhận v& thiết lậ( các địa chỉ ngYn/ đ-ch t h6ad6* 5/ nhận v& thiết

lậ( các th2ng tin v% c‚ng ngYn v& đ-ch/ nhận v& thiết lậ( đ1 d&i d? li,# Các t*ư@ng th2ng tin cpn lại

kh2ng th3 t*! nhậ( được t m• Hava thDn t'!#

`atag*amack6t 89 d:ng các c)n8t*ct)* khác nha tT! th1c v&) gói tin được 89 d:ng đ3 g9i ha! nhậnd? li,#

*$#$ "ác constr;ctor &\ nhận d/t/gr/m

=ai c)n8t*ct)* tạ) *a các đối tượng `atag*am\)ck6t mới đ3 nhận d? li, t mạngZ

Page 54: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 54/72

(blic atag*amack6t[b!t6e b/ int l6ngth]

(blic `atag*amack6t[b!t6e b/ int )86t/ int l6ngth]

Uhi m1t 8)ck6t nhận m1t datag*am/ nó lư t*? (hDn d? li, c<a datag*am K t*)ng vTng đ,m b bSt đD tại

vị t*- be v& tiế( t:c ch) tới khi gói tin được lư t*? h)&n t)&n h)Bc ch) tới khi lư t*? hết l6ngth b!t6#

 Nế 89 d:ng c)n8t*ct)* thJ hai/ th; d? li, được lư t*? bSt đD t vị t*- b)86te# Chi% d&i c<a b (hEi

nh€ h>n h)Bc b7ng b#l6ngthˆ)86t# Nế ta 4G! dPng m1t `atag*amack6t có chi% d&i vượt Fá chi% d&i

c<a vTng đ,m th; c)n8t*ct)* 8x đưa *a ng)ại l, 5ll6galA*gm6nt4c6(ti)n# $G! l& ki3 ng)ại l,

_ntim64c6(ti)n n+n chư>ng t*;nh c<a ta kh2ng cDn thiết (hEi đón bSt ng)ại l, n&!#

- d:/ 4G! dPng m1t `atag*amack6t đ3 nhận d? li, có k-ch thước l+n tới †}oy b!t6

byte b[]=new byte[8912];

 DatagramPacket dp=new DatagramPacket(b,b.length);

*$*$ "onstr;ctor &\ gbi các d/t/gr/m

ốn c)n8t*ct)* tạ) các đối tượng `atag*amack6t mới đ3 g9i d? li, t*+n mạngZ

(blic atag*amack6t[b!t6e b/ int l6ngth/ 5n6tAdd*688 dc/ int ()*t] (blic `atag*amack6t[b!t6e b/ int )86t/ int l6ngth/ 5n6tAdd*688 dc/ int ()*t] (blic atag*amack6t[b!t6e b/ int l6ngth/ \)ck6tAdd*688 dc/ int ()*t] (blic `atag*amack6t[b!t6e b/ int )86t/ int l6ngth/ \)ck6tAdd*688 dc/ int ()*t]

0Mi c)n8t*ct)* tạ) *a m1t `atag*amack6t mới đ3 được g9i đi tới m1t h)8t khác# ‹ói tin được đi%n đD!

d? li, với chi% d&i l& l6ngth b!t6 bSt đD t vị t*- )86t h)Bc vị t*- nế )86t kh2ng được 89 d:ng#

- d: đ3 g9i đi m1t 4G ký tP đến m1t h)8t khác như 8aZ

tr!ng "=#$h!" !" an e%ample &' DP Pr&gramm!ng#;

byte[] b= ".getyte"();

try*

 +netddre"" dc=+netddre"".gety-ame(www./nn./n#);

!nt p&rt =0;

 DatagramPacket dp=new DatagramPacket(b,b.length,dc,p&rt);

Page 55: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 55/72

 3! g4! t!n

 5

catch(+67%cept!&n e)*

y"tem.err.pr!ntln(e);

 5

C2ng vi,c khó khIn nh"t t*)ng vi,c tạ) *a m1t đối tượng `atag*amack6t ch-nh l& vi,c ch!3n đ‚i d?

li, th&nh m1t mEng b!t6# $)ạn m• t*+n ch!3n đ‚i m1t 4G ký tP th&nh m1t mEng b!t6 đ3 g9i d? li, đi

*$1$ "ác ph(>ng th?c nhận các th-ng tin t< `/t/gr/mP/c7et

`atag*amack6t có 8á (hư>ng thJc đ3 t;m các (hDn khác nha c<a m1t datag*amZ d? li, thPc 8P c1ngvới m1t 8ố t*ư@ng h6ad6*# Các (hư>ng thJc n&! thư@ng được 89 d:ng ch) các datag*am nhận được t

mạng#

(blic 5n6tAdd*688 g6tAdd*688[]

hư>ng thJc g6tAdd*688[] t*E v% m1t đối tượng 5n6tAdd*688 chJa địa chỉ 5 c<a h)8t K 4a# Nế datag*am

được nhận t 5nt6*n6t/ địa chỉ t*E v% ch-nh l& địa chỉ c<a má! đ• g9i datag*am [địa chỉ ngYn]# 0Bt khác

nế datag*am được tạ) c:c b1 đ3 được g9i tới má! K 4a/ (hư>ng thJc n&! t*E v% địa chỉ c<a h)8t m&

datag*am được đánh địa chỉ#

(blic int g6t)*t[]

hư>ng thJc g6t)*t[] t*E v% m1t 8ố ng!+n 4ác định c‚ng t*+n h)8t K 4a# Nế datag*am được nhận t

5nt6*n6t th; c‚ng n&! l& c‚ng t*+n h)8t đ• g9i gói tin đi#

(blic \)ck6tAdd*688[]

hư>ng thJc n&! t*E v% m1t đối tượng \)ck6tAdd*688 chJa địa chỉ 5 v& 8ố hi, c‚ng c<a h)8t K 4a#

(blic b!t6e g6t`ata[]

hư>ng thJc g6t`ata[] t*E v% m1t mEng b!t6 chJa d? li, t datag*am# .h2ng thư@ng cDn (hEi ch!3n

các b!t6 n&! th&nh m1t dạng d? li, khác t*ước khi chư>ng t*;nh 49 lý d? li,# 01t cách đ3 thPc hi,n

đi% n&! l& ch!3n đ‚i mEng b!t6 th&nh m1t đối tượng \t*ing 89 d:ng c)n8t*ct)* 8a đG!Z

(blic \t*ing[b!t6e b6*/\t*ing 6nc)ding]

Page 56: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 56/72

.ham 8ố đD ti+n/ b6*/ l& mEng các b!t6 chJa d? li, t datag*am# .ham 8ố thJ hai ch) biết cách thJc

m• hóa 4G ký tP# Ch) t*ước m1t atag*amack6t d( được nhận t mạng/ ta có th3 ch!3n đ‚i nó th&nh

4G ký tP như 8aZ

tr!ng "=new tr!ng(dp.getData(),#++#);

 Nế datag*am kh2ng chJa vIn bEn/ vi,c ch!3n đ‚i nó th&nh d? li, Hava khó khIn h>n nhi%# 01t cách

tiế( cận l& ch!3n đ‚i mEng b!t6 được t*E v% bKi (hư>ng thJc g6t ata[] th&nh lYng

!t6A**a!5n(t\t*6am b7ng cách 89 d:ng c)n8t*ct)* n&!Z

(blic !t6A**a!5n(t\t*6am[b!t6e b/ int )86t/ int l6ngth]

 b l& mEng b!t6 được 89 d:ng như l& m1t lYng nhậ( 5n(t\t*6am

(blic int g6tL6ngth[]

hư>ng thJc g6tL6ngth[] t*E v% 8ố b!t68 d? li, có t*)ng m1t datag*am#

(blic g6t86t[]

hư>ng thJc n&! t*E v% vị t*- t*)ng mEng được t*E v% bKi (hư>ng thJc g6t`ata[] m& t đó d? li, t*)ng

datag*am 4"t (hát#

Các (hư>ng thJc thiết lậ( giá t*ị ch) các t*ư@ng th2ng tin

\á c)n8t*ct)* K t*+n l& đ< đ3 tạ) lậ( *a các datag*am# .! nhi+n/ Hava cng c"( m1t 8ố (hư>ng thJc đ3

tha! đ‚i d? li,/ địa chỉ c<a má! K 4a/ v& c‚ng t*+n má! K 4a 8a khi datag*am đ• được tạ) *a# .*)ng m1t

8ố t*ư@ng hợ( vi,c 89 d:ng lại các `atag*amack6t đ• có 8‘n 8x nhanh h>n vi,c tạ) mới các đối tượng

n&!#

(blic v)id 86t ata[b!t6e b]Z

hư>ng thJc n&! tha! đ‚i d? li, c<a datag*am

(blic v)id 86t ata[b!t6e b/ int )86t/ int l6ngth]

hư>ng thJc n&! đưa *a giEi (há( đ3 g9i m1t khối lượng d? li, lớn# .ha! v; g9i t)&n b1 d? li, t*)ng

mEng/ ta có th3 g9i d? li, t*)ng tng đ)ạn c<a mEng tại mMi th@i đi3m#

- d: đ)ạn m• 8a đG! 8x g9i d? li, th6) tng đ)ạn ~oy b!t6Z

!nt &''"et=;

Page 57: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 57/72

 DatagramPacket dp=new DatagramPacket(b,&''"et,:12);

!nt byte"ent=;

wh!le(byte"entb.length)

*

d"."end(dp);

byte"ent<=dp.getength();

!nt byte"$&end=b.length>byte"ent;

!nt "!?e=(byte"$&end@:12)A:12Bbyte"$&end;

dp."etData(b,byteent,:12);

 5

(blic v)id 86tAdd*688[5n6tAdd*688 dc]

hư>ng thJc 86tAdd*688[] tha! đ‚i địa chỉ c<a má! m& ta 8x g9i gói tin tới# $i% n&! 8x ch) (hf( ta g9i

cTng m1t datag*am đến nhi% n>i nhận#

(blic v)id 86t)*t[int ()*t]

hư>ng thJc n&! tha! đ‚i 8ố hi, c‚ng g9i tới c<a gói tin#

(bic v)id 86tAdd*688[\)ck6tAdd*688 8a]

(blic v)id 86tL6ngth[int l6ngth]

hư>ng thJc n&! tha! đ‚i 8ố b!t6 d? li, có th3 đBt t*)ng vTng đ,m#

1$ Lớp `/t/gr/mFoc7et

$3 g9i h)Bc nhận m1t `atag*amack6t/ bạn (hEi mK m1t `atag*am\)ck6t# .*)ng Hava/ m1t datag*am

8)ck6t được tạ) *a v& được t*! 4"t th2ng Fa đối tượng atag*am\)ck6t

 pCbl!c cla"" Datagram&cket e%tend" 6bect

Page 58: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 58/72

."t cE các datag*am được gSn với m1t c‚ng c:c b1/ c‚ng n&! được 89 d:ng đ3 lSng ngh6 các datag*am

đến h)Bc được đBt t*+n các h6ad6* c<a các datag*am 8x g9i đi# Nế ta viết m1t cli6nt th; kh2ng cDn (hEi

Fan tGm đến 8ố hi, c‚ng c:c b1 l& ba) nhi+ `atag*am\)ck6t được 89 d:ng đ3 g9i v& nhận các gói tin

^`# Nó cng c"( các (hư>ng thJc đ3 g9i v& nhận các gói tin/ cng như 4ác định m1t giá t*ị tim6)t khi

89 d:ng (hư>ng (há( v&) *a kh2ng (h)ng t€a [n)n bl)cking 5O]/ ki3m t*a v& 89a đ‚i k-ch thước tối đac<a gói tin ^`/ đóng 8)ck6t#

Các (hư>ng thJc

v)id cl)86[]Z đóng m1t li+n kết v& giEi (hóng nó kh€i c‚ng c:c b1#

v)id c)nn6ct[5n6tAdd*688 *6m)t6“add*688/ int *6m)t6“()*t]Z kết nối tới m1t tới m1t đối tượng

5n6tAdd*688 v& m1t ()*t#

5n6tAdd*688 g6t5n6tAdd*688[]Z(hư>ng thJc n&! t*E v% địa chỉ *6m)t6 m& 8)ck6t kết nối tới/ h)Bc giá t*ịnll nế kh2ng tYn tại li+n kết#

5n6tAdd*688 g6tL)calAdd*688[]Z t*E v% địa chỉ c:c b1

5nt g6t\).im6t[] t*E v% giá t*ị tT! chQn tim6)t c<a 8)ck6t# ‹iá t*ị n&! 4ác định th@i gian m& tha) tác

đQc 8x (h)ng t€a t*ước khi nó đưa *a ng)ại l, 5nt6**(t6d4c6(ti)n# chế đ1 mBc định/ giá t*ị n&! b7ng

/ chỉ *a *7ng v&) *a kh2ng (h)ng t€a được 89 d:ng#

v)id *6c6iv6[`atag*amack6t d(] th*)j8 54c6(ti)nZ(hư>ng thJc đQc m1t gói tin ^` v& lư n1

dng t*)ng (ack6t 4ác định#

v)id 86nd[`atag*am\)ck6t d(] th*)j8 54c6(ti)nZ(hư>ng thJc g9i m1t gói tin

v)id 86t\).im6t[int tim6)t]Z thiết lậ( giá t*ị tT! chQn c<a 8)ck6t#

=$ +hận các gDi tin

.*ước khi m1t Jng d:ng có th3 đQc các gói tin ^` được g9i bKi các má! K 4a/ nó (hEi gán m1t 8)ck6t

với m1t c‚ng ^` b7ng cách 89 d:ng `atag*am\)ck6t/ v& tạ) *a m1t `atag*amack6t 8x đóng vai t*pnhư l& m1t b1 chJa ch) d? li, c<a gói tin ^`# =;nh vx dưới đG! chỉ *a mối Fan h, gi?a m1t gói tin

^` với các lớ( Hava khác nha được 89 d:ng đ3 49 lý nó v& các Jng d:ng thPc tế#

Page 59: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 59/72

Uhi m1t Jng d:ng mốn đQc các gói tin ^`/ nó gQi (hư>ng thJc `atag*am\)ck6t#*6c6iv6[]/ (hư>ng

thJc n&! 8a) chf( gói tin ^` v&) m1t `atag*amack6t 4ác định# 9 lý n1i dng nói tin v& tiến t*;nh lB(

lại khi cDn#

 DatagramPacket dp=new DatagramPacket(new byte[2:E],2:E);

 Datagram&cket d"=new Datagram&cket(2);

b&&lean '!n!"hed='al"e;

wh!le(F'!n!"hed)

*

d".rece!/e(dp);

 G3 lH g4! t!n

 5

d".cl&"e();

Uhi 49 lý gói tin Jng d:ng (hEi l&m vi,c t*Pc tiế( với m1t mEng b!t6# .! nhi+n nế Jng d:ng l& đQc vIn

 bEn th; ta có th3 89 d:ng các lớ( t gói v&) *a đ3 ch!3n đ‚i gi?a mEng b!t6 v& lYng 8t*6am v& *6ad6*#

7ng cách gSn kết lYng nhậ( !t6A**a!5n(t\t*6am với n1i dng c<a m1t datag*am v& 8a đó kết nối

với m1t ki3 lYng khác/ khi đó bạn có th3 t*! 4"t tới n1i dng c<a gói ^` m1t cách dX d&ng# _"t

nhi% ngư@i lậ( t*;nh th-ch dTng các lYng v&) *a 5O đ3 49 lý d? li,/ b7ng cách 89 d:ng lYng

`ata5n(t\t*6am h)Bc 6*6d_6ad6* đ3 t*! 4"t tới n1i dng c<a các mEng b!t6#

Page 60: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 60/72

- d:/ đ3 gSn kết m1t lYng `ata5n(t\t*6am với n1i dng c<a m1t `atag*amack6t/ ta 89 d:ng đ)ạn m•

8aZ

 yterray+npCttream b!"=new yterray+npCttream(dp.getData());

 Data+npCttream d!"=new Data+npCttream(b!");

 IJc nK! dCng cLa g4! t!n DP

R$ bi các gDi tin

Lớ( `atag*am\)ck6t cng được 89 d:ng đ3 g9i các gói tin# Uhi g9i gói tin/ Jng d:ng (hEi tạ) *a m1t

`atag*amack6t/ thiết lậ( địa chỉ v& th2ng tin c‚ng/ v& ghi d? li, cDn t*!%n v&) mEng b!t6# Nế mống9i th2ng tin (h'c đá( th; ta cng đ• biết địa chỉ v& 8ố hi, c‚ng c<a gói tin nhận được# 0Mi khi gói tin

8‘n 8&ng đ3 g9i/ ta 89 d:ng (hư>ng thJc 86nd[] c<a lớ( `atag*am\)ck6t đ3 g9i gói tin đi#

Page 61: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 61/72

 &cket lMng nghe cNc g4! t!n IOn trn cQng 2

 Datagram&cket "&cket = new Datagram&cket(2);

 DatagramPacket packet = new DatagramPacket (new byte[2:E], 2:E);

 packet."etddre"" ( +netddre"".gety-ame ( "&meh&"t ) );

 packet."etP&rt ( 2 );

b&&lean '!n!"hed = 'al"e;

wh!le F'!n!"hed )

*

  h! dR l!SC /T& /Ung ISm bC''er

.........

 "&cket."end (packet);

  $hVc h!Sn hTnh IKng nT& I4, chWng hXn nhY IJc g4! t!n khNc! h&Zc k!m tra %em&r

  c\n g4! t!n nT& cn g3! I! hay kh^ng

Page 62: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 62/72

.........

 5

 "&cket.cl&"e();

$ V3 d4 minh h5/ gi/o th?c U`P

$3 minh hQa các gói tin ^` được g9i v& nhận như thế n&)/ ch'ng ta 8x viết/ bi+n dịch v& chạ! Jng d:ng

8a# iết chư>ng t*;nh th6) m2 h;nh Cli6ntO\6*v6* đ3Z

Cli6nt thPc hi,n các tha) tác 8a đG!Z

Cli6nt g9i m1t 4G ký tP d) ngư@i dTng nhậ( t b&n (h-m ch) 86*v6*

Cli6nt nhận th2ng tin (hEn hYi t*K lại t \6*v6* v& hi3n thị th2ng tin đó t*+n m&n h;nh

\6*v6* thPc hi,n các tha) tác 8aZ

\6*v6* nhận 4G ký tP d) cli6nt g9i tới v& in l+n m&n h;nh

\6*v6* biến đ‚i 4G ký tP th&nh ch? h)a v& g9i t*K lại ch) Cli6nt

im()*t Wava#n6t#qV

im()*t Wava#i)#qV

 (blic cla88 ^`Cli6nt

 (blic inal 8tatic int CN‹“0AC“`5N=}V

 (blic 8tatic v)id main[\t*ing a*g8e]

\t*ing h)8tnam6V

int ()*tCN‹“0AC“ 5N=V

Page 63: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 63/72

  i[a*g8#l6ngthu]

h)8tnam6a*g8eV

t*!

 ()*t 5nt6g6*#(a*865nt[a*g8oe]V

catch[4c6(ti)n 6]

6l86

h)8tnam6soyz###osV

t*!

5n6tAdd*688 dc5n6tAdd*688#g6t!Nam6[h)8tnam6]V

6*6d_6ad6* 86*5n(tn6j 6*6d_6ad6*[n6j 5n(t\t*6am_6ad6*[\!8t6m#in]]V

`atag*am\)ck6t d8 n6j `atag*am\)ck6t[()*t]V

jhil6[t*6]

\t*ing lin686*5n(t#*6adLin6[]V

i[lin6#6Fal8[s64its]]b*6akV

 b!t6e datalin6#g6t!t68[]V

`atag*amack6t d(n6j atag*amack6t[data/data#l6ngth/dc/()*t]V

d8#86nd[d(]V

Page 64: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 64/72

  d(#86tL6ngth[„~~z]V

d8#*6c6iv6[d(]V

!t6A**a!5n(t\t*6am bi8 n6j !t6A**a!5n(t\t*6am[d(#g6t`ata[]]V

6*6d_6ad6* di8 n6j 6*6d_6ad6*[n6j 5n(t\t*6am_6ad6*[bi8]]V

\!8t6m#)t#(*intln[di8#*6adLin6[]]V

 

catch[^nkn)jn=)8t4c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

catch[54c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

im()*t Wava#n6t#qV

im()*t Wava#i)#qV

 (blic cla88 ^`\6*v6*

 (blic inal 8tatic int CN‹“0AC“`5N=}V

  (blic 8tatic v)id main[\t*ing a*g8e]

int ()*tCN‹“0AC“ 5N=V

t*!

 ()*t 5nt6g6*#(a*865nt[a*g8oe]V

Page 65: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 65/72

 

catch[4c6(ti)n 6]

t*!

`atag*am\)ck6t d8 n6j `atag*am\)ck6t[()*t]V

`atag*amack6t d(n6j `atag*amack6t[n6j b!t6„~~ze/„~~z]V

jhil6[t*6]

d8#*6c6iv6[d(]V

!t6A**a!5n(t\t*6am bi8 n6j !t6A**a!5n(t\t*6am[d(#g6t`ata[]]V

6*6d_6ad6* di8 n6j 6*6d_6ad6*[n6j 5n(t\t*6am_6ad6*[bi8]]V

\t*ing 8di8#*6adLin6[]V

\!8t6m#)t#(*intln[8]V

8#t)^((6*Ca86[]V

d(#86t`ata[8#g6t!t68[]]V

d(#86tL6ngth[8#l6ngth[]]V

d(#86tAdd*688[d(#g6tAdd*688[]]V

d(#86t)*t[d(#g6t)*t[]]V

d8#86nd[d(]V

catch[^nkn)jn=)8t4c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

catch[54c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

Page 66: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 66/72

 

Chư>ng t*;nh Cli6ntO\6*v6* 89 d:ng đa t!ến đ)ạn

im()*t Wava#n6t#qV

im()*t Wava#i)#qV

 (blic ab8t*act cla88 ^`\6*v6* 64t6nd8 .h*6ad

 (*ivat6 int b6*\iž6V

 (*)t6ct6d `atag*am\)ck6t d8V

 (blic ^`\6*v6*[int ()*t/ int b6*\iž6] th*)j8 \)ck6t4c6(ti)n

thi8#b6*\iž6b6*\iž6V

thi8#d8n6j atag*am\)ck6t[()*t]V

 (blic ^`\6*v6*[int ()*t]th*)j8 \)ck6t4c6(ti)n

thi8[()*t/†o}y]V

 (blic v)id *n[]

 b!t6e b6*n6j b!t6b6*\iž6eV

jhil6[t*6]

`atag*amack6t d(n6j `atag*amack6t[b6*/b6*#l6ngth]V

t*!

d8#*6c6iv6[d(]V

Page 67: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 67/72

  thi8#*68()nd[d(]V

catch[54c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

 (blic ab8t*act v)id *68()nd[`atag*amack6t *6F]V

\6*v6* ch)

im()*t Wava#n6t#qV

im()*t Wava#i)#qV

 (blic cla88 ^`ch)\6*v6* 64t6nd8 ^`\6*v6*

 (blic inal 8tatic int `ŠA^L.“_.zV

 (blic ^`ch)\6*v6*[]th*)j8 \)ck6t4c6(ti)n

8(6*[`ŠA^L.“_.]V

 (blic v)id *68()nd[`atag*amack6t d(]

t*!

`atag*amack6t )td(n6j

`atag*amack6t[d(#g6t`ata[]/d(#g6tL6ngth[]/d(#g6tAdd*688[]/d(#g6t)*t[]]V

d8#86nd[)td(]V

Page 68: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 68/72

  catch[54c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

 (blic 8tatic v)id main[\t*inge a*g8]

t*!

^`\6*v6* 86*v6*n6j `ch)\6*v6*[]V

86*v6*#8ta*t[]V

\!8t6m#)t#(*intln[s\6*v6* dang da 8an 8ang lang ngh6 li6n k6t###s]V

catch[\)ck6t4c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

Cli6nt

im()*t Wava#n6t#qV

im()*t Wava#i)#qV

 (blic cla88 _6c6iv6*.h*6ad 64t6nd8 .h*6ad

 (*ivat6 `atag*am\)ck6t d8V

 (*ivat6 b))l6an 8t)((6dal86V

Page 69: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 69/72

  (blic _6c6iv6*.h*6ad[`atag*am\)ck6t d8] th*)j8 \)ck6t4c6(ti)n

thi8#d8d8V

 (blic v)id halt[]

thi8#8t)((6dt*6V

 (blic v)id *n[]

 b!t6 b6*en6j b!t6„~~zeV

jhil6[t*6]

i[8t)((6d] *6t*nV

`atag*amack6t d(n6j `atag*amack6t[b6*/b6*#l6ngth]V

t*!

d8#*6c6iv6[d(]V

\t*ing 8n6j \t*ing[d(#g6t`ata[]//d(#g6tL6ngth[]]V

\!8t6m#)t#(*intln[8]V

.h*6ad#!i6ld[]V

catch[54c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

Page 70: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 70/72

im()*t Wava#n6t#qV

 im()*t Wava#i)#qV

 (blic cla88 \6nd6*.h*6ad 64t6nd8 .h*6ad

 (*ivat6 5n6tAdd*688 86*v6*V

 (*ivat6 `atag*am\)ck6t d8V

 (*ivat6 b))l6an 8t)((6dal86V

 (*ivat6 int ()*tV

 (blic \6nd6*.h*6ad[5n6tAdd*688 add*688/ int ()*t] th*)j8 \)ck6t4c6(ti)n

thi8#86*v6*add*688V

thi8#()*t()*tV

thi8#d8n6j atag*am\)ck6t[]V

thi8#d8#c)nn6ct[86*v6*/()*t]V

 (blic v)id halt[]

thi8#8t)((6dt*6V

 (blic `atag*am\)ck6t g6t\)ck6t[]

*6t*n thi8#d8V

 (blic v)id *n[]

t*!

6*6d_6ad6* 86*5n(tn6j 6*6d_6ad6*[n6j 5n(t\t*6am_6ad6*[\!8t6m#in]]V

jhil6[t*6]

Page 71: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 71/72

  i[8t)((6d] *6t*nV

\t*ing lin686*5n(t#*6adLin6[]V

i[lin6#6Fal8[s64its]]b*6akV

 b!t6e datalin6#g6t!t68[]V

`atag*amack6t d(n6j `atag*amack6t[data/data#l6ngth/86*v6*/()*t]V

d8#86nd[d(]V

.h*6ad#!i6ld[]V

catch[54c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

Cli6nt ch)

im()*t Wava#n6t#qV

im()*t Wava#i)#qV

 (blic cla88 ^`ch)Cli6nt

 (blic inal 8tatic int `ŠA^L.“_.zV

 (blic 8tatic v)id main[\t*inge a*g8]

\t*ing h)8tnam6sl)calh)8tsV

int ()*t `ŠA^L.“_.V

Page 72: Lập Trình Mạng Trong JAVA

7/21/2019 Lập Trình Mạng Trong JAVA

http://slidepdf.com/reader/full/lap-trinh-mang-trong-java 72/72

  i[a*g8#l6ngthu]

h)8tnam6a*g8eV

t*!

5n6tAdd*688 ia5n6tAdd*688#g6t!Nam6[a*g8e]V

\6nd6*.h*6ad 86nd6*n6j \6nd6*.h*6ad[ia/`ŠA^L.“_.]V

86nd6*#8ta*t[]V

_6c6iv6*.h*6ad *6c6iv6*n6j _6c6iv6*.h*6ad[86nd6*#g6t\)ck6t[]]V

*6c6iv6*#8ta*t[]V

catch[^nkn)jn=)8t4c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

catch[\)ck6t4c6(ti)n 6]

\!8t6m#6**#(*intln[6]V

$ N8t l;ận

.*)ng chư>ng n&!/ ch'ng ta đ• thE) lận nh?ng khái ni,m cIn bEn v% gia) thJc ^` v& 8) 8ánh nó với