Professional Documents
Culture Documents
LaptrinhSocketUDP 7
LaptrinhSocketUDP 7
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
* 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.
+ 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.
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.
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
}catch(IOException e){System.err.println(e);}
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.
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
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
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
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();
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);
Ht !!!