Professional Documents
Culture Documents
Lap Trinh Mang
Lap Trinh Mang
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
Identification
(nh danh)
2 bytes
Flags
3 bits
Fragment Offset
13 bits
Time to Live
1 byte
Protocol
1 byte
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
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)
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
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.
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
Trang 4
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.
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.
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
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:
Gi d liu
Nhn d liu
Ngt lin kt
Gn cng
Nghe d liu n
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.
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);
}
}
}
}
Trang 9
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.
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.
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 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
Trang 11
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.
Trang 12
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
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 ).
Cng c s dng
Trang 13
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.
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);
}
Trang 15
{
theServer.close();
System. err.println(e);
}
}
catch(IOException e)
{
System. err.println(e);
}
}
}
e)
Trang 16
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;
}
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.
Bc 1
To mt i tng ServerSocket
Trang 18
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 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();
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
Trang 20
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:
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
Trang 22
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
H giao thc
TCP
TCP/IP Stack
Tng phin
Tng giao vn
Tng giao vn
Tng mng
Tng Internet
ICMP,IP, IGMP
Tng vt l
Tng mng
TCP
DNS
Tng ng dng
RIP
SMTP
FTP
Tng ng dng
HTTP
UDP
Bng 3.1
Trang 23
Packet
Datagram
MTU
Port
M t
15
53
69
137
138
161
SNMP
Bng 7.2
Trang 24
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.
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.
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:
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.
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.
Trang 26
Trang 27
public DatagramPacket(byte[] b, int offset, int length, InetAddress dc, int port)
public DatagramPacket(byte[] b, int offset, int length, SocketAddress dc, int port)
public SocketAddress()
Phng thc ny tr v mt i tng SocketAddress cha a ch IP v s hiu cng ca host
xa.
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:
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 getOffset()
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);
}
Trang 29
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
InetAddress getLocalAddress(): tr v a ch cc b
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
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);
Trang 31
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();
Trang 32
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:
Trang 33
BufferedReader
InputStreamReader(System.in));
userInput=new
BufferedReader(new
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
{
Trang 34
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);
Trang 35
}
catch(IOException e)
{
System.err.println(e);
}
}
}
C:\>start java UDPServer
C:\>start java UDPClient
Hnh 3.4
Trang 36