You are on page 1of 25

24/01/12

Introduction aux sockets

3 276 Zros connects 277 620 Zros inscrits Inscription Connexion


Pseudo

M ot de passe

Mot de passe oubli ?


Connexion auto. Conne ion

Connexion avec un compte :

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

Introduction aux sockets

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.

0 d'impt pendant 9 ans!


CONSTITUEZ votre patrimoine tout en REDUISANT vos impts de 32 % ! Simulation GRATUITE ! Cliquez ici

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

Protger votre famille !


Jusqu' 500.000 de garanties sans aucun questionnaire mdical. Souscription en ligne 24h/24h Cliquez ici Publicit

Retour en haut Sommaire du tutoriel :

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

R cup rer une adresse IP avec InetAddress


Le package java.net de la plate-forme Java fournit une classe InetAddress qui nous permet de rcuprer et manipuler son adresse internet, IP pour les intimes. Cette classe n'a pas de constructeur, pour pouvoir avoir une instance de cette classe on a besoin des m thodes de classe. Voici les mthodes dont je vous parle :

www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html

2/25

24/01/12

Introduction aux sockets

: 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.

A prsent, voyons les mthodes applicables un objet de cette classe :

: 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

Introduction aux sockets

Fastoche, hein ?

La classe l'oublier !

peut lever une exception de type

, 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

Qu'est-ce qu'un socket ?


Un socket est un point de terminaison d'une communication , c'est--dire entre un client et un serveur en cours d'excution sur un rseau donn. Les deux sont lis par un mme numro de port TCP de sorte que la couche puisse identifier la demande de partage de donnes. Un serveur fonctionne sur une machine bien dfinie et est li un numro de port spcifique. Le serveur se met simplement l'coute d'un client, qui demande une connexion.

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.

sur un port spcifique : si ce dernier est 0, le socket est

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

Introduction aux sockets

Code : Java - S lectionner SreSce scesre =n evrokt oktevr e SreSce(ue_otnrm ) evroktnmrpr,b_a ;

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

Introduction aux sockets

Sce scedsrer=scesre.cet) okt oktuevu oktevracp(;

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.

Secret (cliquez pour afficher)

Code : Java - S lectionner ip mo ip mo ip mo j ai.O cpin a .oIE e o; j an .e eSce; a .e S ok j an .ok ; a .e Sce 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 {

SreSce(09; evrokt20) scesre.cet) oktevracp(; cnet !) onc ";

scesre =n oktevr e scedsrer= oktuevu Sse.u.rnl(U zr set ytmotpitn"n o 's


6/25

www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html

24/01/12

Introduction aux sockets

scesre.ls(; oktevrcoe) scedsrercoe) oktuevu.ls(; c c (Oxeto e { a h IEcpin ) epittcTae) .rnSakrc(;

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

Lancez le serveur en premier et ensuite le client !

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

Introduction aux sockets

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.

Un petit exemple de communication en image et en code source :

Code : Java - S lectionner


www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html 8/25

24/01/12

Introduction aux sockets

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

Introduction aux sockets

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

} }

Code : Console - S lectionner L sreretlot d pr 20 e evu s 'cue u ot 09 U zr setcnet n o 's onc

Code : Console - S lectionner Dmned cnein ead e onxo Vu tscnet zr ! os e onc o

Ho l ! Un instant ! C'est quoi, ces

et ce

Rassurez-vous, on va tout expliquer en dtail (

), surtout ne vous affolez pas.

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

Introduction aux sockets

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

Introduction aux sockets

pbi ca lc l

S e e

pbi lc

ai vi mi(tig]zr) c od anSrn[ eo{

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

Introduction aux sockets

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

TP : un mini-chat entre le client et le serveur !


prsent que nous savons su manier les sockets en utilisant les , ralisons un petit programme client / serveur : aprs la connexion du client, celui-ci devra s'authentifier en premier, le serveur va vrifier dans un fichier la validit de ses donnes ; si tout est O.K., un message lui dira qu'il est connect, ils pourront ensuite envoyer tous leurs messages au serveur. Voil : trs simple. On devra avoir quelque chose de ce genre ct serveur, pour plusieurs clients la fois : Code : Console - S lectionner L sreretlot d pr 20 e evu s 'cue u ot 09 U zr vu s cnetr n o et e once sfdahvetd s cnetr otet in e e once sfdah:slt M l srer ja bsi d vssrie. otet au, . e evu, 'i eon e o evcs U zr vu s cnetr n o et e once caau vetd s cnet hbns in e e once caau :slt ja bsi dacdrtle dns hbns au, 'i eon 'ce els one.

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

Introduction aux sockets

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 :

Secret (cliquez pour afficher)

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 )

sce =scesre.cet) okt oktevracp(; Sse.u.rnl(U zr vu s ytmotpitn"n o et e

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

Introduction aux sockets

} } }

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

vetd s cnetr"; in e e once )

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

Introduction aux sockets

piae ps){ as

ai boeniVldSrn lgn Srn c ola sai(tig oi, tig

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;

neit ps!) 'xse a "; e

c c (ieoFudxeto e { a h FlNtonEcpin ) Sse.r.rnl(L fcir ytmerpitn"e ihe

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

Introduction aux sockets

t.tr(; 4sat) }c c (Oxeto e { a h IEcpin ) Sse.r.rnl(oi +set ytmerpitnlgn "'s }

dcnet "; onc ) } }

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;

pbi vi rn){ lc od u( hl( ie


www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html

e{ )
17/25

24/01/12

Introduction aux sockets

t { r msae=i.edie) esg nraLn(; Sse.u.rnl(oi+ : ytmotpitnlgn" }cth(Oxeto e { ac IEcpin ) } epittcTae) .rnSakrc(;

"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

Secret (cliquez pour afficher)

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

Introduction aux sockets

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

Introduction aux sockets

}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

Introduction aux sockets

cnet= onc } e e{ l sn icrets"; ot norce ) } }

e ;

Sse.r.rnl(Vsifrain ytmerpitn"o nomtos

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

Introduction aux sockets

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

dt: +esg) i " msae;

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

Introduction aux sockets

ServerSocket.

Un client peut crer plusieurs sockets.


Vrai. Faux.

Qu'est-ce qui cloche dans ce code ?

Code : Java - S lectionner t { r

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

USA = votre vie de r ve?


Etudier l'anglais avec Kaplan dans nos coles: NY, Floride, Californie
www.kaplaninternational.com/fr

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

Introduction aux sockets

Li e a

Le framework Executor

Les tables de hachage

Dveloppement d'applications pour terminaux Android

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 !

Ville : Persan Pays : France mtropolitaine tudes : BTS IRIS

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

Neo ...The Matrix has you...

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

Introduction aux sockets

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

# Post le 21/12/2011 22:31:52

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

Avec les salutations du comte de Monte-Cristo

Voir tous les commentaires

www.sitedu ero.com/tutoriel-3-173544-introduction-aux-sockets.html

25/25

You might also like