You are on page 1of 39

Chng 7 : LP TRNH SOCKET VI UDP

1. Tng quan v giao thc UDP 1.1. Hot ng ca giao thc UDP 1.2. Cc u v nhc im ca UDP 1.3. Khi no th s dng UDP 2. Lp DatagramPacket 2.1.Cc constructor nhn datagram 2.2.Constructor gi cc datagram 3. Lp DatagramSocket 4. Nhn cc gi tin 5. Gi cc gi tin 6. Demo giao thc UDP

1. TNG QUAN V UDP


+ TCP/IP khng phi l mt giao thc m thc s l mt h cc giao thc, bao gm cc giao thc 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. + Giao thc UDP l giao thc n gin, khng lin kt v cung cp dch v trn tng giao vn vi tc nhanh.

11. 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 - tng chiu di d liu - thng tin checksum. + IP thm vo header ca ring n vo u mi datagram UDP to ln mt datagram IP

11. Hot ng ca giao thc UDP

1.2. Cc u v nhc im ca UDP

* u im:

+ Khng cn 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. + 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.

1.2. Cc u v nhc im ca UDP


* Nhc im:
+ UDP khng m bo vic d liu n ch hay cha. - Do 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. + UDP khng h tr bt k phin no. Trong khi TCP s dng cc ch s phin (session ID) duy tr cc lin kt gia hai host.

1.2. Cc u v nhc im ca UDP


* Nhc im:
+ 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.

1.2. Cc u v nhc im ca UDP


* Nhc im:

+ TCP c tnh bo mt cao hn UDP. - Trong nhiu t chc firewall v router cn cc gi tin UDP - V cc hacker thng s dng cc cng UDP. + UDP khng c kim sot lung. - Mt ng dng UDP c thit k ti c th lm gim bng thng ca mng.

1.2. Cc u v nhc im ca UDP

1.3 Khi no 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 + Khng cn thit lp lin kt + Khng cn truyn li cc gi tin + ng dng khng gi cc d liu quan trng + Bng thng ca mng ng vai tr quan trng

2. DatagramPacket
2.1. Constructor nhn datagram 2.2. Constructor gi datagram

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.

+ Vic ci t ng dng UDP trong Java

2. DatagramPacket

+ Cc datagram UDP a rt t thng tin vo datagram IP. + Header UDP ch a 8 byte vo header IP. - 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 65535.

2. DatagramPacket

2. DatagramPacket

2.1. 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 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].

2.1. Constructor nhn datagram


V d : Xy dng mt DatagramPacket nhn d liu c kch thc ln ti 2579 byte
byte b[]=new byte[2579]; DatagramPacket dp=new DatagramPacket(b,b.length);

2.2. Constructor gi datagram


+ Bn constructor to cc i tng DatagramPacket mi gi d liu trn mng: - 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

2.2. Constructor gi datagram


V d : Gi i mt xu k t n mt host nh sau: String st=Minh ha s dng UDP; byte[] b= st.getBytes(); try{ InetAddress dc=InetAddress.getByName(www.ud.edu.vn); int port =17; DatagramPacket dp=new DatagramPacket(b,b.length,dc,port);
// Gi gi tin i

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

2.3. Cc phng thc nhn cc thng tin t DatagramPacket


+ DatagramPacket c 6 phng thc tm cc phn khc nhau ca mt datagram: d liu thc s cng vi mt s trng header. 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() - 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.

2.3. Cc phng thc nhn cc thng tin t DatagramPacket

2.3. Cc phng thc nhn cc thng tin t DatagramPacket


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);

3. DatagramSocket
+ gi hoc nhn mt DatagramPacket, bn phi m mt DatagramSocket. Trong Java, mt DatagramSocket 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. + 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 khi cng cc b. void connect(InetAddress remote_address, int remote_port) : 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.

3. DatagramSocket

Cc phng thc : void receive(DatagramPacket dp) throws IOException : Phng thc c mt gi tin UDP v lu ni 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.

3. DatagramSocket

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 + Ngoi ra to ra mt DatagramPacket s ng vai tr nh l mt b cha d liu ca gi tin UDP
+

4. NHN CC GI TIN
packet
c gi tin

Chuyn gi tin vo DatagramPacket DatagramPacket ng dng UDP

DatagramSocket

+ 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 gi tin v tin trnh lp li khi cn

4. NHN CC GI TIN
DatagramPacket dp=new DatagramPacket(new byte[256],256); DatagramSocket ds=new DatagramSocket(2012); boolean finished=false; while(!finished) { ds.receive(dp); //X l gi tin } ds.close();

4. NHN CC GI TIN
+ Khi x l gi tin ng dng phi lm vic trc tip vi mt mng byte. + Nu ng dng l c vn bn th ta c th s dng cc lp t gi vo ra chuyn i gia mng byte cng vi lung stream v lung 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. + Ngoi ra ta c th 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.

4. NHN CC GI TIN
DatagramPacket

InputStream

a ch IP a ch cng

ByteArrayInputStream

hoc

D liu gi tin byte[]={,}


InputStreamReader

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); //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.

5. GI CC GI TIN
DatagramSocket
Gn cng UDP

ng dng UDP

Gi DatagramPacket bng cch s dng DatagramSocket


Xy dng gi tin

Packet

DatagramPacket

5. GI CC GI TIN
//Socket lng nghe cc gi tin n trn cng 2013 DatagramSocket socket = new DatagramSocket(2013); DatagramPacket packet = new DatagramPacket (new byte[256], 256); packet.setAddress ( InetAddress.getByName ( somehost ) ); packet.setPort ( 2013 ); 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 khc hoc kim tra xem // cn gi tin no cn gi i hay khng ......... } socket.close();

6. DEMO GIAO THC UDP


// Chng trnh Client import java.net.*; import java.io.*; public class UDPClient1 { public final static int DEF_PORT=1234; public static void main(String args[]) { String hostname; int port=DEF_PORT; if(args.length>0) { hostname=args[0]; try{} catch(Exception e){ port =Integer.parseInt(args[1]); } } else { hostname="127.0.0.1"; }

6. DEMO GIAO THC UDP


// Chng trnh Client try{ dc=InetAddress.getByName(hostname); InetAddress

BufferedReader userInput=new BufferedReader(new InputStreamReader(System.in)); DatagramSocket ds =new DatagramSocket(port); while(true){ String line=userInput.readLine(); if(line.equals("exit"))break; byte[] data=line.getBytes(); DatagramPacket dp=new DatagramPacket(data,data.length,dc,port); ds.send(dp); dp.setLength(50505);

6. DEMO GIAO THC UDP


// Chng trnh Client 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);}} }

6. DEMO GIAO THC UDP


// Chng trnh Server import java.net.*; import java.io.*; public class UDPServer1 { public final static int DEF_PORT=1234; // phuong thuc doi sang chuoi vua hoa vua thuong private static String VuaHoaVuaThuong(String s3) { int k =0, i; char c; String st3=""; k = s3.length(); for(i=0;i<k;i++) { c = s3.charAt(i); if(c>='A'&& c<='Z') c = (char) (c + 32); else if (c>=a'&& c<=z') c=(char) (c-32); // Noi vao chuoi moi st3 st3=st3+c; } return st3; }

6. DEMO GIAO THC UDP


// Chng trnh Server
public static void main(String args[]) { int port=DEF_PORT; try{ } catch(Exception e){ port =Integer.parseInt(args[1]); } try{ DatagramSocket ds =new DatagramSocket(port); DatagramPacket dp=new DatagramPacket(new byte[50505],50505); while(true){ ds.receive(dp); ByteArrayInputStream bis =new ByteArrayInputStream(dp.getData()); BufferedReader dis =new BufferedReader(new InputStreamReader(bis));

// Chng trnh Server

6. DEMO GIAO THC UDP


String s0=dis.readLine(); System.out.println(s0); // s.toUpperCase(); String s=VuaHoaVuaThuong(s0); 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); } catch(IOException e) { System.err.println(e); }

Ht !!!

You might also like