Professional Documents
Culture Documents
M ot de passe
Introduction au sockets
Par
SoftDeath
Mise jour : 21/09/2009 (Historique) Difficult : Difficile Bienvenue dans mon tout premier mini-tutoriel consacr aux sockets en langage Java. On ne va pas tout apprendre sur les sockets mais tudier le plus important concernant ces classes du rpertoire java.net.
Avant de vous lancer dans la lecture de ce tutoriel, les deux premires parties de cysboy sur le langage Java ainsi que la lecture de celui sur les et les flux d'entres et sorties (1/2) sont primordiales pour bien suivre le cours !
Je vous recommande galement de lire le chapitre de Dalshim bien matriser la fermeture de vos .
si vous voulez
Les sockets servent communiquer entre deux htes appels Client / Serveur l'aide d'une adresse IP et d'un port que j'appelle prise ; ces sockets permettront de grer des flux entrant et sortant afin d'assurer une communication entre les deux (le client et le serveur), soit de manire fiable l'aide du protocole TCP/IP, soit non fiable mais plus rapide avec le protocole UDP. Nous allons tudier le premier mode, le mode TCP/IP Voici ce qu'on peut raliser l'aide des sockets :
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html 1/25
24/01/12
des jeux en ligne ; des systmes distribus ; des espaces comme MSN Messenger, Yahoo Messenger, ; des applications comme BitComet permettant de grer les fichiers .torrent que vous connaissez ; et bien d'autres choses.
Les sockets sont utiliss dans plusieurs autres langages, tels que :
le langage C : ( lien vers un tutoriel) ; le langage C++ : (lien vers un autre tutoriel) ; le langage PHP : (lien vers un troisime tutoriel) ; l'Action Script : (aller lire le tutoriel) ; le Erlang : (lien vers le tuto concern) ; et bien d'autres.
Lire les parties histoire et dfinitions de tutoriels ci-dessus ne vous fera pas de mal. Ne tardons pas et commenons.
Emploi du temps de bb
Avec le Club Nestl Bb, dcouvrez des outils malins pour organiser le quotidien de votre bb Cliquez ici
Devenez propritaire !
Jusquau 19 fvrier 2012, profitez de conditions exceptionnelles pour habiter ou investir Cliquez ici
Rcuprer une adresse IP avec InetAddress Qu'est-ce qu'un socket ? change de message TP : un mini-chat entre le client et le serveur !
Retour en haut
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html
2/25
24/01/12
: elle retourne un objet qui contient l'adresse IP de la machine locale. : elle retourne un objet qui contient l'adresse IP de la machine dont le nom est pass en param tre. : elle retourne un tableau d'objets qui contient l'ensemble d'adresses IP de la machine qui correspond au nom pass en param tre.
: elle retourne le nom de la machine dont l'adresse est stocke dans l'objet. : elle retourne l'adresse IP stocke dans l'objet sous forme d'un tableau de 4 octets. : elle retourne un String qui correspond au nom de la machine et son adresse.
Et pour terminer un petit exemple : Code : Java - S lectionner ip mo ip mo j an .n Ade ; a .e Ie d j an .nn no Ecpin a .e Uko H e o; A e ae{ d g ai vi mi(tig]zr){ c od anSrn[ eo IeAdesLclArse; ntdrs oaedes IeAdesSrerdes; ntdrs evuArse { LclArse= oaedes IeAdesgtoaHs(; ntdrs.eLclot) Sse.u.rnl(Larselcl ytmotpitn"'des oae et:"LclArse) s +oaedes ; Srerdes= evuArse IeAdesgtyae"w.ieueocm) ntdrs.eBNm(wwstdzr.o"; Sse.u.rnl(Larsed ytmotpitn"'des u srerd st d zr et:"Srerdes) evu u ie u o s +evuArse; }c c (nnwHsEcpine { a h Ukonotxeto ) } epittcTae) .rnSakrc(;
pbi ca lc l
pbi lc
} }
Et le rsultat est : Code : Console - S lectionner Larselcl et:sfdah29247.7 'des oae s otet/3.5.817 Larsed srerd st d zr et:wwstdzr.o/0282913 'des u evu u ie u o s w.ieueocm8.4.1.2
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html
3/25
24/01/12
Fastoche, hein ?
La classe l'oublier !
, tchez de ne pas
Nous savons maintenant comment rcuprer l'adresse IP de notre machine ou d'une machine distante, que diriez-vous si l'on l'utilisait pour crer notre tout premier socket ? C'est parti Retour en haut
En outre, java.net comprend la classe , qui met en oeuvre une sorte de prise que les serveurs peuvent utiliser pour couter et accepter les connexions des clients. Ce qui nous donne : Code : Java - S lectionner S eSce e ok ok e e =n S eSce( m op ) ce e e ok n e _o ;
Ainsi on obtient un objet de la classe cre sur n'importe quel port libre.
Il existe deux autres constructeurs ; l'un a deux paramtres, le premier est bien s r le numro de port et le , voyez :
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html 4/25
24/01/12
nbr_max est le nombre maximal de connexions traites simultanment. Par exemple au-del de cinq tentatives de connexion conscutives autorises, les connexions sont refuss. Pour le second constructeur il suffit de spcifier l'adresse locale du serveur. Code : Java - S lectionner SreSce scesre =n evrokt oktevr e SreSce(ue_otnrm ,des_oae; evroktnmrpr,b_a arselcl)
Quant au client, celui-ci connat le nom de la machine sur laquelle le serveur est en excution et le numro de port sur lequel il coute. Le client va demander une connexion au serveur en s'identifiant avec son adresse IP ainsi que le numro de port qui lui est li. Pour cela Java.net fournit une classe qui met en oeuvre un c t d'une connexion bidirectionnelle entre votre programme Java et un autre programme sur le rseau. La classe Socket se trouve au sommet d'une plateforme de charge de mise en oeuvre en cachant les dtails d'un systme particulier de votre programme Java. En utilisant la classe au lieu de compter sur du code natif, vos programmes Java peuvent communiquer sur le rseau en une plate-forme indpendante de la mode. La cration d'un socket pour le client ncessite un des constructeurs suivants : Code : Java - S lectionner Sce sce =n Sce(aa1 prm) okt okt e oktprm, aa2
Le premier paramtre correspond l'identit du client, il peut tre une chaine de caractre ou de type , param2 correspond au numro de port sur lequel on souhaite se connecter sur le serveur. Il est possible galement de spcifier son adresse local comme troisime paramtre et le numro de port local : Code : Java - S lectionner Sce sce =n Sce(des_itne pr_itn, okt okt e oktarsedsat, otdsat arselcl,pr_oae des_oae otlcl)
Aprs tentative de connexion, si tout va bien, le serveur accepte la connexion du client, et reoit un nouveau socket qui est directement li au mme port local. Il a besoin d'une nouvelle prise de sorte qu'elle puisse continuer couter le socket d'origine pour les demandes de connexion, tout t'en satisfaisant les besoins du client connect. Voici comment accepter une connexion d'un client : Code : Java - S lectionner
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html 5/25
24/01/12
Une fois le socket cr, l'attente de connexion provenant du client se fait l'aide de la mthode
La mthode accept() reste bloquante tant qu'elle n'a pas dtect de connexion.
Afin d'viter une attente infinie, il est possible de spcifier un dlai maximal d'attente l'aide d'un mutateur . Si un est une valeur strictement positive, l'appel . Si ce temps expire, une exception de type socket de type ne soit invalide. La lecture de ce . va gnrer une attente maximale gale est leve sans toute fois que la se fait l'aide de l'accesseur
C t client, si la connexion est accepte, une socket est cr et le client peut utiliser la socket pour communiquer avec le serveur. L'tablissement d'une connexion peut lever une exception de type . On va essayer d'tablir une communication. Vous avez tout les lments porte de main, vous pouvez dsormais tablir une connexion, au boulot !
...Ce n'tait pas si difficile que a, voyons la correction Le client et le serveur peuvent prsent communiquer par l'criture ou la lecture de leurs prises.
pbi ca lc l
pbi lc
ai vi mi(tig]zr){ c od anSrn[ eo SreSce scesre ; evrokt oktevr Sce scedsrer; okt oktuevu {
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html
24/01/12
Code : Java - S lectionner ip mo ip mo ip mo ip mo j ai.O cpin a .oIE e o; j an .n Ade ; a .e Ie d j an .ok ; a .e Sce j an .nn no Ecpin a .e Uko H e o; Cin { le ai vi mi(tig]zr){ c od anSrn[ eo Sce sce; okt okt { sce =n okt e Sce(ntdrs.eLclot)20) oktIeAdesgtoaHs(,09; sce.ls(; oktcoe) c c (nnwHsEcpine { a h Ukonotxeto ) epittcTae) .rnSakrc(; c c (Oxeto e { a h IEcpin ) epittcTae) .rnSakrc(;
pbi ca lc l
pbi lc
Vous venez d'tablir votre premire connexion entre un serveur et un client comment envoyer et recevoir des messages.
. Maintenant, voyons
Attention : il ne faut jamais oublier de fermer le socket ! Sinon si vous utilisez le m me port dans un autre programme, ce (l'action de fermer une socket) ne sera plus possible car il (le port) sera occup ! Retour en haut
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html
7/25
24/01/12
change de message
Une fois la connexion tablie et les sockets en possession, il est possible de rcuprer le flux d'entre et de sortie de la connexion TCP vers le serveur. Il existe deux mthodes pour permettre la rcupration des flux : de la classe de la classe . Elle nous permet de grer les flux entrant ; . Elle nous permet de grer les flux sortant.
Ces deux mthodes nous permettent donc de grer les flux en entre et en sortie. En gnral le type d'entre et sortie utilis est et pour la lecture, pour l'criture. Mais on peut utiliser tous les autres flux. En se basant sur l'annexe du tuto Java :
: cette classe permet de lire des caractres partir d'un flux tamponn, afin de faire des lectures plus rapides ; : convertit un flux binaire en flux de caractres : elle convertit un objet de type en objet de type ; : la classe PrintWriter ajoute un flux la possibilit de faire des critures sous forme de texte des types primitifs Java, et des cha nes de caractres.
24/01/12
ip mo ip mo ip mo ip mo ip mo ip mo ip mo ip mo ip mo
j ai. feeRae; a .oB f ded j ai.O cpin a .oIE e o; j ai.n S emed ; a .oIp aRae j ai. i Wie; a .oP n j an .n Ade ; a .e Ie d j an .e eSce; a .e S ok j an .ok ; a .e Sce j an .nn no Ecpin a .e Uko H e o; j ai. i Wie; a .oP n S e e {
pbi ca lc l
pbi lc
ai vi mi(tig]zr){ c od anSrn[ eo SreSce scesre ; evrokt oktevr Sce scedsrer; okt oktuevu BfeeRae i; ufrdedr n Pitrtrot rnWie u; {
scesre =n SreSce(09; oktevr e evrokt20) Sse.u.rnl(L sreret ytmotpitn"e evu s lot d pr "scesre.eLclot); 'cue u ot +oktevrgtoaPr() scedsrer= oktuevu scesre.cet) oktevracp(; Sse.u.rnl(U zr set ytmotpitn"n o 's cnet"; onc) ot=n u e Pitrtrscedsrergtupttem); rnWie(oktuevu.eOtuSra() otpitn"os tscnet zr u.rnl(Vu e onc o !) "; otfuh) u.ls(; scedsrercoe) oktuevu.ls(; scesre.ls(; oktevrcoe) }ac (Oxeto e { c h IEcpin ) } epittcTae) .rnSakrc(;
} }
Code : Java - S lectionner ip mo ip mo ip mo ip mo ip mo ip mo ip mo j ai. feeRae; a .oB f ded j ai.O cpin a .oIE e o; j ai.n S emed ; a .oIp aRae j ai. i Wie; a .oP n j an .n Ade ; a .e Ie d j an .ok ; a .e Sce j an .nn no Ecpin a .e Uko H e o; Cin { le ai vi mi(tig]zr){ c od anSrn[ eo
pbi ca lc l
pbi lc
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html
9/25
24/01/12
Sce sce; okt okt BfeeRae i; ufrdedr n Pitrtrot rnWie u; t { r sce =nw okt e Sce(ntdrs.eLclot)20) oktIeAdesgtoaHs(,09; Sse.u.rnl(Dmned ytmotpitn"ead e cnein) onxo"; i =nwBfeeRae (e n e ufrdedr nw Ipttemedr(oktgtnuSra(); nuSraRae sce.eIpttem)) Srn msaedsat=i.edie) tig esg_itn nraLn(; Sse.u.rnl(esg_itn) ytmotpitnmsaedsat; sce.ls(; oktcoe) }ac (nnwHsEcpine { cth Ukonotxeto ) epittcTae) .rnSakrc(; }ac (Oxeto e { cth IEcpin ) } epittcTae) .rnSakrc(;
} }
et ce
Apr s tablissement de la connexion, le serveur obtient son socket qu'il utilise pour grer le flux sortant l'aide de ; ensuite, l'aide de la mthode on envoie un message au client, on utilise pour vider le tout simplement. Et pour finir on ferme la connexion.
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html 10/25
24/01/12
Aprs avoir obtenu notre socket, on utilise pour rcuprer le flux sortant. La mthode nous permet de lire une chane de caractres. Il existe plusieurs autres mthodes telles : permettant de lire un entier ; permettant de lire un nombre de type
Pour finir, on affiche le message reu et on ferme notre socket. a a l'air trs simple premire vue pour deux htes, mais si l'on veut que plus que deux puissent communiquer entre eux la fois, comment faire ? D'o la ncessit d'utiliser les .
Je pars du principe que vous connaissez ce que sont les threads et comment les utiliser et pourquoi doit-on les utiliser dans nos programme, on va donc attaquer directement la pratique. Le principe d'utilisation des Threads est simple (sera simple si vous suivez attentivement :D). Aprs avoir crer un objet par le serveur, on le place (l'objet) comme paramtre un constructeur de la classe qui implmente la classe ou tend la classe , ds qu'un client souhaite se connecter avec le serveur, un Thread s'occupe de la connexion, il ne sera plus la peine de faire appel au serveur lorsqu'un client souhaite se connecter, tout le boulot sera confi un Thread. Vous commencez comprendre l'utilit des Threads avec le temps vous ne pourrez plus vous en passer. Voyons un petit exemple de connexion Multi-Threads en image et avec un code source toujours :
Code : Java - S lectionner ipr jv.oIEcpin mot aai.O eto ipr jv.e. mot aant*
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html 11/25
24/01/12
pbi ca lc l
S e e
pbi lc
SreSce sce; evrokt okt { sce =n SreSce(09; okt e evrokt20) Tra t=n Tra(e hed e hedn Acpe_let(okt) cetrcinssce); tsat) .tr(; Sse.u.rnl(Msepoer sn p t ytmotpitn"e mlyus ot r s !) "; }c c (Oxeto e { a h IEcpin ) } epittcTae) .rnSakrc(;
} ca l
Acpe_le ce cin
ipee mlmn
Rnal { unbe
piaeSreSce scesre; evrokt oktevr piaeSce sce; okt okt piaeitnrlet=1 n bcin ; pbi Acpe_let(evrokts{ lc cetrcinsSreSce ) scesre =s oktevr ; } pbi vi rn){ lc od u( hl( e{ ie ) sce =scesre.cet) / U okt oktevracp(; / n cin ecne eo lacpe le onc n 'ce Sse.u.rnl(L cin nmr ytmotpitn"e let uo "nrlet "etcnet !) +bcin+ s onc "; nrlet+ bcin+; sce.ls(; oktcoe) } }c c (Oxeto e { a h IEcpin ) epittcTae) .rnSakrc(; } } } {
Code : Java - S lectionner ip mo ip mo j ai.O cpin a .oIE e o; j an .; a .e * Cin { le ai vi mi(tig]zr) c od anSrn[ eo{ Sce sce; okt okt
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html 12/25
pbi ca lc l
pbi lc
24/01/12
t { r sce =nwSce(lclot,09; okt e okt"oahs"20) sce.ls(; oktcoe) }cth(Oxeto e { ac IEcpin ) } epittcTae) .rnSakrc(;
Rsulats : Code : Console - S lectionner Msepoer sn p t ! e mlyus ot r s L cin nmr 1etcnet ! e let ueo s onc L cin nmr 2etcnet ! e let ueo s onc L cin nmr 3etcnet ! e let ueo s onc
Si vous m'avez bien suivis vous ne devriez pas avoir du mal comprendre ce code. Ds que quelqu'un tape la porte, on demande un employer de lui ouvrir la porte, celui-l va le saluer et lui dire bye bye avec socket.close(); s'il ne veut pas parler (communiquer) . Retour en haut
et du ct du client, tte--tte avec le serveur aprs connexion : Code : Console - S lectionner Dmned cnein ead e onxo Cneinaleae l srer atetfcto : onxo tbi vc e evu, uhniiain Ete vtelgn: nrz or oi caau hbns
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html 13/25
24/01/12
Ete vtemtd pse: nrz or o e as caau hbns J si cnet e us onc Vtemsae: or esg slt au L srervu dt:slt e evu os i au Vtemsae: or esg v ? a a L srervu dt:be e ti? e evu os i in t o
Allez au boulot !
J'espre que vous avez au moins essay. Cette solution n'est ni unique ni la meilleure, elle est simple et minimale pour vous montrer comment les doivent tre grs. Voyons la correction :
Code : Java - S lectionner ip mo ip mo j ai.; a .o* j an .; a .e * Acpe_on inipee ce cne o mlmn Rnal{ unbe
pbi ca lc l
piaeSreSce scesre =nl; evrokt oktevr l piaeSce sce =nl; okt okt l pbi Tra t; lc hed 1 pbi Acpe_onxo(evrokts) lc cetrcneinSreSce s{ scesre =s; oktevr s } pbi vi rn){ lc od u( { hl( ie e{ )
cnetr"; once )
t =n Tra(e 1 e hedn Atetfcto(okt) uhniiainsce); t.tr(; 1sat) } }c c (Oxeto e { a h IEcpin ) srer) evu"; Sse.r.rnl(Eru ytmerpitn"rer
14/25
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html
24/01/12
} } }
Code : Java - S lectionner ip mo ip mo ip mo ip mo j an .; a .e * j a i.o cEee Ecpin a . lNS hlmn e o; j a i.cne; a . lSan j ai.; a .o* A hniiainipee e fc o mlmn Rnal { unbe
pbi ca lc l
piaeSce sce; okt okt piaePitrtrot=nl; rnWie u l piaeBfeeRae i =nl; ufrdedr n l piaeSrn lgn="eo,ps = nl; tig oi zr" as l pbi boenatetfe =fle lc ola uhniir a ; pbi Tra t; lc hed 2 pbi Atetfcto(okts{ lc uhniiainSce ) sce =s okt ; } pbi vi rn){ lc od u( { i =n BfeeRae(e n e ufrdedrn Ipttemedrsce.eIpttem)) nuSraRae(oktgtnuSra(); ot=n u e Pitrtrsce.eOtuSra() rnWie(oktgtupttem); hl(atetfe) ie!uhniir{ otpitn"nrzvtelgn:) u.rnl(Ete or oi "; otfuh) u.ls(; lgn=i.edie) oi nraLn(; otpitn"nrzvtemtd u.rnl(Ete or o e otfuh) u.ls(; ps =i.edie) as nraLn(; i(sai(oi,ps){ fiVldlgn as) otpitn"once) u.rnl(cnet"; Sse.u.rnl(oi + ytmotpitnlgn " otfuh) u.ls(; atetfe = uhniir
pse:) as ";
otfuh)} u.ls(;
e ; } e e{u.rnl(eru"; l otpitn"rer) }
t =n Tra(e 2 e hedn Ca_letevu(oktlgn) htCinSrersce,oi); t.tr(; 2sat) }c c (Oxeto e { a h IEcpin ) ps!) a "; Sse.r.rnl(oi+ n rpn ytmerpitnlgn" e od }
15/25
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html
24/01/12
piae ps){ as
boencnein=fle ola onxo a ; { Sanrs =n Sanrn cne c e cne(e Fl(zr.x") ie"eott); hl(chset){ ies.aNx() i(cnxLn(.qaslgn""ps){ fs.etie)eul(oi+ +as) cnein onxo= e ; bek a;
ncnein onxo;
Code : Java - S lectionner ip mo ip mo ip mo ip mo ip mo j ai. feeRae; a .oB f ded j ai.O cpin a .oIE e o; j ai.n S emed ; a .oIp aRae j ai. i Wie; a .oP n j an .ok ; a .e Sce Ca_le S e h Cin e ipee mlmn Rnal { unbe
pbi ca lc l
piaeSce sce =nl; okt okt l piaeBfeeRae i =nl; ufrdedr n l piaePitrtrot=nl; rnWie u l piaeSrn lgn="eo; tig oi zr" piaeTra t,t; hed 3 4 pbi Ca_letevu(okts Srn lg{ lc htCinSrerSce , tig o) sce =s okt ; lgn=lg oi o; pbi vi rn){ lc od u( { i =n BfeeRae(e n e ufrdedrn Ipttemedrsce.eIpttem)) nuSraRae(oktgtnuSra(); ot=n u e Pitrtrsce.eOtuSra() rnWie(oktgtupttem); Tra t =n Tra(e hed 3 e hedn Rcpini,oi); eeto(nlgn) t.tr(; 3sat) Tra t =n Tra(e Eiso(u); hed 4 e hedn msinot)
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html 16/25
24/01/12
Code : Java - S lectionner ip mo ip mo ip mo j ai.O cpin a .oIE e o; j ai. i Wie; a .oP n j a i.cne; a . lSan Ei inipee m o mlmn Rnal { unbe
pbi ca lc l
piaePitrtrot rnWie u; piaeSrn msae=nl; tig esg l piaeSanrs =nl; cne c l pbi Eiso(rnWie ot { lc msinPitrtr u) h .u =ot i ot u; } pbi vi rn){ lc od u( s =n SanrSse.n; c e cne(ytmi) hl( ie msae:) esg "; e{ ) Sse.u.rnl(Vte ytmotpitn"or msae=s.etie) esg cnxLn(; otpitnmsae; u.rnl(esg) otfuh) u.ls(;
Code : Java - S lectionner ip mo ip mo j ai. feeRae; a .oB f ded j ai.O cpin a .oIE e o; Rcpinipee ee o mlmn Rnal { unbe
pbi ca lc l
piaeBfeeRae i; ufrdedr n piaeSrn msae=nl,lgn=nl; tig esg l oi l pbi RcpinBfeeRae i,Srn lgn{ lc eeto(ufrdedr n tig oi) h .n=i; i i n h .oi =lgn i lgn oi;
e{ )
17/25
24/01/12
"msae; +esg)
} }
Code : Java - S lectionner ipr jv.o* mot aai.; ipr jv.e.; mot aant* pbi casSrer{ ulc ls evu pbi sai SreSce s =nl; ulc ttc evrokt s ul pbi sai Tra t ulc ttc hed ; pbi sai vi mi(tig]ag){ ulc ttc od anSrn[ rs s =nwSreSce(09; s e evrokt20) Sse.u.rnl(L sreret ytmotpitn"e evu s l cued pr "s.eLclot); ' ot u ot +sgtoaPr() t=nwTra(e e hednw Acpe_onxo(s) cetrcneins); tsat) .tr(; }cth(Oxeto e { ac IEcpin ) Sse.r.rnl(L pr ytmerpitn"e ot "s.eLclot)"etdj uii !) +sgtoaPr(+ s tls "; } } } t { r
Code : Java - S lectionner ipr jv.o* mot aai.; ipr jv.e.; mot aant*
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html 18/25
24/01/12
ipr jv.tlSanr mot aaui.cne; pbi casCa_letevu ipeet Rnal { ulc ls htCinSrer mlmns unbe piaeSce sce; rvt okt okt piaePitrtrot=nl; rvt rnWie u ul piaeBfeeRae i =nl; rvt ufrdedr n ul piaeSanrs; rvt cne c piaeTra t,t; rvt hed 3 4 pbi Ca_letevu(okts{ ulc htCinSrerSce ) sce =s okt ; } pbi vi rn){ ulc od u( t { r ot=nw u e Pitrtrsce.eOtuSra() rnWie(oktgtupttem); i =nwBfeeRae(e n e ufrdedrnw Ipttemedrsce.eIpttem)) nuSraRae(oktgtnuSra(); s =nwSanrSse.n; c e cne(ytmi) Eiso(u); msinot) Rcpini); eeto(n) Tra t =nwTra(e hed 4 e hednw t.tr(; 4sat) Tra t =nwTra(e hed 3 e hednw t.tr(; 3sat)
}cth(Oxeto e { ac IEcpin ) Sse.r.rnl(L srer ytmerpitn"e evu dsatsetdcnet !) itn 's onc "; } } }
Code : Java - S lectionner ipr jv.o* mot aai.; ipr jv.e.; mot aant* pbi casCin { ulc ls let pbi sai Sce sce =nl; ulc ttc okt okt ul pbi sai Tra t; ulc ttc hed 1 pbi sai vi mi(tig]ag){ ulc ttc od anSrn[ rs t { r Sse.u.rnl(Dmned cnein) ytmotpitn"ead e onxo"; sce =nwSce(17001,09; okt e okt"2..."20) Sse.u.rnl(Cnein tbi ae ytmotpitn"onxo ale vc l srer atetfcto :) / S l msaesafce e evu, uhniiain "; / i e esg 'fih cetqej si cnet 's u e us onc t =nwTra(e Cneinsce); 1 e hednw onxo(okt) t.tr(; 1sat)
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html 19/25
24/01/12
}c c (nnwHsEcpine { a h Ukonotxeto ) Sse.r.rnl(Ipsil d s cnetr ytmerpitn"mosbe e e once larse"sce.eLcldrs() 'des +oktgtoaAdes); }c c (Oxeto e { a h IEcpin ) Sse.r.rnl(Acnsrerl cued ytmerpitn"uu evu ' ot u pr "sce.eLclot); ot +oktgtoaPr() }
} }
Code : Java - S lectionner ip mo ip mo ip mo j an .; a .e * j a i.cne; a . lSan j ai.; a .o* Cneinipee on o mlmn Rnal { unbe
pbi ca lc l
piaeSce sce =nl; okt okt l pbi lc ai Tra t; c hed 2 pbi lc ai Srn lgn=nl,ps =nl, c tig oi l as l msae =nl,msae =nl,msae =nl; esg1 l esg2 l esg3 l piaePitrtrot=nl; rnWie u l piaeBfeeRae i =nl; ufrdedr n l piaeSanrs =nl; cne c l piaeboencnet=fle ola onc a ; pbi CneinSce s{ lc onxo(okt ) } sce =s okt ;
pbi vi rn){ lc od u( { ot=n u e Pitrtrsce.eOtuSra() rnWie(oktgtupttem); i =n BfeeRae(e n e ufrdedrn Ipttemedrsce.eIpttem)) nuSraRae(oktgtnuSra(); s =n SanrSse.n; c e cne(ytmi) hl(cnet) ie!onc { Sse.u.rnl(nraLn() ytmotpitni.edie); lgn=s.etie) oi cnxLn(; otpitnlgn; u.rnl(oi) otfuh) u.ls(; Sse.u.rnl(nraLn() ytmotpitni.edie); ps =s.etie) as cnxLn(; otpitnps) u.rnl(as; otfuh) u.ls(; i(nraLn(.qas"once){ fi.edie)eul(cnet") Sse.u.rnl(J si cnet "; ytmotpitn"e us onc )
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html 20/25
24/01/12
e ;
t =n Tra(e 2 e hedn Ca_letevu(okt) htCinSrersce); t.tr(; 2sat) }c c (Oxeto e { a h IEcpin ) rpn pu "; od ls ) } } Sse.r.rnl(L srern ytmerpitn"e evu e }
Code : Java - S lectionner ip mo ip mo ip mo j ai.O cpin a .oIE e o; j ai. i Wie; a .oP n j a i.cne; a . lSan Ei inipee m o mlmn Rnal { unbe
pbi ca lc l
piaePitrtrot rnWie u; piaeSrn lgn=nl,msae=nl; tig oi l esg l piaeSanrs =nl; cne c l pbi Eiso(rnWie ot { lc msinPitrtr u) h .u =ot i ot u; } pbi vi rn){ lc od u( s =n SanrSse.n; c e cne(ytmi) hl( ie msae:) esg "; e{ ) Sse.u.rnl(Vte ytmotpitn"or msae=s.etie) esg cnxLn(; otpitnmsae; u.rnl(esg) otfuh) u.ls(;
Code : Java - S lectionner ip mo ip mo j ai. feeRae; a .oB f ded j ai.O cpin a .oIE e o;
21/25
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html
24/01/12
pbi casRcpinipeet Rnal { ulc ls eeto mlmns unbe piaeBfeeRae i; rvt ufrdedr n piaeSrn msae=nl; rvt tig esg ul pbi RcpinBfeeRae i) ulc eeto(ufrdedr n{ ti.n=i; hsi n pbi vi rn){ ulc od u( wietu) hl(re{ t { r msae=i.edie) esg nraLn(; Sse.u.rnl(L srervu ytmotpitn"e evu os cth(Oxeto e { ac IEcpin ) epittcTae) .rnSakrc(;
Lancez serveur.java et ensuite client.java, n'oubliez pas de crer un fichier pour le serveur pour qu'il puisse y vrifier l'identit de ses clients, je l'ai nomm zero.txt : vous pouvez le nommer comme vous le souhaitez, c'est votre guise. Optimisation : Pour ne pas dire qu'il en existe l'infini, plusieurs autres possibilits s'offrent vous, vous pouvez : rendre l'application client / client. Le serveur authentifie les deux clients et ces deux-l pourront discuter ensemble sans que d'autres puissent y entrer : grosso modo raliser un salon , comme on l'appelle ; utiliser les bases de donnes pour la sauvegarde des messages et pour authentifier les clients ; raliser une interface graphique en ou en ;
Croyez-moi : lorsque vous matriserez les sockets en utilisant les , rien ne sera plus compliqu pour vous. Bonne continuation tous ; surtout n'hsitez pas l'amliorer et envoyez-moi un MP pour m'exposer votre travail. Retour en haut
.C.M.
Quelle est la classe qui permet de crer un socket pour le serveur ?
SocketServer. ServeurSocket. SocketServeur.
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html 22/25
24/01/12
ServerSocket.
SreSce s=nwSreSce(06; evrokt s e evrokt12) s.ls(; scoe) Sce s=s.cet) okt sacp(; cth(Oxeto e { ac IEcpin )
On a oubli d'utiliser les threads. On doit d'abord instancier un objet Socket avant ServerSocket. On a coup l'coute du serveur avant d'accepter les clients. On devrait mettre 2009 la place de 1026. Le port 1026 est un port rserv.
Correc ion !
Statistiques de r ponses au QCM
Retour en haut
Le mode UDP est plus rapide que le mode TCP mais c'est une communication non fiable, car on ne se proccupe pas du rsultat de la rception du rcepteur, il est donc moins utilis. Maintenant que vous savez manier les sockets, le mode UDP ne devrait pas vous poser de problme . Je vous remercie d'avoir lu le tutoriel, il est prsent termin. J'espre que vous avez bien suivi la prochaine pour un autre tutoriel client/serveur ! La technologie RMI (Remote Method Invocation) ! Qui vous permettra de mieux comprendre la nature et la fonction des EJB (Entreprise JavaBeans) qui reprsente l'tendard de la plate-forme J2EE ! Je remercie : Le membre cysboy pour m'avoir encourag. Les validateurs Xavinou, Coyote et Thunderseb. Le zCorrecteur Poulpette pour avoir pris le temps de corriger le tutoriel. Enfin, tout le staff du site du zro qui nous permet de rdiger des tutoriels pour dbutants. Retour en haut
Partager
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html 23/25
24/01/12
Li e a
Le framework Executor
Mettre des PC en rseau Retour en haut 24 commentaires pour "Introduction aux sockets" Note moyenne : 3.52 / 4 (23 votes) P e do ChibiBlasphem C.C alias C++ # Post le 22/04/2011 11:11:23 Commen ai e
Tuto assez bien expliqu, les sockets sont un peu mon sujet prfr en programmation et j'avais besoin de savoir comment les utiliser en Java. Chose faite ! Le tuto est clair, explique bien le fonctionnement des sockets et du systme de serveur multi-clients !
Neo_the_chosen_one
# Post le 12/05/2011 16:34:50 Tutoriel clair et concis ! On est dans le vif du sujet et ta faon d'aborder les choses nous permets de continuer la lecture sans avoir l'impression d tre perdu
Nanmoins , j'ai vu que en difficult tu as mis la difficult maximale , je pense que le niveau pour cela est plutt dbutant/intermdiaire . Merci pour ce tuto !
tudes : Universit d'Evry Val d'Essonne (UEVE) Recherche quelqu'un pour un projet de jeu vido en Java avec la lib SLICK 2D skippy17 Enfait, je suis un # Post le 22/07/2011 14:15:03 Tres bon tuto !
24/25
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html
24/01/12
kangourou. Mais je pense qu'il devrait y avoir un lien a la fin vers le tuto sur le framework Executor, il simplifie grandement l'utilisation des threads et donc des sockets
le_juif_noir
Salut !! Bonne introduction au Sockets ! C'est ma premire fois de dcouvrir ce moyen de communication et je comprends dj un peu son principe et ses applications ! Avis : Bon Ville : Yamoussoukro Pays : C te d'Ivoire tudes : INPHB Monte-Cristo D veloppeur .NET (Windows|Web|Phone) C#, Silverlight, WPF, WP7, ADO .NET, LINQ, ...
# Post le 20/01/2012 16:15:42 Trs bon tutoriel, et moi qui devais justement faire un TP sur les sockets en java . J'avous que ce tutoriel me sera d'une grande aide. 18/20 PS: Juste une petite remarque: on dit bien UNE SOCKET et non pas UN socket. Merci
Avis : Bon
www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html
25/25