You are on page 1of 12

Lp trnh mng

Nhng ch trong phn ny bao gm: _Socket l g _Bn c th lm g vi mt socket _S khc bit gia TCP/IP,UDP/IP v Multicast Socket _Servers v Clients lin lc qua socket nh th no _Cch to 1 server n gin

Gii thiu :
Internet l s kt ni cc my vi nhau. Mt trong nhng kha cnh th v nht ca Java , n kt hp cht ch m hnh nn tng d s dng cho nhng kt ni mng c th hc lp trnh mng m khng cn nghin cu nhiu nm. iu ny m ra mt lp mi hon ton ca nhng ng dng i vi lp trnh vin

Socket l g ?
M hnh Java socket c ngun gc t BSD (UNIX) socket ,c gii thiu vo u nhng nm 1980 cho interprocess truyn thng bng cch s dng IP, giao thc Internet. Giao thc Internet ph v tt c cc thng tin lin lc vo cc gi d liu, gii hn kch thc khi d liu c chuyn t ngun ti ch ring bit v c nhn. IP cho php cc thit b nh tuyn, bridges, th cc gi d liu - khng c m bo vn chuyn. Kch thc gi tin c gii hn bi cc giao thc IP n 65535 byte. Trong s ny, ti thiu l 20 byte l cn thit cho tiu gi tin IP, v vy c ti a l 65515 byte c sn cho cc d liu ngi dng trong mi gi. Sockets l mt phng tin s dng IP giao tip gia cc my tnh, socket l mt tnh nng cho php Java tng thch vi cc h thng bng cch ni chuyn n gin vi cc server hin ti bng cch s dng giao thc c xc nh trc ca chng. Cc giao thc ph bin khc c xp lp trn u ca giao thc Internet. Vn chng ta tho lun trong chng ny l User DataGram Protocol v Transmission Control Protocol (TCP). Cc ng dng c th s dng hai giao thc giao tip quamng, thng bng cch xy dng cc giao thc b sung trn c s TCP hoc UDP.

a ch Internet :
Cc a ch Internet c ch tc trong Java bng cch s dng lp InetAddress. InetAddress ch h thng tn min (DNS) tra cu v o ngc tra cu, a ch IP c th c xc nh bi tn my ch hoc cc a ch IP th. InetAddress cung cp phng php getByName (), getAllByName (), getLocalHost (), getAddress (),

a ch IP :
a ch IP l mt s 32-bit, thng c biu din nh l mt "t" ca bn s 8-bit c phn cch bi cc du chm. Chng c t chc thnh cc lp (A, B, C, D, v E) c s dng nhm s lng cc my ch khc nhau trong mt chng trnh nh s th bc. Lp A : Bao gm t 1.0.0.0 n 126.255.255.255, khong 16 triu a ch IP trong mt lp domain A Lp B : Bao gm t 128.1.0.0 n 191.254.255.255, khong 64 ngn a ch IP trong mt lp domain B Lp C : Bao gm t 192.0.1.0 n 223.255.254.255, 256 a ch IP trong mt lp domain C Lp D : Bao gm t 224.0.0.1 to 239.255.255.255, biu th cc nhm multicast Lp E : Bao gm t 240.0.0.0 to 254.255.255.255, dnh cho vic s dng trong tng lai a ch IP 127.0.0.1 l c bit, v c dnh ring i din cho loopback hoc a ch "localhost".

Port number S cng ca mt gi tin IP c quy nh nh mt s nguyn khng du 16-bit.iu ny c ngha l s cng hp l nm trong khong t 1 ti 65535.(Port 0 s c dnh ring v khng th c s dng). Java khng c bt k loi d liu khng du, kiu d liu short ca Java l 16 bit, nhng phm vi ca n l -32768 n 32767 v n l mt kiu c du. Nh vy,shortl khng ln t chc mt s cng, do , tt c cc lp c s dng hoc tr li mt s cng phi i din cho s cng nh mt int. Trong JDK 1.1, s dng mt int vi gi tr ln hn 65535 s to ra mt IllegalArgumentException. Trong JDK 1.0.2 v trc , gi tr ln hn 65.535 b ct bt v ch 16 bit th t thp c s dng. S cng t 1 n 255 c dnh ring ch IP cho cc dch v ni ting.Mt dch v ni ting l mt dch v c trin khai thc hin rng ri, ph bin.Nu bn kt ni n cng 80 ca mt host, bn c th tm thy mt my ch HTTP. Trn nhng my UNIX, nhng cng t hn 1024 l c quyn v ch c th b rng buc bi ngi dng gc. iu ny l mt ngi s dng ty trn mt h thng a ngi dng khng th mo danh cc dch v ni ting nh TELNET (port 23), to ra mt vn an ninh. Windows khng c hn ch , nhng bn nn chng trnh nh th n lm nh vy ,cc ng dng ca bn s lm vic trn nn tng

Client/Server Computing
Bn c th s dng ngn ng Java giao tip vi h thng tp tin t xa bng cch s dng m hnh client/server.Mt server lng nghe cc yu cu kt ni t client qua mng hoc thm ch t cng mt my.Client bit lm th no kt ni vi server thng qua mt a ch IP v s cng.Sau khi kt ni, server c yu cu gi ca client v p ng mt cch thch hp.Bng cch ny, cc ng dng c th c chia nh thnh cc nhim v c th c thc hin ti cc a im ring bit. Cc d liu c gi qua li trn mt socket c th l bt c iu g bn thch. Thng thng, client s gi mt yu cu thng tin, hoc yu cu x l n server, thc hin mt nhim v hoc gi d liu tr li. Bn c th, v d, t mt SQL trn server v cho mi ngi ni chuyn vi n thng qua mt chng trnh "chat" client n gin. IP v cng ca server ni chung l ph bin v qung co khch hng bit ni tm thy dch v. Ngc li, s cng trn my khch bn thng c phn b t ng bi nhn. Nhiu giao thc c s dng trn Internet (v d HTTP) c thit k iu khin t dng lnh. Chng gi yu cu v p ng li thng qua mng trong vn bn n gin. Mt trong nhng cch d nht tr nn quen thuc vi lp trnh mng v / hoc cc

giao thc c ths dng cc ng dng TELNET "ni chuyn" trc tip n mt my ch t dng lnh. giao thc c th l s dng cc ng dng TELNET "ni chuyn" trc tip n mt my ch t dng lnh. User Datagram Protocol (UDP) UDP cung cp mt h thng phn phi gi tin khng ng tin cy c xy dng trn u ca giao thc IP. Cng nh IP, mi gi tin l mt c nhn, v c x l ring bit. Bi v iu ny, s lng d liu c th c gi trong mt gi tin UDP c gii hn v s lng c th c cha trong mt gi tin IP duy nht. Do , mt gi tin UDP c th cha ti a l 65507 byte (y l cc gi tin IP byte kch thc 65.535 tr i cc tiu IP ti thiu l 20 byte v tr i cc tiu UDP 8-byte). Gi d liu UDP c th n khng c trt t hoc khng n .Cc gi khng c bt k thng tin ca gi tin trc hoc sau. Ngi nhn khng c thng tin v cc gi tin, do , ngi gi khng bit rng vic truyn ti c thnh cng khng .UDP khng c quy nh kim sot dng chy ca cc gi tin c th c nhn nhanh hn chng c th c s dng.Chng ti gi y l loi giao tip khng kt ni bi v cc gi khng c mi quan h vi nhau v khng c bo nu c mt mt. a ch IP v cng ch c ng gi trong mi gi UDP. Hai thng s ny l xc nh ngi nhn v c dng bi h iu hnh c bn cung cp gi tin n mt tin trnh c th (ng dng) Chng ta c th v UDP nh vic gi mt l th . Bn vit ch ci ( l cc d liu bn s gi); l th bn trong mt phong b (gi UDP), a ch phong b (s dng a ch IP v s cng), t a ch tr li ca bn trn phong b (a ch IP v s cng cc b) v sau bn gi th. Ging nh mt bc th thc s, bn khng c cch no bit liu mt gi tin UDP c c nhn. Nu bn gi l th th hai mt sau khi gi l th u tin, l th th hai c th nhn c trc l th u tin. Hoc, l th hai khng bao gi c th c nhn Vy ti sao s dng UDP nu n khng ng tin cy? C 2 nguyn do l: tc v chi ph . Gi tin UDP hu nh khng c chi ph - bn ch cn gi sau qun chng i.V chng nhanh, v khng c s tha nhn cn thit cho mi gi tin.Hy ghi nh cc mc khng tin cy m chng ta ang ni.i vi tt c cc mc ch thc t, mt Ethernet b ph v nu c nhiu hn khong 2% ca tt c cc gi d liu b mt. V vy, khi chng ta ni khng ng tin cy, s mt mt trong trng hp xu nht l rt nh. UDP thch hp cho nhiu dch v mng m khng yu cu vic giao hng c m bo.Mt v d ca vic ny l mt thi gian dch v mng. Hy xem xt mt thi gian

khng tt iu a ra mt gi tin UDP mi giy v vy nhng my tnh trn mng LAN c th ng b ha ng h ca chng. Nu mt gi tin b mt, n khng phi l vn ln - mt trong nhng gi tin tip theo s n trong mt giy khc v s cha tt c cc thng tin cn thit hon thnh nhim v. S dng ph bin ca UDP trn mng l trong tr chi nhiu ngi s dng, v tr ca mt ngi chi c gi nh k.Lp li, nu mt v tr cp nht b mt, th v tr cp nhp tip theo s cha tt c cc thng tin cn thit. Mt lp rng ri ca cc ng dng c xy dng trn UDP, s dng giao thc trc tuyn.Vi cc giao thc truyn, nhn d liu trong thi gian thc l kh quan trng hn l m bo giao hng.V d v cc giao thc truyn ti thi gian thc l RealAudio v RealVideo tng ng cung cp dng d liu thi gian thc v video qua Internet. L do mt giao thc truyn ti mong mun trong nhng trng hp ny l bi v nu mt gi b mt m thanh hoc video, n tt hn nhiu cho client thy iu ny nh ting n hay "rch" trong m thanh hoc hnh nh hn l c mt lc ngp ngng trong khi cc phn mm client dng pht li, yu cu cc d liu b mt t my ch.

To UDP Servers
to mt server UDP ta lm nh sau: 1. To mt DatagramSocketnh km 1 port
int port = 1234; DatagramSocket socket = new DatagramSocket(port);

2. Phn b khng gian cha cc gi n v to 1 th hin caDatagramPacket cha d liu n


byte[] buffer = new byte[1024]; DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

3. Block cho n khi mt gi c nhn , v sau gii nn thng tin bn cn t gi

// Block on receive() socket.receive(packet); // Find out where packet came from // so we can reply to the same host/port InetAddress remoteHost = packet.getAddress(); int remotePort = packet.getPort(); // Extract the packet data byte[] data = packet.getData();

Cc my ch c th x l d liu m n nhn c t my khch, v a ra tr li thch hp p ng yu cu ca client.

To UDP Clients
Vit m cho client UDP tng t nh nhng g chng ta lm cho mt my ch.Mt ln na, chng ta cn mt DatagramSocket v DatagramPacket. S khc bit duy nht l chng ta phi xc nh a ch ch vi mi gi tin, v vy hnh thc ca vic khi to DatagramPacket c s dng y xc nh my ch ch v s cng. Tt nhin, sau chng ta gi gi tin thay v nhn gi tin.
1. Trc tin phn b khng gian cha d liu chng ta ng gi v to mt

hin th ca DatagramPacket cha d liu


byte[] buffer = new byte[1024]; int port = 1234; InetAddress host = InetAddress.getByName("magelang.com"); DatagramPacket packet = new DatagramPacket(buffer, buffer.length,host, port);

2. To 1 DatagramSocket v gi gi tin s dng socket ny

DatagramSocket socket = new DatagramSocket(); socket.send(packet);

Khi to DatagramSocket khng c i s s phn b mt cng cc b t do s dng. Bn c th tm ra s cng cc b c phn b cho socket ca bn, cng vi cc thng tin khc v socket ca bn nu cn thit.
// Find out where we are sending from InetAddress localHostname = socket.getLocalAddress(); int localPort = socket.getLocalPort();

Client sau ch i tr li t my ch.Nhiu giao thc yu cu cc my ch tr li ti s host v cng m khch hng c s dng, v vy khch hng c th gi socket.receive () ch i thng tin t my ch.

Transmission Control Protocol (TCP)


Chng ta thy trong phn trc rng UDP cung cp mt h thng phn phi gi tin khng ng tin cy - mi gi tin l mt c nhn, v c x l mt

cch ring bit. Cc gi tin c th n khng trt t hoc khng n.Ngi nhn khng c thng tin v cc gi tin s gi n, do , ngi gi khng bit rng vic truyn ti thnh cng.Khng c quy nh kim sot dng chy cc gi tin c th c nhn nhanh hn chng c th c s dng.Kch thc gi tin c gii hn bi cc giao thc IP c bn. TCP, Transmission Control Protocol, c thit k gii quyt nhng vn ny. Cc gi tin TCP thnh thong b mt, ging nh cc gi tin UDP. S khc bit l cc giao thc TCP ch yu cu truyn li m bo rng tt c cc gi n, v theo di cc s th t gi tin n c m bo rng chng c giao theo ng th t. Trong khi UDP yu cu chng ta gi cc gi d liu ca mng byte, vi TCP chng ta c th s dng cc dng cng vi cc tp tin Java tiu chun I / O. Khng ging nh UDP, Transmission Control Protocol, TCP, thit lp mt kt ni gia hai thit b u cui.Thng lng c thc hin thit lp mt socket, v socket vn m trong sut thi gian ca vic lin lc.Ngi nhn tha nhn mi gi tin, v vic truyn li gi tin c thc hin bi giao thc nu cc gi d liu b mt hoc n khng trt t. Bng cch ny, TCP c th cho php mt ng dng gi d liu cng nhiu nh mong mun v khng phi chu gii hn kch thc gi tin IP. TCP chu trch nhim ph v d liu thnh cc gi, vng m d liu, gi li cc gi b mt hoc cc gi tin khng c trt t , tha nhn v kim sot t l lu lng d liu bng cch ni vi ngi gi tng hoc gim tc m ng dng khng bao gi nhn c nhiu d liu hn n c th x l. Mt ln na, khng ging nh UDP, cc my ch ch v s cng l khng xc nh mt ngi nhn ca mt kt ni TCP. C nm yu t ring bit m lm cho mt kt ni TCP c o: + a ch IP ca server + a ch IP ca client + S cng ca server + S cng ca client + Giao thc (UDP, TCP/IP, ...) ni m mi socketclient yu cu ch nh mt s cng duy nht trong khi s cng ca my ch lun lun l nh nhau. Nu bt k ca nhng con s ny l khc nhau, socket l khc nhau. Mt my ch do c th lng nghe mt v ch mt cng, v ni chuyn vi nhiu client cng mt lc.

V vy mt kt ni TCP ging vi mt kt ni in thoi hn l mt l th , bn cn bit khng ch s in thoi ( a ch IP ) ,m in thoi cn c th c chia s bi nhiu ngi v tr . Bn cng cn bit tn ngi bn mun gp u dy bn kia ( s cng). Tng t c th c thc hin xa hn mt cht. Nu bn khng nghe nhng g ngi khc ni, mt yu cu n gin ("Ci g?") s gi ngi u dy bn kia gi li hoc lp li cc cm t. V, kt ni vn cn m cho n khi mt ngi no gc my.

To TCP Servers
to TCP server ta lm nh sau: 1. To mt ServerSocket nh km vi 1 s cng
ServerSocket server = new ServerSocket(port);

2. Ch cho kt ni t yu cu kt ni ca client n cng


// Block on accept() Socket channel = server.accept();

Bn s c c 1 i tng socket nh mt kt qu ca kt ni 3. Nhp v xut dng kt ni vi socket


out = new PrintWriter(channel.getOutputStream()); reader = new InputStreamReader(channel.getInputStream()); in = new BufferedReader (reader);

By gi bn c th c v vit n socket , do kt ni vi client


String data = in.readLine(); out.println("Hey! I heard you over this socket!");

Khi mt my ch gi phng thc accept() ca ServerSocket , lung server chnh b block cho n khi mt client kt ni vi server ,sau n b ngn cn vic chp nhn kt ni client tip tc cho n khi my ch x l yu cu ca client xong. iu c hiu nh mt vng lp server , v vy phng thc main server x l hon ton mi yu cu ca client trc khi chuyn sang yu cu tip theo. Vng lp server tt khi nhng yu cu cn mt khong thi gian ngn nht nh . V d yu cu ngy gi thc ti t ngy gi ca sever

To TCP Clients
to mt TCP client ta lm nh sau:

1. To mt i tng socket nh km vi 1 host , port t xa


Socket client = new Socket(host, port);

Khi khi to tr v ta c 1 kt ni 2. Nhp v xut dng kt ni vi socket


out = new PrintWriter(client.getOutputStream()); reader = new InputStreamReader(client.getInputStream()); in = new BufferedReader (reader);

By gi bn c th c v vit n socket , do , kt ni vi server


out.println("Watson!" + "Come here...I need you!"); String data = in.readLine();

Ch : Servers phi c khi to trc clients

Multicast Protocol TCP v UDP u l giao thc unicast, c mt my nhn v 1 my gi, gi multicast l mt loi t bit ca gi UDP, nhng trong khi khi UDP ch c mt im n v mt my nhn, cc gi tin multicast c th c nhiu my nhn Multicast kh t bit trong cch truyn tin, vi cc gi tin truyn i, mi my ch trn mng nhn c gi tin. Vi multicast, ch nhng my ch c ng k trong vic nhn cc gi tin th mi nhn c n

iu ny tng t nh cch mt AWTEvent v n lng nghe hnh ng trong AWT, cc AWTEvent ch c gi n ngi nghe ng k, mt gi Multicast ch gi cho cc thnh vin ca nhm,tuy nhin unicast ch c gi ring cho mi ngi nghe,nu c 1 ngi nghe th s c 2 s kin c gi i, vi MulticastSocket ch c mt ngi gi v nhn bi nhiu ngi MulticastSocket l mt lp con ca DatagramSocket c kh nng m rng lm vic v ri khi mt mt nhm multicast. Mt nhm multicast bao gm a ch multicast v mt s cng, s khc bit duy nht gia UDP v muticast l nhm multicast i din bi a ch internet lp D, cng nh c cng well-know cho dch v mng, c nhng nhm dnh ring, nhm wellknow multicast cho dch v mng multicast Khi mt ng dng ng k cho mt nhm multicast(host/port), n nhn c cc gi tin c gi bi cc my ch khc cho nhm , nh tt c thnh vin ca nhm , nhiu ng dng c th ng k cho mt nhm multicast. Nhiu ng dng c th ng k cho mt nhm Multicast ng thi v tt c s c nhn cc gi tin ca nhm Khi mt ng dng gi mt thng ip cho mt nhm multicast, tt c cc ngi nhn ng k vi my ch v cng nhn c thng bo. Cc ng dng ko

cn phi l thnh vin ca nhm multicast gi tin nhn .

A Multicast Application V bn cht multicast khng ph hp vi m hnh client/server. Mt server ko bit c bao nhiu client c ng k v nhm multicast. s dng giao tip Multicast , chng ta tc hin nh sau u tin khi to mt MulticastSocket
InetAddress group = InetAddress.getByName ("224.1.2.3"); // Binds port number on our side MulticastSocket socket = new MulticastSocket(port); // Binds multicast address on our side // (Only needed to receive packets, not to send) socket.joinGroup(group);

tip theo, chng ta to mt DatagramPacket v gi n qua socket. Cng nh i vi UDP, gi tin ny s gi n tt c cc my ch tham gia vo nhm
byte[] buffer = new byte[1024]; // Addressed to the group, port DatagramPacket packet = new DatagramPacket(buffer, buffer.length, group, port); socket.send(packet);

nu chng ta nhn nhng gi tin multicast trn cng mt socket ny


byte[] response = new byte[1024]; DatagramPacket packet = new DatagramPacket(response, response.length); socket.receive(packet);

Khi chng ta khng cn mun nhn cc gi tin t mt nhm. Chng ta phi ri khi nhm socket.leaveGroup(group);

thi gian sng hay TTL l 8 bit byte dng, c gn cho mi gi multicast, i vi tng tuyn, gi tr TTL c gi trong TLL gim i, khi n t n ko, th gi tin b loi b

You might also like