You are on page 1of 3

12/11/2013

[JAVA] Lp trnh mng s dng giao thc UDP

------oo00oo------Cho mng bn n vi www.nhatminhcntt.come.vn . Chc bn lun v Trang Ch Lp Trnh C# Khc Ci t - Lp rp Th thut my tnh SQL Tin hc vn phng Ghost - Boot Access Thit K Web a phng tin ha

Cng Ngh Thng Tin

[JAVA] Lp trnh mng s dng giao thc UDP


Vit bi Ng Nguyn Nht Minh

ng Nhp

Th hai, 16 Thng 4 2012 13:44 1. Tng quan v giao thc UDP UDP (User Datagram Protocol) l mt trong nhng giao thc ct li ca giao thc TCP/IP. Dng UDP, chng trnh trn mng my tnh c th gi nhng d liu ngn c gi l datagram ti my khc. UDP khng cung cp s tin cy v th t truyn nhn m TCP lm; cc gi d liu c th n khng ng th t hoc b mt m khng c thng bo. Tuy nhin UDP nhanh v hiu qu hn i vi cc mc tiu nh kch thc nh v yu cu kht khe v thi gian. Do bn cht khng trng thi ca n nn n hu dng i vi vic tr li cc truy vn nh vi s lng ln ngi yu cu. 1.1. Cng UDP dng cng cho php cc giao tip gia cc ng dng din ra. Cng dng 16 bit nh a ch, v vy s ca cng nm trong khon 0 n 65.535. Cng 0 c dnh v khng nn s dng. Cng t 1 n 1023 c gi l cng well-known v trn cc h iu hnh ta Unix, vic gn kt ti mt trong nhng cng ny i hi quyn root. Cng 1024 n 49.151 l cng ng k. Cng t 49.152 n 65.535 l cc cng tm, c dng ch yu bi client khi lin lc vi server. 1.2. Cu trc gi UDP l giao thc hng thng ip nh nht ca tng giao vn hin c m t trong RFC 768 ca IETF. Trong b giao thc TCP/IP, UDP cung cp mt giao din rt n gin gia tng mng bn di (th d, IPv4) v tng phin lm vic hoc tng ng dng pha trn. UDP khng m bo cho cc tng pha trn thng ip c gi i v ngi gi cng khng c trng thi thng ip UDP mt khi c gi (V l do ny i khi UDP cn c gi lUnreliable Datagram Protocol). UDP ch thm cc thng tin multiplexing v giao dch. Cc loi thng tin tin cy cho vic truyn d liu nu cn phi c xy dng cc tng cao hn. Source port : Trng ny xc nh cng ca ngi gi thng tin v c ngha nu mun nhn thng tin phn hi t ngi nhn. Nu khng dng n th t n bng 0. Destination port : Trng xc nh cng nhn thng tin, v trng ny l cn thit. Length: Trng c di 16 bit xc nh chiu di ca ton b datagram: phn header v d liu. Chiu di ti thiu l 8 byte khi gi tin khng c d liu, ch c header. Checksum: Trng checksum 16 bit dng cho vic kim tra li ca phn header v d liu. Phng php tnh checksum c nh ngha trong RFC 768. Do thiu tnh tin cy, cc ng dng UDP ni chung phi chp nhn mt mt, li hoc trng d liu. Mt s ng dng nh TFTP c nhu cu phi thm nhng k thut lm tin cy c bn vo tng ng dng. Hu ht cc ng dng UDP khng cn nhng k thut lm tin cy ny v i khi n b b i. Streaming media, game trc tuyn v voice over IP (VoIP) l nhng th d cho cc ng dng thng dng UDP. Nu mt ng dng i hi mc cao hn v tnh tin cy, nhng giao thc nh TCP hoc m erasure c th dng thay. Thiu nhng c ch kim sot tc nghn v kim sot lung, cc k thut da trn mng l cn thit gim nguy hiu ng c tc nghn dy chuyn do khng kim sot, t l ti UDP cao. Ni cch khc, v ngi gi gi UDP khng th pht hin tc nghn, cc thnh phn da trn mng nh router dng hng i gi (packet queueing) hoc k thut b gi nh l nhng cng c gim ti ca UDP. Giao thc Datagram Congestion Control Protocol (DCCP) c thit k nh mt gii php cho vn bng cch thm hnh vi kim sot tc nghn cho thit b u cui cho cc dng d liu UDP nh streaming media. Mc d tng lng lu thng ca UDP trn mng thng ch vi phn trm, nhng c nhiu ng dng quan trng dng UDP, bao gm DNS, SNMP, DHCP v RIP. Trong Java h tr lp trnh mng s dng giao thc UDP thng qua 2 lp java.net.DatagramPacket java.net.DatagramSocket 2. Lp DatagramPacket 2.1. Gii thiu 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 bnghai byte nn s byte trong datagram ti a s l 65536 tr i tm 8 byte dnh cho phn thng tin header. Trong Java, mt datagram UDP c biu din bi lp DatagramPacket : public final class DatagramPacket extends Object Mr Minh Thm d Tn ng nhp Mt khu Lu mt khu!

ng nhp
Bn qun Mt khu? Bn qun Tn ng nhp? ng k

nh gi WebSite p Xem c Xu

Bnh chn Cc kt qu

H tr Yahoo

Thng k

nhatminhcntt.byethost17.com/index.php/khac/ghost-boot/143-java-lp-trinh-mng-s-dng-giao-thc-udp

1/3

12/11/2013

[JAVA] Lp trnh mng s dng giao thc UDP


Hm Nay Hm Qua Tun Ny Tun Ri Thng Ny Thng Ri Tt c 70 91 161 383 714 1732 51403

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.2. Constructor 2.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 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. V du: Xy dng mt datagramPacket nhn d liu c ln 9999 byte byte b[] = new byte[9999]; DatagramPacket dp = new DatagramPacket(b, b.length); 2.2.2. Constructor gi cc 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 tinc in y d liu vi chiu di l length byte bt u t v tr offset hoc v tr 0 nuoffset khng c s dng. V d gi i mt xu k t n mt host khc nh sau: n Code public static void main(String[] args) { String s = DEMO UDP- http://www.vi-infotech.com; byte b[] = s.getBytes(); try { InetAddress id = InetAddress.getByName(www.vi-infotech.com); int port = 7; DatagramPacket dp = new DatagramPacket(b, b.length, id, port); //Gi gi tin } catch (Exception e) { System.err.println(e); } } Cng vic kh khn nht trong vic to ra mt i tng DatagramPacket chnh l vicchuyn i d liu thnh mt mng byte. on m trn chuyn i mt xu k t thnhmt 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

Hm nay: 12 Thng 11, 2013

Bi Vit Xem Nhiu

LP TRNH SOCKET (Lp trnh mng bng Java) Java Mini Chat (Client/Server vs Client to Client) [JAVA] Lp trnh mng s dng giao thc UDP 3D-Album 3.29 full v hng dn s dng XtraReport ca DevExpress Chng Trnh Cht Bng Java Microsoft SQL Server 2012 Full Trn B Microsoft Office 2010 (32bit v 64bit)

Bi Vit Mi Nht

Mn thi: Mng My Tnh Kha lc quan h R Chuyn i cc kiu d liu trong C# XtraReport ca DevExpress 1. Hng dn chuyn i t nh dng "dd/MM/yyyy" sang "MM/dd/yyyy" Oracle ng gi ng dng bng Visual Studio 2005 n hin ct d liu trong DataGridView

public InetAddress getAddress() public int getPort()

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 Phng thc getPort() tr v mt s nguyn xc nh cng trn host xa. Nu datagramc nhn t Internet th cng ny l cng trn host gi gi tin i.

public Phng thc ny tr v mt i tng SocketAddress cha a ch IP v s hiu SocketAddress() cng cahost xa public byte[] getData() public int getLength() public getOffset() 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 Phng thc getLength() tr v s bytes d liu c trong mt datagram Phng thc ny tr v v tr trong mng c tr v bi phng thc getData() m t d liu trong datagram xut pht

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, 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

public void Phng thc setAddress() thay i a ch ca my m ta s gi gi tin setAddress(InetAddress ti. iu ny scho php ta gi cng mt datagram n nhiu ni nhn dc) public void setPort(int port) public void setLength(int length) 3. Lp DatagramSocket Phng thc ny thay i s hiu cng gi ti ca gi tin. Phng thc ny thay i s byte d liu c th t trong vng m.

nhatminhcntt.byethost17.com/index.php/khac/ghost-boot/143-java-lp-trinh-mng-s-dng-giao-thc-udp

2/3

12/11/2013
3. Lp DatagramSocket

[JAVA] Lp trnh mng s dng giao thc UDP

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 final 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 nhiuDatagramSocket c s dng gi v nhn cc gi tin UDP. N cung cp cc phngthc 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 rakhng phong ta c s dng 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 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. 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 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 ByteArrayInputStream bis = new ByteArrayInputStream(dp.getData()); DataInputStream dis=new DataInputStream(bis); 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 truynvo mng byte. Nu mun gi thng tin phc p th ta cng bit a ch v s hiucng 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. 6. V d minh ha Vit chng trnh theo m hnh Client/ Server: Client thc hin cc thao tc sau: Client gi mt xu k t cho server Client nhn thng tin phn hi t Server v hin th Server thc hin thao tac sau Server nhn d liu t Client Server bin i d liu t Client gi ln dng su thnh su ton ch hoa v gi tr li Client

Donwload m ngun ti y

Copyright 2012 Bn quyn thuc v www.nhatminh.come.vn . Thit k v pht trin bi: Ng Nguyn Nht Minh

nhatminhcntt.byethost17.com/index.php/khac/ghost-boot/143-java-lp-trinh-mng-s-dng-giao-thc-udp

3/3

You might also like