You are on page 1of 36

Bi 7: Lp trnh mng vi .

NET
I. a ch IP trong java
Giao thc Internet kt ni hai nt. Mi nt c nh danh bi mt a ch IP 32bit, c gi l a ch IP
ca host. Khi gi mt thng ip, giao thc IP nhn thng ip t cc giao thc tng trn nh TCP hay UDP v
a vo trng header cha thng tin ca host ch.
Cch tt nht hiu giao thc IP l bng cch xem cc trng thng tin header IP chi tit. Thng tin ny
c lit k trong bng sau.

Trng
IP Version
(Phin bn IP)

di
4 bits

M t
Phin bn IP. ( Phin bn giao thc hin nay l
IPv4)

IP Header Length
(Chiu di Header)
Type of Service
(Kiu dch v)

4 bits

Chiu di ca header.

1 byte

Total Length
(Tng chiu di)

2 bytes

Kiu dch v cho php mt thng ip c t


ch thng lng cao hay bnh thng, thi
gian tr l bnh thng hay lu, tin cy bnh
thng hay cao. iu ny c li cho cc gi
c gi i trn mng. Mt s kiu mng s
dng thng tin ny xc nh u tin
Hai byte xc nh tng chiu di ca thng
ip-header v d liu. Kch thc ti a ca
mt gi tin IP l 65,535, nhng iu ny l
khng thc t i vi cc mng hin nay. Kch
thc ln nht c chp nhn bi cc host l
576 bytes. Cc thng ip ln c th phn thnh
cc on-qu trnh ny c gi l qu trnh
phn on

Identification
(nh danh)

2 bytes

Flags

3 bits

Fragment Offset

13 bits

Time to Live

1 byte

Protocol

1 byte

Bin Son : Nguyn Vn Mng

Nu thng ip c phn on, trng nh


danh tr gip cho vic lp rp cc on thnh
mt thng ip. Nu mt thng ip c phn
thnh nhiu on, tt c cc on ca mt thng
ip c cng mt s nh danh.
Cc c ny ch ra rng thng ip c c phn
on hay khng, v liu gi tin hin thi c phi
l on cui cng ca thng ip hay khng.
13 bit ny xc nh offset ca mt thng ip.
Cc on c th n theo mt th t khc vi
khi gi, v vy trng offset l cn thit xy
dng li d liu ban u. on u tin ca mt
thng ip c offset l 0
Xc nh s giy m mt thng ip tn ti
trc khi n b loi b.
Byte ny ch ra giao thc c s dng mc
tip theo cho thng ip ny. Cc s giao th c
Trang 1

Header Checksum

2 bytes

Source Address
Destination Address
Options
Padding

4 bytes
4 bytes
variable
variabe

y l ch l checksum ca header. Bi v
header thay i vi tng thng ip m n
chuyn ti, checksum cng thay i.
Cho bit a ch IP 32 bit ca pha gi
a ch IP 32 bit ca pha nhn

Bng 1.2

Cc a ch IP

Mi nt trn mng TCP/IP c th c nh danh bi mt a ch IP 32-bit. Thng thng mt a ch IP


c biu din bi b bn x.x.x.x, chng hn 192.168.0.1 . Mi s trong bn s ny biu din mt byte ca a
ch IP.
Mt a ch IP gm hai phn: phn mng v phn host. Ty thuc vo lp mng, phn mng bao gm mt,
hoc hai hoc ba byte u tin.

Lp
Byte 1
A
Networks (1-126)
B
Networks (128191)
C
Networks (192223)

Byte 2
Byte 3
Host (0-255)
Host (0-255)
Networks (0-255) Host (0-255)

Byte 4
Host (0-255)
Host (0-255)

Networks (0-255) Networks (0-255) Host (0-255)


Bng 1.3

Bit u tin ca a ch mng lp A l 0,v vy byte u tin ca a ch lp A nm trong di t 00000001


(1) n 01111110 (126). Ba byte cn li phc v cho vic nh danh cc nt trn mng, cho php ta kt ni hn 16
triu thit b vo mng lp A. Ch rng cc mng trong bng trn khng cp ti cc a ch c byte u l
127-y l khong a ch d phng. a ch 127.0.0.1 l a ch ca localhost, v a ch 127.0.0.0 l a ch
loopback.
Cc a ch IP ca cc mng thuc lp B lun lun c hai bit u tin ca byte u l 10, a ra khong a
ch l 10000000 (128) n 10111111 (191). Byte th hai dng nh danh mng c gi tr t 0 n 255, hai byte
cn li nh danh cc nt trn mt mng; tng cng l 65534 thit b.
Cc a ch IP ca cc mng thuc lp C lun lun c ba bit u tin ca byte u l 110, khong gi tr
ca byte u l t 11000000 (192) n 11011111 (223). Mng ny ch c mt byte c thit lp nh danh
host, v vy ch c 254 thit b c kt ni vo mng lp C.

Cc a ch IP ring

trnh cn kit cc a ch IP, cc host khng c kt ni trc tip vi Internet c th s dng mt a


ch trong cc khong a ch ring. Cc a ch IP ring khng duy nht v tng th, m ch duy nht v mt cc
b trong phm vi mng . Tt c cc lp mng d tr cc khong nht nh s dng nh l cc a ch ring
cho cc host khng cn truy cp trc tip ti Internet. Cc host nh vy vn c th truy cp Internet thng qua
mt gateway m khng cn chuyn tip cc a ch IP ring.

Lp
A
B
C
Bin Son : Nguyn Vn Mng

Khong a ch ring
10
172.16-172.31
192.168.0-192.168.255
Trang 2

Bng 1.4

Cc subnet

Vic kt ni hai nt ca hai mng khc nhau cn c mt router. nh danh host ca mng lp A cn c 24
bit; trong khi mng lp C, ch c 8 bit. Router phn chia nh danh host thnh hai phn mt phn c gi l
subnet v phn cn li l phn host
3.1.2. IPv6
Tin thn ca giao thc IP c pht trin bi B Quc Phng M nm 1960 v cho ti nm 1980 h giao
thc TCP/IP mi ra i. Bi IP c xy dng da trn cc giao thc mng DARPA hin c, n tr thnh phin
bn 4, gi l IPv4. Lc tng v cc my di ng cha c kt ni vo Internet nn s host c h tr bi
IP l tm . Nhng hin nay c rt nhiu thit b c kt ni vo Internet, nhu cu v s a ch IP tng cao.
Mt phin bn mi ca a ch IP c pht trin bi IETF: IPv6. S thay i quan trng nht so vi IPv4 l vic
s dng 128bit nh a ch cc nt ch khng phi l 32bit na.
3.1.3. -S hiu cng
Giao thc IP s dng cc a ch IP nh danh cc nt trn mng, trong khi tng giao vn s dng cc
im cui (endpoint) nh danh cc ng dng. Cc giao thc TCP v UDP s dng mt s hiu cng cng vi
mt a ch IP xc nh im cui ca mt ng dng.
Cc s hiu cng ca TCP v UDP c phn thnh ba loi

Cc s hiu cng h thng

Cc s hiu cng ngi dng

Cc s hiu cng ring v ng

Cc s hiu cng h thng nm trong khong t 0 n 1023. Cc cng h thng ch c s dng bi cc


tin trnh c quyn u tin ca h thng. Cc giao thc ni ting c cc s hiu cng nm trong khong ny.
Cc s hiu cng ngi dng nm trong khong t 1024 n 49151. Cc ng dng server ca bn s nhn
mt trong cc s ny lm cng, hoc bn c th ng k s hiu cng vi IANA .
Cc cng ng nm trong khong t 49152 n 65535. Khi khng cn thit phi bit s hiu cng trc
khi khi ng mt ng dng, mt s hiu cng trong khong ny s l thch hp. Cc ng dng client kt ni ti
server c th s dng mt cng nh vy.
Nu chng ta s dng tin ch netstat vi ty chn a, chng ta s thy mt danh sch tt c cc cng hin
ang c s dng, n cng ch ra trng thi ca lin kt-n ang nm trong trng thi lng nghe hay lin kt
c thit lp.

II. Socket
Socket l mt phng php thit lp kt ni truyn thng gia mt chng trnh yu cu dch
v v mt chng trnh cung cp dch v trn mng LAN, WAN, hay Internet v i khi l gia cc tin
trnh trong cng mt my tnh. Thng tin ca mt Socket bao gm a ch IP v s hiu cng.

III. Lp trnh Socket cho giao thc TCP


1. M hnh client/server
M hnh c ph bin nht v c chp nhn rng ri trong cc h thng phn tn l m hnh
client/server. Trong m hnh ny s c mt tp cc tin trnh m mi tin trnh ng vai tr nh l mt
trnh qun l ti nguyn cho mt tp hp cc ti nguyn cho trc v mt tp hp cc tin trnh client
trong mi tin trnh thc hin mt tc v no cn truy xut ti ti nguyn phn cng hoc phn
mm dng chung. Bn thn cc trnh qun l ti nguyn cn phi truy xut ti cc ti nguyn dng
chung c qun l bi mt tin trnh khc, v vy mt s tin trnh va l tin trnh client va l tin
trnh server. Cc tin trnh pht ra cc yu cu ti cc server bt k khi no chng cn truy xut ti mt
trong cc ti nguyn ca cc server. Nu yu cu l ng n th server s thc hin hnh ng c
yu cu v gi mt p ng tr li ti tin trnh client.

Bin Son : Nguyn Vn Mng

Trang 3

M hnh client/server cung cp mt cch tip cn tng qut chia s ti nguyn trong cc h
thng phn tn. M hnh ny c th c ci t bng rt nhiu mi trng phn cng v phn mm
khc nhau. Cc my tnh c s dng chy cc tin trnh client/server c nhiu kiu khc nhau v
khng cn thit phi phn bit gia chng; c tin trnh client v tin trnh server u c th chy trn
cng mt my tnh. Mt tin trnh server c th s dng dch v ca mt server khc.
M hnh truyn tin client/server hng ti vic cung cp dch v. Qu trnh trao i d liu bao
gm:
1. Truyn mt yu cu t tin trnh client ti tin trnh server
2. Yu cu c server x l
3. Truyn p ng cho client
M hnh truyn tin ny lin quan n vic truyn hai thng ip v mt dng ng b ha c th
gia client v server. Tin trnh server phi nhn thc c thng ip c yu cu bc mt ngay
khi n n v hnh ng pht ra yu cu trong client phi c tm dng (b phong ta) v buc tin
trnh client trng thi ch cho t khi n nhn c p ng do server gi v bc ba.
M hnh client/server thng c ci t da trn cc thao tc c bn l gi (send) v nhn
(receive).

Client
Server

Request message

Wait

Reply Execution

Request message

Tin trnh ang x l

Tin trnh ang phong ta


Hnh 2.1
Qu trnh giao tip client v server c th din ra theo mt t rong hai ch : b phong ta
(blocked) v khng b phong ta (non-blocked).
Ch b phong ta (blocked):
Trong ch b phong ta, khi tin trnh client hoc server pht ra lnh gi d liu (send), vic
thc thi ca tin trnh s b tm ngng cho ti khi tin trnh nhn pht ra lnh nhn d liu (receive).
Tng t i vi tin trnh nhn d liu, nu tin trnh no (client hoc server) pht ra lnh
nhn d liu, m ti thi im cha c d liu gi ti th vic thc thi ca tin trnh cng s b tm
ngng cho ti khi c d liu gi ti.

Bin Son : Nguyn Vn Mng

Trang 4

Ch khng b phong ta (non-blocked)


Trong ch ny, khi tin trnh client hay server pht ra lnh gi d liu thc s, vic thc thi
ca tin trnh vn c tin hnh m khng quan tm n vic c tin trnh no pht ra lnh nhn d
liu hay khng.
Tng t cho trng hp nhn d liu, khi tin trnh pht ra lnh nhn d liu, n s nhn d
liu hin c, vic thc thi ca tin trnh vn c tin hnh m khng quan tm n vic c tin trnh
no pht ra lnh gi d liu tip theo hay khng.

2. Cc kin trc Client/Server


2.1. Client/Server hai tng (two-tier client/server)
Kin trc client/server n gin nht l kin trc hai tng. Trong thc t hu ht cc kin trc
client/server l kin trc hai tng. Mt ng dng hai tng cung cp nhiu trm lm vic vi mt tng
trnh din thng nht, tng ny truyn tin vi tng lu tr d liu tp trung. Tng trnh din thng
thng l client, v tng lu tr d liu l server.
Hu ht cc ng dng Internet nh l email, telnet, ftp thm ch l c Web l cc ng dng hai
tng. Phn ln cc lp trnh vin trnh ng dng vit cc ng dng client/server c xu th s dng kin
trc ny.
Trong ng dng hai tng truyn thng, khi lng cng vic x l c dnh cho pha client
trong khi server ch n gin ng vai tr nh l chng trnh kim sot lung vo ra gia ng dng
v d liu. Kt qu l khng ch hiu nng ca ng dng b gim i do ti nguyn hn ch ca PC, m
khi lng d liu truyn i trn mng cng tng theo. Khi ton b ng dng c x l trn mt PC,
ng dng bt buc phi yu cu nhiu d liu trc khi a ra bt k kt qu x l no cho ngi
dng. Nhiu yu cu d liu cng lm gim hiu nng ca mng. Mt vn thng gp khc i vi
ng dng hai tng l vn bo tr. Ch cn mt thay i nh i vi ng dng cng cn phi thay i
li ton b ng dng client v server.

Hnh 2.2
2.2. Client/Server ba tng
Ta c th trnh c cc vn ca kin trc client/server hai tng bng cch m rng kin trc
thnh ba tng. Mt kin trc ba tng c thm mt tng mi tc bit vic x l d liu v tr trung tm.

Bin Son : Nguyn Vn Mng

Trang 5

Hnh 2.3

Theo kin trc ba tng, mt ng dng c chia thnh ba tng tch bit nhau v mt logic. Tng
u tin l tng trnh din thng bao gm cc giao din ha. Tng th hai, cn c gi l tng
trung gian hay tng tc nghip. Tng th ba cha d liu cn cho ng dng. Tng th ba v c bn l
chng trnh thc hin cc li gi hm tm kim d liu cn thit. Tng trnh din nhn d liu v
nh dng n hin th. S tch bit gia chc nng x l vi giao din to nn s linh hot cho
vic thit k ng dng. Nhiu giao din ngi dng c xy dng v trin khai m khng lm thay
i logic ng dng.
Tng th ba cha d liu cn thit cho ng dng. D liu ny c th bao gm bt k ngun
thng tin no, bao gm c s d liu nh Oracale, SQL Server hoc ti liu XML.
2.3. Kin trc n-tng
Kin trc n-tng c chia thnh cc tng nh sau:
Tng giao din ngi dng: qun l tng tc ca ngi dng vi ng dng

Tng logic trnh din: Xc nh cch thc hin th giao din ngi dng v cc yu cu ca
ngi dng c qun l nh th no.

Tng logic tc nghip: M hnh ha cc quy tc tc nghip,

Tng cc dch v h tng: Cung cp mt chc nng b tr cn thit cho ng dng nh cc


thnh phn (truyn thng ip, h tr giao tc).

3. M hnh truyn tin socket

Bin Son : Nguyn Vn Mng

Trang 6

Server

Client

Socket()

Socket()

Bind()

Bind()

Listen()

3
4

Connect()

Accept()

Cc chc
nng gi
v nhn

Cc chc
nng gi
v nhn

Close()

Close()

Hnh 2.4

Khi lp trnh, ta cn quan tm n ch b phong ta, v n c th dn n tnh hung mt tin


trnh no s ri vo vng lp v hn ca qu trnh gi hoc nhn.
Trong chng 1 chng ta bit hai giao thc TCP v UDP l cc giao thc tng giao vn
truyn d liu. Mi giao thc c nhng u v nhc im ring. Chng hn, giao thc TCP c tin
cy truyn tin cao, nhng tc truyn tin b hn ch do phi c giai on thit lp v gii phng lin
kt khi truyn tin, khi gi tin c li hay b tht lc th giao thc TCP phi c trch nhim truyn li,
Ngc li, giao thc UDP c tc truyn tin rt nhanh v n ch c mt c ch truyn tin rt n gin:
khng cn phi thit lp v gii phng lin kt. Khi lp trnh cho TCP ta s dng cc socket lung, cn
i vi giao thc UDP ta s s dng lp DatagramSocket v DatagramPacket.
Truyn tin hng lin kt ngha l cn c giai on thit lp lin kt v gii phng lin kt trc
khi truyn tin. D liu c truyn trn mng Internet di dng cc gi (packet) c kch thc hu
hn c gi l datagram. Mi datagram cha mt header v mt payload. Header cha a ch v
cng cn truyn gi tin n, cng nh a ch v cng xut pht ca gi tin, v cc thng tin khc c
s dng m bo tin cy truyn tin, payload cha d liu. Tuy nhin do cc datagram c chiu
di hu hn nn thng phi phn chia d liu thnh nhiu gi v khi phc li d liu ban u t cc
gi ni nhn. Trong qu trnh truyn tin c th c th c mt hay nhiu gi b mt hay b hng v cn

Bin Son : Nguyn Vn Mng

Trang 7

phi truyn li hoc cc gi tin n khng theo ng trnh t. trnh nhng iu ny, vic phn chia
d liu thnh cc gi, to cc header, phn tch header ca cc gi n, qun l danh sch cc gi
nhn c v cc gi cha nhn c, ... rt nhiu cng vic cn phi thc hin, v i hi rt nhiu
phn mm phc tp.
Tht may mn, ta khng cn phi t thc hin cng vic ny. Socket l mt cuc cch mng ca
Berkeley UNIX. Chng cho php ngi lp trnh xem mt lin kt mng nh l mt lung m c th
c d liu ra hay ghi d liu vo t lung ny.
V mt lch s Socket l mt s m rng ca mt trong nhng tng quan trng nht ca
UNIX: tt c cc thao tc vo/ra ging nh vo ra tp tin i vi ngi lp trnh, cho d ta ang lm
vic vi bn phm, mn hnh ha, mt file thng thng, hay mt lin kt mng. Cc Socket che
du ngi lp trnh khi cc chi tit mc thp ca mng nh mi kiu ng truyn, cc kch thc
gi, yu cu truyn li gi, cc a ch mng...
Mt socket c th thc hin by thao tc c bn:

Kt ni vi mt my xa (v d, chun b gi v nhn d liu)

Gi d liu

Nhn d liu

Ngt lin kt

Gn cng

Nghe d liu n

Chp nhn lin kt t cc my xa trn cng c gn

Lp Socket ca Java c s dng bi c client v server, c cc phng thc tng ng vi


bn thao tc u tin. Ba thao tc cui ch cn cho server ch cc client lin kt vi chng. Cc
thao tc ny c ci t bi lp ServerSocket. Cc socket cho client thng c s dng theo m
hnh sau:

Mt socket mi c to ra bng cch s dng hm Socket().

Socket c gng lin kt vi mt host xa.

Mi khi lin kt c thit lp, cc host xa nhn cc lung vo v lung ra t socket, v s


dng cc lung ny gi d liu cho nhau. Kiu lin kt ny c gi l song cng (fullduplex)-cc host c th nhn v gi d liu ng thi. ngha ca d liu ph thuc vo giao
thc.

Khi vic truyn d liu hon thnh, mt hoc c hai pha ngt lin kt. Mt s giao thc, nh
HTTP, i hi mi lin kt phi b ng sau mi khi yu cu c phc v. Cc giao thc khc,
chng hn FTP, cho php nhiu yu cu c x l trong mt lin kt n.

4. Socket cho Client


4.1. Cc constructor

public Socket(String host, int port) throws UnknownHostException, IOException


Hm ny to mt socket TCP vi host v cng xc nh, v thc hin lin kt vi host xa.
V d:
try{
Socket s = new Socket( www.vnn.vn,80);
}
catch(UnknownHostException e){

Bin Son : Nguyn Vn Mng

Trang 8

System.err.println(e);
}
catch(IOException e){
System.err.println(e);
}
Trong hm ny tham s host l hostname kiu String, nu host khng xc nh hoc my ch
tn min khng hot ng th constructor a ra ngoi l UnknownHostException. V mt l do no
m khng th m c socket th constructor s a ra ngoi l IOException. C nhiu nguyn nhn
khin cho mt lin kt tht bi: host m ta ang c gng kt ni ti khng chp nhn lin kt, kt ni
Internet c th b ngt, hoc vn nh tuyn c th ngn nga cc gi tin ca ta ti ch.
V d: Vit chng trnh kim tra trn 1024 cng u tin nhng cng no ang c server
hot ng
import java.net.*;
import java.io.*;
class PortScanner
{
public static void main(String[] args)
{
String host="localhost";
if(args.length>0){
host=args[0];
}
for(int i=0;i<1024;i++){
try{
Socket s=new Socket(host,i);
System.out.println("Co mot server dang hoat dong tren cong:"+i);
}
catch(UnknownHostException e){
System.err.println(e);
}
catch(IOException e){
System.err.println(e);
}
}
}
}

public Socket(InetAddress host, int port)throws IOException

Bin Son : Nguyn Vn Mng

Trang 9

Tng t nh constructor trc, constructor ny to mt socket TCP vi thng tin l a ch ca


mt host c xc nh bi mt i tng InetAddres v s hiu cng port, sau n thc hin
kt ni ti host. N a ra ngoi l IOException nhng khng a ra ngoi l
UnknownHostException. Constructor a ra ngoi l trong trng hp khng kt ni c ti
host.

public Socket (String host, int port, InetAddress interface, int localPort) throws IOException,
UnknownHostException
Constructor ny to ra mt socket vi thng tin l a ch IP c biu din bi mt i tng
String v mt s hiu cng v thc hin kt ni ti host . Socket kt ni ti host xa thng
qua mt giao tip mng v s hiu cng cc b c xc nh bi hai tham s sau. Nu
localPort bng 0 th Java s la chn mt cng ngu nhin c sn nm trong khong t 1024
n 65535.

public Socket (InetAddress host, int port, InetAddress interface, int localPort) throws
IOException, UnknownHostException
Constructor ch khc constructor trn ch a ch ca host lc ny c biu din bi mt i
tng InetAddress.

4.2. Nhn cc thng tin v Socket


i tng Socket c mt s trng thng tin ring m ta c th truy nhp ti chng thng qua
cc phng thc tr v cc thng tin ny.

public InetAddress getInetAddress()


Cho trc mt i tng Socket, phng thc getInetAddress() cho ta bit host xa m Socket
kt ni ti, hoc lin kt b ngt th n cho bit host xa m Socket kt ni ti

public int getPort()


Phng thc ny cho bit s hiu cng m Socket kt ni ti trn host xa.

public int getLocalPort()


Thng thng mt lin kt thng c hai u: host xa v host cc b. tm ra s hiu cng
pha host cc b ta gi phng thc getLocalPort().

public InetAddress getLocalAddress()


Phng thc ny cho ta bit giao tip mng no m mt socket gn kt vi n.

public InputStream getInputStream() throws IOException


Phng thc geInputStream() tr v mt lung nhp c d liu t mt socket vo chng
trnh. Thng thng ta c th gn kt lung nhp th InputStream ti mt lung lc hoc mt
lung k t nhm a cc chc nng tin ch (chng hn nh cc lung InputStream, hoc
InputStreamReader). tng cao hiu nng, ta c th m d liu bng cch gn kt n vi
lung lc BufferedInputStream hoc BufferedReader.

public OutputStream getOutputStream() throws IOException


Phng thc getOutputStream() tr v mt lung xut th ghi d liu t ng dng ra u
cui ca mt socket. Thng thng, ta s gn kt lung ny vi mt lung tin li hn nh lp
DataOuputStream hoc OutputStreamWriter trc khi s dng n. tng hiu qu ghi.

Hai phng thc getInputStream() v getOutputStream() l cc phng thc cho php ta ly v


cc lung d liu nhp v xut. Nh cp chng 3 vo ra trong Java c tin hnh thng
qua cc lung, vic lm vic vi cc socket cng khng phi l mt ngoi l. nhn d liu t mt
my xa ta nhn v mt lung nhp t socket v c d liu t lung . ghi d liu ln mt my

Bin Son : Nguyn Vn Mng

Trang 10

xa ta nhn v mt lung xut t socket v ghi d liu ln lung. Di y l hnh v ta hnh dung
trc quan hn.

OutputStream

Socket

Chng
trnh
InputStream
Hnh 2.5
4.3. ng Socket

n thi im ta c y cc thng tin cn thit trin khai mt ng dng pha client. Khi
vit mt chng trnh ng dng pha client tt c mi cng vic u chuyn v vic qun l lung v
chuyn i d liu t lung thnh dng thc m ngi s dng c th hiu c. Bn thn cc socket
rt n gin bi v cc phn vic phc tp c che du i. y chnh l l do socket tr thnh
mt la chn c tnh chin lc cho lp trnh mng.

public void close() throws IOException

Cc socket c ng mt cch t ng khi mt trong hai lung ng li, hoc khi chng trnh
kt thc, hoc khi socket c thu hi bi gabbage collector. Tuy nhin, thc t cho thy vic cho rng
h thng s t ng socket l khng tt, c bit l khi cc chng trnh chy trong khong thi gian
v hn. ng mt socket ta c th dng phng thc close().
Mi khi mt Socket b ng li, ta vn c th truy xut ti cc trng thng tin InetAddress,
a ch cc b, v s hiu cng cc b thng qua cc phong thc getInetAddress(), getPort(),
getLocalHost(), v getLocalPort(). Tuy nhin khi ta gi cc phng thc getInputStream() hoc
getOutputStream() c d liu t lung c InputStream hoc ghi d liu OuputStream th ngoi l
IOException c a ra.

Cc socket ng mt na (Half-closed socket)


Phng thc close() ng c cc lung nhp v lung xut t socket. Trong mt s trng hp
ta ch mun ng mt na kt ni, hoc l lung nhp hoc l lung xut. Bt u t Java 1.3, cc
phng thc shutdownInput() v shutdownOutput() cho php ta thc hin iu ny.

public void shutdownInput() throws IOException

public void shutdownOutput() throws IOException

Cc phng thc ny khng thc s ngt lin kt. Tuy nhin, n ch iu chnh lung kt ni ti
n sao cho.
Trong Java 1.4 a thm vo hai phng thc cc lung nhp v lung xut m hay ng

public boolean isInputShutdown()

public boolean isOutputShutdown()

Bin Son : Nguyn Vn Mng

Trang 11

4.4. Thit lp cc ty chn cho Socket


4.4.1. TCP_NODELAY
public void setTcpNoDelay(boolean on) throws SocketException

public boolean getTcpNoDelay() throws SocketException

Thit lp gi tr TCP_NODELAY l true m bo rng cc gi tin c gi i nhanh nht c


th m khng quan tm n kch thc ca chng. Thng thng, cc gi tin nh c kt hp li
thnh cc gi tin ln hn trc khi c gi i. Trc khi gi i mt gi tin khc, host cc b i
nhn cc xc thc ca gi tin trc t h thng xa.
4.4.2. SO_LINGER
public void setSoLinger(boolean on, int seconds) throws SocketException

public int getSoLinger() throws SocketException

Ty chn SO_LINGER xc nh phi thc hin cng vic g vi datagram vn cha c gi i


khi mt socket b ng li. ch mc nh, phng thc close() s c hiu lc ngay lp tc;
nhng h thng vn c gng gi phn d liu cn li. Nu SO_LINGER c thit lp bng 0, cc
gi tin cha c gi i b ph hy khi socket b ng li. Nu SO_LINGER ln hn 0, th phng
thc close() phong ta ch cho d liu c gi i v nhn c xc thc t pha nhn. Khi ht
thi gian qui nh, socket s b ng li v bt k phn d liu cn li s khng c gi i.
4.4.3. SO_TIMEOUT
public void setSoTimeout(int milliseconds) throws SocketException

public int getSoTimeout() throws SocketException

Thng thng khi ta c d liu t m socket, li gi phng thc phong ta cho ti khi nhn
s byte. Bng cch thit lp phng thc SO_TIMEOUT, ta s m bo rng li gi phng thc
s khng phong ta trong khong thi gian qu s giy quy nh.
4.5. Cc phng thc ca lp Object
Lp Socket np chng phng thc chun ca lp java.lang.Object, toString(). V cc socket l
cc i tng tm thi v thng ch tn ti khi lin kt tn ti.

public String toString()


Phng thc toString() to ra mt xu k t nh sau:
Socket[addr=www.oreilly.com/198.122.208.11,port=80,localport=50055]
Phng thc ny thng hu ch cho vic g ri.

4.6. Cc ngoi l Socket


Hu ht cc phng thc ca lp Socket c khai bo a ra ngoi l IOException, hoc lp
con ca lp IOExcepton l lp SocketException.
4.7. Cc lp SocketAddress
Lp SocketAddress bt u c t phin bn Java 1.4, biu din mt u cui ca lin kt. Lp
SocketAddress l mt lp tru tng m khng c phng thc no ngoi construtor mc nh. Lp
ny c th c s dng cho c cc socket TCP v socket khng phi l TCP. Cc lp con ca lp
SocketAddress cung cp thng tin chi tit hn thch hp cho kiu socket. Trong thc t, ch h tr
TCP/IP.
Mc ch chnh ca lp SocketAddress l cung cp mt ni lu tr cc thng tin lin kt socket
tm thi (nh a ch IP v s hiu cng) c th c s dng li to ra socket mi.

public SocketAddress getRemoteSocketAddress()

Bin Son : Nguyn Vn Mng

Trang 12

public SocketAddress getLocalSocketAddress()


C hai phng thc ny tr v gi tr null nu socket vn cha kt ni ti.

5. Lp ServerSocket
Lp ServerSocket c mi th ta cn vit cc server bng Java. N c cc constructor
to cc i tng ServerSocket mi, cc phng thc lng nghe cc lin kt trn mt cng xc
nh, v cc phng thc tr v mt Socket khi lin kt c thit lp, v vy ta c th gi v nhn d
liu.
Vng i ca mt server
1. Mt ServerSocket mi c to ra trn mt cng xc nh bng cch s dng mt
constructor ServerSocket.
2. ServerSocket lng nghe lin kt n trn cng bng cch s dng phng thc
accept(). Phng thc accept() phong ta cho ti khi mt client thc hin mt lin kt,
phng thc accept() tr v mt i tng Socket m lin kt gia client v server.
3. Ty thuc vo kiu server, hoc phng thc getInputStream(), getOutputStream() hoc
c hai c gi nhn cc lung vo ra truyn tin vi client.
4. server v client tng tc theo mt giao thc tha thun sn cho ti khi ngt lin kt.
5. Server, client hoc c hai ngt lin kt
6. Server tr v bc hai v i lin kt tip theo.
5.1. Cc constructor

public ServerSocket(int port) throws IOException, BindException

Constructor ny to mt socket cho server trn cng xc nh. Nu port bng 0, h thng chn
mt cng ngu nhin cho ta. Cng do h thng chn i khi c gi l cng v danh v ta khng bit
s hiu cng. Vi cc server, cc cng v danh khng hu ch lm v cc client cn phi bit trc
cng no m n ni ti (ging nh ngi gi in thoi ngoi vic xc nh cn gi cho ai cn phi bit
s in thoi lin lc vi ngi ).

V d: to mt server socket cho cng 80


try{
ServerSocket httpd = new ServerSocket(80);
}
catch(IOException e)
{
System. err.println(e);
}
Constructor a ra ngoi l IOException nu ta khng th to v gn Socket cho cng c yu
cu. Ngoi l IOException pht sinh khi:

Cng c s dng

Bin Son : Nguyn Vn Mng

Trang 13

Khng c quyn hoc c lin kt vi mt cng nm gia 0 v 1023.


V d;
import java.net.*;
import java.io.*;
public class congLocalHost
{
public static void main(String[] args)
{
ServerSocket ss;
for(int i=0;i<=1024;i++)
{
try{
ss= new ServerSocket(i);
ss.close();
}
catch(IOException e)
{
System.out.println("Co mot server tren cong "+i);
}
}
}
}

public ServerSocket(int port, int queuelength, InetAddress bindAddress)throws IOException

Constructor ny to mt i tng ServerSocket trn cng xc nh vi chiu di hng i xc


nh. ServerSocket ch gn cho a ch IP cc b xc nh. Constructor ny hu ch cho cc server
chy trn cc h thng c nhiu a ch IP.
5.2. Chp nhn v ngt lin kt
Mt i tng ServerSocket hot ng trong mt vng lp chp nhn cc lin kt. Mi ln lp n
gi phng thc accept(). Phng thc ny tr v mt i tng Socket biu din lin kt gia client
v server. Tng tc gi client v server c tin hnh thng qua socket ny. Khi giao tc hon
thnh, server gi phng thc close() ca i tng socket. Nu client ngt lin kt trong khi server
vn ang hot ng, cc lung vo ra kt ni server vi client s a ra ngoi l InterruptedException
trong ln lp tip theo

public Socket accept() throws IOException

Khi bc thit lp lin kt hon thnh, v ta sn sng chp nhn lin kt, cn gi phng
thc accept() ca lp ServerSocket. Phng thc ny phong ta; n dng qu trnh x l v i cho
ti khi client c kt ni. Khi client thc s kt ni, phng thc accept() tr v i tng Socket. Ta
s dng cc phng thc getInputStream() v getOutputStream() truyn tin vi client.

Bin Son : Nguyn Vn Mng

Trang 14

V d:
try{
ServerSocket theServer = new ServerSocket(5776);
while(true)
{
Socket con = theServer.accept();
PrintStream p = new PrintStream(con.getOutputStream());
p.println(Ban da ket noi toi server nay. Bye-bye now.);
con.close();
}
}
catch(IOException e)
{
System.err.println(e);
}

public void close() throws IOException


Nu ta kt thc lm vic vi mt i tng server socket th cn phi ng li i tng ny.
V d: Ci t mt server daytime
import java.net.*;
import java.io.*;
import java.util.Date;
public class daytimeServer{
public final static int daytimePort =13;
public static void main(String[]args)
{
ServerSocket theServer;
Socket con;
PrintStream p;
try{
theServer = new ServerSocket(daytimePort);
try{
p= new PrintStream(con.getOutputStream());
p.println(new Date());
con.close();
}
catch(IOException e)

Bin Son : Nguyn Vn Mng

Trang 15

{
theServer.close();
System. err.println(e);
}
}
catch(IOException e)
{
System. err.println(e);
}
}
}

public void close() throws IOException

Nu hon thnh cng vic vi mt ServerSocket, ta cn phi ng n li, c bit nu


chng trnh ca ta tip tc chy. iu ny nhm to iu kin cho cc chng trnh khc
mun s dng n. ng mt ServerSocket khng ng nht vi vic ng mt Socket.
Lp ServerSocket cung cp mt s phng thc cho ta bit a ch cc b v cng m trn
i tng server ang hot ng. Cc phng thc ny hu ch khi ta m mt i tng server
socket trn mt cng v danh v trn mt giao tip mng khng

public InetAddress getInetAddress()


Phng thc ny tr v a ch c s dng bi server (localhost). Nu localhost c a ch IP,
a ch ny c tr v bi phng thc InetAddress.getLocalHost()
V d:
try{
ServerSocket httpd = new ServerSocket(80);
InetAddress ia = httpd.getInetAddress();
}
catch(IOException
{

e)

public int getLocalHost()


Cc contructor ServerSocket cho php ta nghe d liu trn cng khng nh trc bng cch
gn s 0 cho cng. Phng thc ny cho php ta tm ra cng m server ang nghe.

6. Cc bc ci t chng trnh pha Client bng Java


Sau khi tm hiu cc lp v cc phng thc cn thit ci t chng trnh Socket.
mc 6 v mc 7 chng ta s i vo cc bc c th ci t cc chng trnh Client v Server.
Cc bc ci t Client

Bc 1:To mt i tng Socket


Socket client =new Socket(hostname,portName);

Bc 2:To mt lung xut c th s dng gi thng tin ti Socket

Bin Son : Nguyn Vn Mng

Trang 16

PrintWriter out=new PrintWriter(client.getOutputStream(),true);

Bc 3:To mt lung nhp c thng tin p ng t server


BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));

Bc 4:Thc hin cc thao tc vo/ra vi cc lung nhp v lung xut

i vi cc lung xut, PrintWriter, ta s dng cc phng thc print v println, tng t nh


System.out.println.

i vi lung nhp, BufferedReader, ta c th s dng phng thc read() c mt k t,


hoc mt mng cc k t, hoc gi phng thc readLine() c vo mt dng k t. Cn
ch rng phng thc readLine() tr v null nu kt thc lung.

Bc 5: ng socket khi hon thnh qu trnh truyn tin

V d: Vit chng trnh client lin kt vi mt server. Ngi s dng nhp vo mt dng k t t bn
phm v gi d liu cho server.
import java.net.*;
import java.io.*;
public class EchoClient1
{
public static void main(String[] args)
{
String hostname="localhost";
if(args.length>0)
{
hostname=args[0];
}
PrintWriter pw=null;
BufferedReader br=null;
try{
Socket s=new Socket(hostname,2007);
br=new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedReader user=new BufferedReader(new InputStreamReader(System.in));
pw=new PrintWriter(s.getOutputStream());
System.out.println("Da ket noi duoc voi server...");
while(true)
{
String st=user.readLine();
if(st.equals("exit"))
{
break;
}

Bin Son : Nguyn Vn Mng

Trang 17

pw.println(st);
pw.flush();
System.out.println(br.readLine());
}
}
catch(IOException e)
{
System.err.println(e);
}
finally{
try{
if(br!=null)br.close();
if(pw!=null)pw.close();
}
catch(IOException e)
{
System.err.println(e);
}
}
}
}
Chng trnh EchoClient c vo hostname t i dng lnh. Tip theo ta to mt socket vi
hostname xc nh trn cng s 2007. Tt nhin cng ny hon ton do ta la chn sao cho n
khng trng vi cng c dch v hot ng. Vic to socket thnh cng c ngha l ta lin kt
c vi server. Ta nhn lung nhp t socket thng qua phng thc getInputStream() v gn kt n
vi cc lung k t v lung m nh lnh:
br=new BufferedReader(new InputStreamReader(s.getInputStream());
Tng t ta ly v lung xut thng qua phng thc getOuputStream() ca socket. Sau
gn kt lung ny vi lung PrintWriter gi d liu ti server
pw=new PrintWriter(s.getOutputStream());
c d liu t bn phm ta gn bn phm vi cc lung nhp nh cu lnh:
BufferedReader user=new BufferedReader(new InputStreamReader(System.in));
Sau i to c cc lung th vn nhn v gi d liu tr thnh vn n gin l c d
liu t cc lung nhp br, user v ghi d liu ln lung xut pw.

7. Cc bc ci t chng trnh Server bng Java


ci t chng trnh Server bng ServerSocket ta thc hin cc bc sau:

Bc 1
To mt i tng ServerSocket

Bin Son : Nguyn Vn Mng

Trang 18

ServerSocket ss=new ServerSocket(port)

Bc 2:
To mt i tng Socket bng cch chp nhn lin kt t yu cu lin kt ca client. Sau khi
chp nhn lin kt, phng thc accept() tr v i tng Socket th hin lin kt gia Client
v Server.
while(condion)
{
Socket s=ss.accept();
doSomething(s);
}
Ngi ta khuyn co rng chng ta nn giao cng vic x l i tng s cho mt tuyn on
no .

Bc 3: To mt lung nhp c d liu t client

BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));


Bc 4: To mt lung xut gi d liu tr li cho server
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
Trong tham s true c s dng xc nh rng lung s c t ng y ra.

Bc 5: Thc hin cc thao tc vo ra vi cc lung nhp v lung xut

Bc 6: ng socket s khi truyn tin xong. Vic ng socket cng ng ngha vi vic ng
cc lung.

V d: Vit chng trnh server EchoServer phc v chng trnh EchoClient1 vit bc 5
import java.net.*;
import java.io.*;
public class EchoServer1
{
public final static int DEFAULT_PORT=2007;
public static void main(String[] args)
{ int port=DEFAULT_PORT;
try{
ServerSocket ss=new ServerSocket(port);
Socket s=null;
while(true)
{
try{
s=ss.accept();

Bin Son : Nguyn Vn Mng

Trang 19

PrintWriter
OutputStreamWriter(s.getOutputStream()));

pw=new
BufferedReader

PrintWriter(new
br=new

BufferedReader(new

InputStreamReader(s.getInputStream()));
while(true){
String line=br.readLine();
if(line.equals("exit"))break;
String upper=line.toUpperCase();
pw.println(upper);
pw.flush();
}
}
catch(IOException e)
{
}
finally{
try{
if(s!=null){
s.close();
}
}
catch(IOException e){}
}
}
}
catch(IOException e)
{
}
}
}
Chng trnh bt u bng vic to ra mt i tng ServerSocket trn cng xc nh. Server
lng nghe cc lin kt trong mt vng lp v hn. N chp nhn lin kt bng cch gi phng thc
accept(). Phng thc accept() tr v mt i tng Socket th hin mi lin kt gia client v server.
Ta cng nhn v cc lung nhp v lung xut t i tng Socket nh cc phng thc

Bin Son : Nguyn Vn Mng

Trang 20

getInputStream() v getOuputStream(). Vic nhn yu cu t client s thng qua cc lung nhp v


vic gi p ng ti server s thng qua lung xut.
Khi ng chng trnh server
start java EchoServer1

Hnh 2.6
Khi ng client
C:\MyJava>start java EchoClient1

Hnh 2.7

Hnh 1.5
3.1.4. TCP (Transmission Control Protocol)
Giao thc TCP l giao thc truyn tin hng lin kt c th s dng truyn tin vi tin cy cao. Trong
giao thc tng 4 c th gi cc xc thc rng nhn d liu v yu cu truyn li d liu nu cha nhn c
d liu hoc d liu b hng.
Cc trng header c lit k trong bng sau:

Bin Son : Nguyn Vn Mng

Trang 21

Trng
Cng ngun (source
port)
Cng ch
(destination port)
S th t (Sequence
Number)
Acknowledge
Number
Data offset
Reserved
Control
Window Size

Checksum
Urgent Pointer

di
2
bytes
2
bytes
4
bytes

M t
S hiu cng ca ngun
S hiu cng ch
S th t c to ra bi ngun v c s dng bi
ch sp xp li cc gi tin to ra thng ip
ban u, v gi xc thc ti ngun.

4
bytes
4
Cc chi tit v ni d liu gi tin bt u
bits
6 bit D phng
2
Trng ny ch ra kch thc ca vng m nhn.
bytes Pha nhn c th thng bo cho pha gi kch thc
d liu ti a m c th c gi i bng cch s
dng cc thng ip xc thc
2
Checksum cho header v d liu xc nh xem
bytes gi tin c b hng khng
2
Trng ny thng bo cho pha nhn bit c d liu
bytes khn

Options
Padding
Bng 1.5
Giao thc TCP l mt giao thc phc tp v mt thi gian do c ch bt tay, nhng giao thc ny m bo
cc gi tin n ng ch.
Mt s giao thc ng dng s dng TCP nh HTTP, FTP, SMTP, v Telnet. TCP yu cu mt lin kt phi
c thit lp trc khi d liu c gi i. ng dng server phi thc hin mt thao tc m th ng to mt
lin kt vi mt s hiu cng cho trc.
3.1.5. UDP-User Datagram Protocol
Ngc vi giao thc TCP, UDP l mt giao thc c tc truyn tin nhanh v n ch xc nh c ch ti
thiu truyn d liu. Tt nhin iu ny c mt s nhc im. Cc thng ip c th c nhn theo bt k
th t no. Thng ip c gi u tin c th c nhn sau cng. Khng c g m bo l cc gi tin s n
ch, v cc thng ip c th b tht lc, hoc thm ch c th nhn c hai bn sao ca cng mt thng ip.
UDP khng cn giai on thit lp lin kt, d liu c gi i ngay khi cn. UDP khng gi cc thng
ip xc thc, v vy d liu c th nhn c hoc b tht lc. Nu cn truyn d liu c tin cy n phi c
thc hin trong mt giao thc mc cao hn.
Vy u l u im ca giao thc UDP, ti sao chng ta li cn s dng mt giao thc c tin cy thp
nh vy? hiu c l do ti sao ta li phi s dng giao thc UDP ta cn phn bit gia truyn unicast,
broadcast v multicast.
Mt thng ip unicast c gi t nt ny ti nt khc. Kiu truyn tin l truyn tin im-im. Giao
thc TCP ch h tr truyn tin unicast. Nu mt server mun truyn tin vi nhiu client bng cch s dng giao
thc UDP, mi client phi thit lp mt lin kt, v cc thng ip ch c th gi ti mt nt. Truyn tin broadcast

Bin Son : Nguyn Vn Mng

Trang 22

ngha l mt thng ip c th c gi ti tt c cc nt trong mt mng. Multicast cho php cc thng ip


c truyn ti mt nhm cc nt c la chn.
UDP c th c s dng cho truyn tin unicast nu cn ti tc truyn tin nhanh, nh truyn tin a
phng tin, nhng u im chnh ca UDP l truyn tin broadcast v truyn tin multicast. Thng thng chng
ta khng mun tt c cc nt gi v cc xc thc cho server v nh vy s lm cho server qu ti.
Header UDP ngn v n gin hn rt nhiu so vi TCP

Trng thng tin


Source port (Cng ngun)

di
2 byte

Destination Port
Length

2 byte
2 byte

Checksum

2 byte

M t
Xc nh cng ngun l mt ty chn vi
UDP. Nu trng ny c s dng, pha nhn
thng ip c th gi mt phc p ti cng
ny
S hiu cng ch
Chiu di ca thng ip bao gm header v
d liu
kim tra tnh ng n

III. Lp trnh ng dng cho giao thc UDP

1. Tng quan v giao thc UDP


TCP/IP l mt h cc giao thc c gi l h giao thc IP, bao gm bn tng. Cn nh rng
TCP/IP khng phi l mt giao thc m thc s l mt h cc giao thc, v bao gm cc giao thc
mc thp khc nh IP, TCP, v UDP. UDP nm tng giao vn, pha trn giao thc IP. Tng giao vn
cung cp kh nng truyn tin gia cc mng thng qua cc gateway. N s dng cc a ch IP gi
cc gi tin trn Internet hoc trn mng thng qua cc trnh iu khin thit b khc nhau. TCP v UDP
l mt phn ca h giao thc TCP/IP; mi giao thc c nhng u v nhc im ring ca n.
Giao thc UDP l giao thc n gin, phi lin kt v cung cp dch v trn tng giao vn vi tc
nhanh. N h tr lin kt mt-nhiu v thng c s dng thng xuyn trong lin kt mtnhiu bng cch s dng cc datagram multicast v unicast.
Giao thc IP l giao thc c bn ca Internet. TCP v UDP u l hai giao thc tng giao thc
vn trn c s ca giao thc IP. Hnh di y ch ra cch nh x m hnh OSI nh x vo kin trc
TCP/IP v h giao thc TCP/IP.
Cc tng OSI

H giao thc
TCP

TCP/IP Stack

Tng phin

Tng giao vn

Tng giao vn

Tng mng

Tng Internet

ICMP,IP, IGMP

Tng lin kt d liu

Tng vt l

Tng mng

Ethernet, ATM, Frame


Relay,..

TCP

DNS

Tng ng dng

RIP

Tng trnh din

SMTP

FTP

Tng ng dng
HTTP

UDP

Bng 3.1

Bin Son : Nguyn Vn Mng

Trang 23

1.1. Mt s thut ng UDP


Trc khi kim tra xem giao thc UDP hot ng nh th no, chng ta cn lm quen vi mt
s thut ng. Trong phn di y, chng ta s nh ngha mt s thut ng c bn c lin quan n
giao thc UDP.

Packet

Trong truyn s liu, mt packet l mt dy cc s nh phn, biu din d liu v cc tn hiu


iu khin, cc gi tin ny c chuyn i v chuyn ti ti host. Trong gi tin, thng tin c sp xp
theo mt khun dng c th.

Datagram

Mt datagram l mt gi tin c lp, t cha, mang y d liu nh tuyn t ngun ti


ch m khng cn thng tin thm.

MTU

MTU l vit tt ca Maximum Transmission Unit. MTU l mt c trng ca tng lin kt m t


s byte d liu ti a c th truyn trong mt gi tin. Mt khc, MTU l gi d liu ln nht m mi
trng mng cho trc c th truyn. V d, Ethernet c MTU c nh l 1500 byte. Trong UDP, nu
kch thc ca mt datagram ln hn MTU, IP s thc hin phn on, chia datagram thnh cc phn
nh hn (cc on), v vy mi on nh c kch thc nh hn MTU.

Port

UDP s dng cc cng nh x d liu n vo mt tin trnh c th ang chy trn mt my


tnh. UDP nh ng i cho packet ti v tr xc nh bng cch s dng s hiu cng c xc nh
trong header ca datagram. Cc cng c biu din bi cc s 16-bit, v th cc cng nm trong di
t 0 n 65535. Cc cng cng c xem nh l cc im cui ca cc lin kt logic, v c chia
thnh ba loi sau:
o

Cc cng ph bin: T 0 n 1023

Cc cng ng k: 1024 n 49151

Cc cng ng/dnh ring 49152 n 65535

Ch rng cc cng UDP c th nhn nhiu hn mt thng ip mt thi im. Trong mt s


trng hp, cc dch v TCP v UDP c th s dng cng mt s hiu cng, nh 7 (Echo) hoc trn
cng 23 (Telnet).
UDP c cc cng thng dng sau:
Cng UDP

M t

15

Netstat- Network Status-Tnh trng mng

53

DNS-Domain Name Server

69

TFTP-Trivial File Transfer Protocol


Giao thc truyn tp thng thng

137

NetBIOS Name Service

138

Dch v Datagram NetBIOS

161

SNMP
Bng 7.2

TTL (Time To Live)

Bin Son : Nguyn Vn Mng

Trang 24

Gi tr TTL cho php chng ta thit lp mt gii hn trn ca cc router m mt datagram c th


i qua. Gi tr TTL ngn nga cc gi tin khi b kt trong cc vng lp nh tuyn v hn. TTL c
khi to bi pha gi v gi tr c gim i bi mi router qun l datagram. Khi TTL bng 0,
datagram b loi b.

Multicasting

Multicasting l phng php da trn chun c tnh cht m phn phi cc thng tin ging nhau
n nhiu ngi dng. Multicasting l mt c trng chnh ca giao thc UDP. Multicasting cho php
chng ta truyn tin theo kiu mt nhiu, v d gi tin hoc th in t ti nhiu ngi nhn, i pht
thanh trn Internet, hoc cc chng trnh demo trc tuyn.
1.2. Hot ng ca giao thc UDP
Khi mt ng dng da trn giao thc UDP gi d liu ti mt host khc trn mng, UDP thm
vo mt header c di 8 byte cha cc s hiu cng ngun v ch, cng vi tng chiu di d liu
v thng tin checksum. IP thm vo header ca ring n vo u mi datagram UDP to ln mt
datagram IP:
1.3. Cc nhc im ca giao thc UDP
So vi giao thc TCP, UDP c nhng nhc im sau:

Thiu cc tn hiu bt tay. Trc khi gi mt on, UDP khng gi cc tn hiu bt tay gia bn
gi v bn nhn. V th pha gi khng c cch no bit datagram n ch hay cha.
Do vy, UDP khng m bo vic d liu n ch hay cha.

S dng cc phin. TCP l hng lin kt, cc phin c duy tr gia cc host. TCP s
dng cc ch s phin (session ID) duy tr cc lin kt gia hai host. UDP khng h tr bt
k phin no do bn cht phi lin kt ca n.

tin cy. UDP khng m bo rng ch c mt bn sao d liu ti ch. gi d liu ti cc


h thng cui, UDP phn chia d liu thnh cc on nh. UDP khng m bo rng cc on
ny s n ch ng th t nh chng c to ra ngun. Ngc li, TCP s dng cc
s th t cng vi s hiu cng v cc gi tin xc thc thng xuyn, iu ny m bo rng
cc gi tin n ch ng th t m n c to ra.

Bo mt. TCP c tnh bo mt cao hn UDP. Trong nhiu t chc, firewall v router cm cc
gi tin UDP, iu ny l v cc hacker thng s dng cc cng UDP.

Kim sot lung. UDP khng c kim sot lung; kt qu l, mt ng dng UDP c thit k
ti c th lm gim bng thng ca mng.

1.4. Cc u im ca UDP

Khng cn thit lp lin kt. UDP l giao thc phi lin kt, v th khng cn phi thit lp lin
kt. V UDP khng s dng cc tn hiu handshaking, nn c th trnh c thi gian tr.
chnh l l do ti sao DNS thng s dng giao thc UDP hn l TCP-DNS s chm hn rt
nhiu khi dng TCP.

Tc . UDP nhanh hn so vi TCP. Bi v iu ny, nhiu ng dng thng c ci t trn


giao thc UDP hn so vi giao thc TCP.

H tr hnh trng (Topology). UDP h tr cc lin kt 1-1, 1-n, ngc li TCP ch h tr lin kt
1-1.

Kch thc header. UDP ch c 8 byte header cho mi on, ngc li TCP cn cc header 20
byte, v vy s dng bng thng t hn.

Bng di y tng kt nhng s kc nhau gia hai giao thc TCP v UDP:

Bin Son : Nguyn Vn Mng

Trang 25

Cc c
trng

UDP

Hng lin kt

Khng

S dng phin

Khng

tin cy

Khng

Xc thc

Khng

nh th t

Khng

iu khin lung

Khng

Nhiu hn

Bo mt

TCP

Bng 3.3
1.5. Khi no th nn s dng UDP
Rt nhiu ng dng trn Internet s dng UDP. Da trn cc u v nhc im ca UDP chng
ta c th kt lun UDP c ch khi:

S dng cho cc phng thc truyn broadcasting v multicasting khi chng ta mun truyn tin
vi nhiu host.

Kch thc datagram nh v trnh t on l khng quan trng

Khng cn thit lp lin kt

ng dng khng gi cc d liu quan trng

Khng cn truyn li cc gi tin

Bng thng ca mng ng vai tr quan trng

Vic ci t ng dng UDP trong Java cn c hai lp l DatagramPacket v DatagramSocket.


DatagramPacket ng gi cc byte d liu vo cc gi tin UDP c gi l datagram v cho php ta
m cc datagram khi nhn c. Mt DatagramSocket ng thi thc hin c hai nhim v nhn v
gi gi tin. gi d liu, ta t d liu trong mt DatagramPacket v gi gi tin bng cch s dng
DatagramSocket. nhn d liu, ta nhn mt i tng DatagramPacket t DatagramSocket v sau
c ni dung ca gi tin.
UDP khng c bt k khi nim no v lin kt gia hai host. Mt socket gi tt c d liu ti
mt cng hoc nhn tt c d liu t mt cng m khng cn quan tm host no gi. Mt
DatagramSocket c th gi d liu ti nhiu host c lp hoc nhn d liu t nhiu host c lp.
Socket khng dnh ring cho mt lin kt c th th no c nh trong giao thc TCP. Cc socket TCP
xem lin kt mng nh l mt lung: ta gi v nhn d liu vi cc lung nhp v lung xut nhn
c t socket. UDP khng cho php iu ny; ta phi lm vic vi tng gi tin. Tt c d liu c
t trong datagram c gi i di dng mt gi tin. Gi tin ny cng c th nhn c bi mt
nhm hoc cng c th b mt. Mt gi tin khng nht thit phi lin quan n gi tin tip theo. Cho
trc hai gi tin, khng c cch no bit c gi tin no c gi trc v gi tin no c gi
sau.

2. Lp DatagramPacket
Cc datagram UDP a rt t thng tin vo datagram IP. Header UDP ch a tm byte vo
header IP. Header UDP bao gm s hiu cng ngun v ch, chiu di ca d liu v header UDP,
tip n l mt checksum ty chn. V mi cng c biu din bng hai byte nn tng s cng UDP
trn mt host s l 65536. Chiu di cng c biu din bng hai byte nn s byte trong datagram ti
a s l 65536 tr i tm 8 byte dnh cho phn thng tin header.

Bin Son : Nguyn Vn Mng

Trang 26

Trong Java, mt datagram UDP c biu din bi lp DatagramPacket:

public final class DatagramPacket extends Object

Lp ny cung cp cc phng thc nhn v thit lp cc a ch ngun, ch t header IP,


nhn v thit lp cc thng tin v cng ngun v ch, nhn v thit lp di d liu. Cc trng
thng tin cn li khng th truy nhp c t m Java thun ty.
DatagramPacket s dng cc constructor khc nhau ty thuc vo gi tin c s dng gi
hay nhn d liu.
2.1. Cc constructor nhn datagram
Hai constructor to ra cc i tng DatagramSocket mi nhn d liu t mng:

public DatagramPacket(byte[] b, int length)

public DatagramPacket(byte[] b, int offset, int length)

Khi mt socket nhn mt datagram, n lu tr phn d liu ca datagram trong vng m b


bt u ti v tr b[0] v tip tc cho ti khi gi tin c lu tr hon ton hoc cho ti khi lu tr ht
length byte. Nu s dng constructor th hai, th d liu c lu tr bt u t v tr b[offset]. Chiu
di ca b phi nh hn hoc bng b.length-offset. Nu ta xy dng mt DatagramPacket c chiu di
vt qu chiu di ca vng m th constructor s a ra ngoi l IllegalArgumentException. y l
kiu ngoi l RuntimeException nn chng trnh ca ta khng cn thit phi n bt ngoi l ny.
V d, xy dng mt DatagramPacket nhn d liu c kch thc ln ti 8912 byte
byte b[]=new byte[8912];
DatagramPacket dp=new DatagramPacket(b,b.length);
2.2. Constructor gi cc datagram
Bn constructor to cc i tng DatagramPacket mi gi d liu trn mng:

Bin Son : Nguyn Vn Mng

Trang 27

public DatagramPacket(byte[] b, int length, InetAddress dc, int port)

public DatagramPacket(byte[] b, int offset, int length, InetAddress dc, int port)

public DatagramPacket(byte[] b, int length, SocketAddress dc, int port)

public DatagramPacket(byte[] b, int offset, int length, SocketAddress dc, int port)

Mi constructor to ra mt DatagramPacket mi c gi i ti mt host khc. Gi tin c


in y d liu vi chiu di l length byte bt u t v tr offset hoc v tr 0 nu offset khng c
s dng.
V d gi i mt xu k t n mt host khc nh sau:
String s=This is an example of UDP Programming;
byte[] b= s.getBytes();
try{
InetAddress dc=InetAddress.getByName(www.vnn.vn);
int port =7;
DatagramPacket dp=new DatagramPacket(b,b.length,dc,port);
//Gi gi tin
}
catch(IOException e){
System.err.println(e);
}
Cng vic kh khn nht trong vic to ra mt i tng DatagramPacket chnh l vic chuyn
i d liu thnh mt mng byte. on m trn chuyn i mt xu k t thnh mt mng byte gi
d liu i
2.3. Cc phng thc nhn cc thng tin t DatagramPacket
DatagramPacket c su phng thc tm cc phn khc nhau ca mt datagram: d liu
thc s cng vi mt s trng header. Cc phng thc ny thng c s dng cho cc
datagram nhn c t mng.

public InetAddress getAddress()

Phng thc getAddress() tr v mt i tng InetAddress cha a ch IP ca host xa. Nu


datagram c nhn t Internet, a ch tr v chnh l a ch ca my gi datagram (a ch
ngun). Mt khc nu datagram c to cc b c gi ti my xa, phng thc ny tr v
a ch ca host m datagram c nh a ch.

public int getPort()

Phng thc getPort() tr v mt s nguyn xc nh cng trn host xa. Nu datagram c


nhn t Internet th cng ny l cng trn host gi gi tin i.

public SocketAddress()
Phng thc ny tr v mt i tng SocketAddress cha a ch IP v s hiu cng ca host

xa.

public byte[] getData()

Bin Son : Nguyn Vn Mng

Trang 28

Phng thc getData() tr v mt mng byte cha d liu t datagram. Thng thng cn phi
chuyn cc byte ny thnh mt dng d liu khc trc khi chng trnh x l d liu. Mt cch
thc hin iu ny l chuyn i mng byte thnh mt i tng String s dng constructor sau y:

public String(byte[] buffer,String encoding)

Tham s u tin, buffer, l mng cc byte cha d liu t datagram. Tham s th hai cho bit
cch thc m ha xu k t. Cho trc mt DatagramPacket dp c nhn t mng, ta c th chuyn
i n thnh xu k t nh sau:
String s=new String(dp.getData(),ASCII);
Nu datagram khng cha vn bn, vic chuyn i n thnh d liu Java kh khn hn nhiu.
Mt cch tip cn l chuyn i mng byte c tr v bi phng thc getData() thnh lung
ByteArrayInputStream bng cch s dng constructor ny:

public ByteArrayInputStream(byte[] b, int offset, int length)


b l mng byte c s dng nh l mt lung nhp InputStream

public int getLength()


Phng thc getLength() tr v s bytes d liu c trong mt datagram.

public getOffset()

Phng thc ny tr v v tr trong mng c tr v bi phng thc getData() m t d


liu trong datagram xut pht.
Cc phng thc thit lp gi tr cho cc trng thng tin
Su constructor trn l to lp ra cc datagram. Tuy nhin, Java cung cp mt s
phng thc thay i d liu, a ch ca my xa, v cng trn my xa sau khi datagram
c to ra. Trong mt s trng hp vic s dng li cc DatagramPacket c sn s nhanh hn
vic to mi cc i tng ny.

public void setData(byte[] b): Phng thc ny thay i d liu ca datagram

public void setData(byte[] b, int offset, int length)

Phng thc ny a ra gii php gi mt khi lng d liu ln. Thay v gi ton b d
liu trong mng, ta c th gi d liu trong tng on ca mng ti mi thi im.
V d on m sau y s gi d liu theo tng on 512 byte:
int offset=0;
DatagramPacket dp=new DatagramPacket(b,offset,512);
int bytesSent=0;
while(bytesSent<b.length)
{
ds.send(dp);
bytesSent+=dp.getLength();
int bytesToSend=b.length-bytesSent;
int size=(bytesToSend>512):512:bytesToSend;
dp.setData(b,byteSent,512);
}

public void setAddress(InetAddress dc)

Bin Son : Nguyn Vn Mng

Trang 29

Phng thc setAddress() thay i a ch ca my m ta s gi gi tin ti. iu ny s cho


php ta gi cng mt datagram n nhiu ni nhn.

public void setPort(int port)


Phng thc ny thay i s hiu cng gi ti ca gi tin.

pubic void setAddress(SocketAddress sa)

public void setLength(int length)


Phng thc ny thay i s byte d liu c th t trong vng m.

3. Lp DatagramSocket
gi hoc nhn mt DatagramPacket, bn phi m mt DatagramSocket. Trong Java, mt
datagram socket c to ra v c truy xut thng qua i tng DatagramSocket
public class DatagramSocket extends Object
Tt c cc datagram c gn vi mt cng cc b, cng ny c s dng lng nghe cc
datagram n hoc c t trn cc header ca cc datagram s gi i. Nu ta vit mt client th
khng cn phi quan tm n s hiu cng cc b l bao nhiu
DatagramSocket c s dng gi v nhn cc gi tin UDP. N cung cp cc phng thc
gi v nhn cc gi tin, cng nh xc nh mt gi tr timeout khi s dng phng php vo ra
khng phong ta (non blocking I/O), kim tra v sa i kch thc ti a ca gi tin UDP, ng socket.
Cc phng thc

void close(): ng mt lin kt v gii phng n khi cng cc b.

void connect(InetAddress remote_address, int remote_port)-

InetAddress getInetAddress():phng thc ny tr v a ch remote m socket kt ni ti,


hoc gi tr null nu khng tn ti lin kt.

InetAddress getLocalAddress(): tr v a ch cc b

Int getSoTimeOut() tr v gi tr ty chn timeout ca socket. Gi tr ny xc nh thi gian m


thao tc c s phong ta trc khi n a ra ngoi l InterruptedException. ch mc
nh, gi tr ny bng 0, ch ra rng vo ra khng phong ta c s dng.

void receive(DatagramPacket dp) throws IOException:phng thc c mt gi tin UDP v lu


n dung trong packet xc nh.

void send(DatagramSocket dp) throws IOException:phng thc gi mt gi tin

void setSoTimeOut(int timeout): thit lp gi tr ty chn ca socket.

4. Nhn cc gi tin
Trc khi mt ng dng c th c cc gi tin UDP c gi bi cc my xa, n phi gn mt
socket vi mt cng UDP bng cch s dng DatagramSocket, v to ra mt DatagramPacket s
ng vai tr nh l mt b cha cho d liu ca gi tin UDP. Hnh v di y ch ra mi quan h gia
mt gi tin UDP vi cc lp Java khc nhau c s dng x l n v cc ng dng thc t.

packet
c

gi tin

DatagramSocket

Chuyn gi tin
vo
DatagramSocket

Bin Son : Nguyn Vn Mng

DatagramPacket

ng dng UDP

Trang 30

Hnh 3.1
Khi mt ng dng mun c cc gi tin UDP, n gi phng thc DatagramSocket.receive(),
phng thc ny sao chp gi tin UDP vo mt DatagramPacket xc nh. X l ni dung ni tin v
tin trnh lp li khi cn
DatagramPacket dp=new DatagramPacket(new byte[256],256);
DatagramSocket ds=new DatagramSocket(2000);
boolean finished=false;
while(!finished)
{
ds.receive(dp);
//X l gi tin
}
ds.close();
Khi x l gi tin ng dng phi lm vic trc tip vi mt mng byte. Tuy nhin nu ng dng l
c vn bn th ta c th s dng cc lp t gi vo ra chuyn i gia mng byte v lung stream
v reader. Bng cch gn kt lung nhp ByteArrayInputStream vi ni dung ca mt datagram v
sau kt ni vi mt kiu lung khc, khi bn c th truy xut ti ni dung ca gi UDP mt cch
d dng. Rt nhiu ngi lp trnh thch dng cc lung vo ra I/O x l d liu, bng cch s dng
lung DataInputStream hoc BufferedReader truy xut ti ni dung ca cc mng byte.
InputStream

DatagramPacket
a ch IP

ByteArrayInputStream

a ch cng

D liu gi tin
byte[]={,}

hoc

InputStreamReader

Hnh 3.2
V d, gn kt mt lung DataInputStream vi ni dung ca mt DatagramPacket, ta s dng
on m sau:
ByteArrayInputStream bis=new ByteArrayInputStream(dp.getData());
DataInputStream dis=new DataInputStream(bis);

Bin Son : Nguyn Vn Mng

Trang 31

//c ni dung ca gi tin UDP

5. Gi cc gi tin
Lp DatagramSocket cng c s dng gi cc gi tin. Khi gi gi tin, ng dng phi to ra
mt DatagramPacket, thit lp a ch v thng tin cng, v ghi d liu cn truyn vo mng byte. Nu
mun gi thng tin phc p th ta cng bit a ch v s hiu cng ca gi tin nhn c. Mi khi
gi tin sn sng gi, ta s dng phng thc send() ca lp DatagramSocket gi gi tin i.

DatagramSocket

Gn cng UDP
Gi DatagramPacket
bng cch s dng
DatagramSocket

ng dng
UDP

Packet

Xy dng gi tin

DatagramPacket

Hnh 3.3
//Socket lng nghe cc gi tin n trn cng 2000
DatagramSocket socket = new DatagramSocket(2000);
DatagramPacket packet = new DatagramPacket (new byte[256], 256);
packet.setAddress ( InetAddress.getByName ( somehost ) );
packet.setPort ( 2000 );
boolean finished = false;
while !finished )
{
// Ghi d liu vo vng m buffer
.........
socket.send (packet);
// Thc hin hnh ng no , chng hn nh c gi tin khci hoc kim tra xemor
// cn gi tin no cn gi i hay khng
.........
}
socket.close();

Bin Son : Nguyn Vn Mng

Trang 32

6. V d minh ha giao thc UDP


minh ha cc gi tin UDP c gi v nhn nh th no, chng ta s vit, bin dch v chy
ng dng sau.
Vit chng trnh theo m hnh Client/Server :
Client thc hin cc thao tc sau y:

Client gi mt xu k t do ngi dng nhp t bn phm cho server

Client nhn thng tin phn hi tr li t Server v hin th thng tin trn mn hnh
Server thc hin cc thao tc sau:

Server nhn xu k t do client gi ti v in ln mn hnh

Server bin i xu k t thnh ch hoa v gi tr li cho Client


import java.net.*;
import java.io.*;
public class UDPClient
{
public final static int CONG_MAC_DINH=9;
public static void main(String args[])
{
String hostname;
int port=CONG_MAC_DINH;
if(args.length>0)
{
hostname=args[0];
try{
}
catch(Exception e){
port =Integer.parseInt(args[1]);
}
}
else
{
hostname="127.0.0.1";
}
try{
InetAddress dc=InetAddress.getByName(hostname);

Bin Son : Nguyn Vn Mng

Trang 33

BufferedReader
InputStreamReader(System.in));

userInput=new

BufferedReader(new

DatagramSocket ds =new DatagramSocket(port);


while(true){
String line=userInput.readLine();
if(line.equals("exit"))break;
byte[] data=line.getBytes();
DatagramPacket
DatagramPacket(data,data.length,dc,port);

dp=new

ds.send(dp);
dp.setLength(65507);
ds.receive(dp);
ByteArrayInputStream

bis

=new

ByteArrayInputStream(dp.getData());
BufferedReader

dis

=new

BufferedReader(new

InputStreamReader(bis));
System.out.println(dis.readLine());
}
}
catch(UnknownHostException e)
{
System.err.println(e);
}
catch(IOException e)
{
System.err.println(e);
}
}
}

import java.net.*;
import java.io.*;
public class UDPServer
{

Bin Son : Nguyn Vn Mng

Trang 34

public final static int CONG_MAC_DINH=9;


public static void main(String args[])
{
int port=CONG_MAC_DINH;
try{
}
catch(Exception e){
port =Integer.parseInt(args[1]);
}
try{
DatagramSocket ds =new DatagramSocket(port);
DatagramPacket

dp=new

DatagramPacket(new

byte[65507],65507);
while(true){
ds.receive(dp);
ByteArrayInputStream

bis

=new

ByteArrayInputStream(dp.getData());
BufferedReader

dis

=new

BufferedReader(new

InputStreamReader(bis));
String s=dis.readLine();
System.out.println(s);
s.toUpperCase();
dp.setData(s.getBytes());
dp.setLength(s.length());
dp.setAddress(dp.getAddress());
dp.setPort(dp.getPort());
ds.send(dp);
}
}
catch(UnknownHostException e)
{
System.err.println(e);

Bin Son : Nguyn Vn Mng

Trang 35

}
catch(IOException e)
{
System.err.println(e);
}
}
}
C:\>start java UDPServer
C:\>start java UDPClient

Hnh 3.4

Bin Son : Nguyn Vn Mng

Trang 36

You might also like