Upload
nhan
View
233
Download
0
Embed Size (px)
Citation preview
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
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
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
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
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,(
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#
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
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#
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
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
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ớ(
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
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#
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"(#
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#
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
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
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
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#
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
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
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
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*#
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
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
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&!#
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#
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
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#
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#
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]
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
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[]
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 †
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
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&!#
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
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
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
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
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
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
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
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]
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
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
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#
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#
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#
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]
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
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
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
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);
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]
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=;
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
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ế#
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#
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#
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
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
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
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
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
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
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
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
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
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]
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
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