Calculatrice TCP Client/Serveur
Calculatrice TCP Client/Serveur
ancés
M1GL2023/
2024-TPN°4(
Socket
sTCPav
ecI
HM)
Sommai r
e
Exer
cice1:Communicat
ionJFrame/Ser
veuravecTCP 1
Exer
cice2:Opér
ati
onsmat hémat
iquesavecI
HM 3
Exer
cice3:Cal
cul
atr
icecli
ent/
ser
veuravecTCP 5
Exer
cice1:Communi
cat
ionJFr
ame/
Ser
veurav
ecTCP
Soi
tlesdeuxcl
assesJav
asui
vant
e:
i
mpor
tjav
[Link].
*;
i
mpor
tjav
a.i
o.*;
i
mpor
tjav
[Link]
l
.HashMap;
cl
assSer
veur{
pr
ivat
eHashMap<St
ri
ng,
Doubl
e>t
abl
e;
publi
cServeur(){
tabl
e=newHashMap<>( )
;
tabl
[Link]
("
badr",13.5);
tabl
[Link]
("
saleh",15.5)
;
tabl
[Link]
("
youcef",9.5)
;
tabl
[Link]
("
anes",8.5);
}
publicdoubleTr ouv
er Moy(
Str
ingname){
i
f( t
[Link]
nsKey(name)
)retur
n(tabl
[Link]
(name)
);
elsereturn-1;
}
publicstati
cvoidmai n(Str
ingargs[]
){
Serveurb=newSer veur();
[Link]
int
ln("Serveurenat t
entedeconnexion..
."
);
ServerSocketserver=nul l;
tr
y{
server=newSer verSocket (
7777);
while(tr
ue){
Socketsock=ser v
er .
accept()
;
[Link]
intln("connecte"
);
DataOutputStr
eam sockOut=newDat aOutputStr
eam([Link]
Output
Str
eam(
));
DataInputSt
ream sockI n=newDat aI
nput
Stream([Link]
Input
Str
eam())
;
Stri
ngname;
while((
name=sockI n.r
eadUTF()
)!=null
){
sockOut
.wri
teDouble(
[Link]
ouverMoy(name)
);
sockOut
.f
lush()
;
}
sockOut.
close()
;
sock.
close()
;
}
}cat
ch( I
OExceptione){
try{
ser
ver
.cl
ose(
);
}cat
ch(
IOExcept
ione2){
}}
}
}
1
i
mpor
tjav
[Link].*;
i
mpor
tjav
[Link].
* ;
i
mpor
tjav
[Link].
ev ent
.*;
i
mpor
tjav
a.i
o.*;
i
mpor
tjav
[Link].
*;
publi
cclassClientext
endsJFrameimplement sAct
ionLi
stener{
Socketsock=nul l
;
DataOutput
Stream sockOut=nul
l;
DataI
nputStr
eam sockIn=null
;
pri
vateJButt
onj bt
GetMoy=newJBut t
on("Aff
icherl
amoy enne"
);
pri
vateJTextFi
eldjt
fNom =newJTextFi
eld()
;
pri
vateJTextFi
eldjt
fMoy=newJTextFiel
d();
publi
cClient(){
JPanelpanneau=newJPanel ();
[Link](newGr i
dLayout(2,2)
);
[Link](newJLabel ("
Nom" ));
[Link](jtf
Nom) ;
[Link](newJLabel ("
Moy enne"))
;
[Link](jtf
Moy )
;
add(panneau, [Link]) ;
add(j
btGetMoy ,Bor derLayout.
SOUTH) ;
j
btGetMoy .
addAct ionListener(t
his);
}
publi
cv oidini
t(){
tr
y{sock=newSocket ("
localhost",7777);
sockOut=newDat aOutputStream([Link]
Out putSt
ream(
));
sockIn=newDat aI
nput
St r
eam( [Link]
nputStream())
;
}catch(UnknownHost Exceptione){
[Link]
.pri
ntl
n("
hostnonat t
eignabl
e: l
ocalhost")
;
[Link]
t(1)
;
}catch(IOExcepti
one){
[Link]
.pri
ntl
n("
connectionimpossi bl
eavec: l
ocal
host
")
;
[Link]
t(1)
;
}
}
@Ov erri
de
publicv oidacti
onPerformed( ActionEvente){
doubl escore=0;
try{
sockOut .wri
teUTF(j
tfNom. getText()
.t
rim())
;
sockOut .fl
ush()
;
}catch( I
OExceptionex){}
try{score=sockI n.r
eadDoubl e()
;}catch(I
OExcept
ionex){
}
i
f(scor e<0)[Link](
"N'estpast r
ouvé")
;
elsejtfMoy .
setText(
Doubl e.
toStri
ng(score))
;
}
publi
cst ati
cv oi
dmai n(Str
ing[]ar
gs){
Cli
enta=newCl i
ent()
;
a.
setTitl
e("RechercherLaMoy enne")
;
a.
setSize(350,150);
a.
ini
t()
;
a.
setLocat i
onRelati
veTo(null
);
a.
setVisibl
e(tr
ue);
}
}
2
Uneév
ent
uel
l
eexécut
ionestcommesui
t:
Modi
fi
erl
esdeuxcl
assespr
écédent
esaf
ind’
avoi
runeév
ent
uel
l
eex
écut
ioncommesui
t:
Enpassantl
enom d’unétudi
antàpar t
irduJFr
ame,l
eser
veurr
épondparunbool
éen.
t rue:siamoyenneestsupérieureouégal
ea10.
f alse:sisamoyenneestinf
érieureà10ousi
sonnom n’
exi
stepasdansl
eserv
eur
.
Exer
cice2:
Opér
ati
onsmat
hémat
iquesav
ecI
HM
Lancerl’
exécut
iondeTCPChat
.j
[Link]’
agi td’uneappl icat
iondet chatchequiestréal
iséeavec
l
abi bl
iot
hèqueswingetlessocket sTCP.C’ estuneseul eclassequir epr
ésent
eàl af oi
sle
cl
ient est l
e serveur
.Au l ancement de l ’applicati
on laf enêt r
e JFr
ame suiv
ante est
apparue(combinai
sondeJLabel,
JText
Fiel
d,JPanel
,JText
Area,
JRadi
oBut
ton,
..
.):
Pourt chatcherilfautlancerdeuxinstancesdecet t
eapplicati
on,unei nst
ancepourla
premièreper sonnequidoi tchoi
sirle bout veuretunei
on Ser nstancepourl adeuxi
ème
personnequidoi tchoi
sirl
eboutonCli .Al
ent ’
int
éri
eurdelacl
asseTCPChat,onpeutt
rouv
erun
codequi ressembleausuivant:
i
f(Ser
veur){
hostSer
ver=newServer
Socket(port
);
socket=host
Serv
er.
accept
();/
/attentecl
ient
}
3
el
se{//siCli
ent
socket=newSocket(
“l
ocal
host
”,por
t);
}
ème
Av
antl
aconnexi
onducl
i
ent(
2 per
sonne,
onal
avuesui
vant
ecot
éser
veur
):
Apr
èsl
aconnexi
onducl
i
ent
,lesdeuxper
sonnespeuv
entéchangerl
eur
smessages:
Votr
etrav
ailconsist
eàf ai
requel
quesmodif
icat
ionssurlecodepr
écédentaf
inder
éal
iser
l
esopérat
ionsarit
hmétiquesADD,MUL,SOUS,DI
VetPUI S.
LesIHMsattenduessontcommesuit:
Parexemple,l
eserv
eurenvoi
edanssonI
HM (PUI
S53) ,l
ecli
entver
radansl
esi
en(Ent
ree:
125.
0).
Lecl
ientenvoi
edanssonIHM (
MUL64),l
eser
veurver
radanslesi
en(Ent
ree:
24.
0).
4
Dansl
acl
asseTCPChat
.j
av i
a,lf
autsef
ocal
i
sersurl
apar
ti
esui
vant
educode:
i
f(i
n.r
eady(
)){
s=[Link]()
;
i
f((s!=null
)&& ( s.
length()!=0)){
i
f( s.
equals(END_CHAT_ SESSION)){
changeSt atusTS(DISCONNECTI NG,tr
ue);
}
else{
appendToChat Box("Entree:"+s+" \n"
);
changeSt atusTS(NULL, true)
;
}
}
}
Exer
cice3:Cal
cul
atr
icecl
ient
/ser
veurav
ecTCP
L’objecti
fdecetexer ci
ceestdedév elopperunecal cul
atr
icecli
ent/
serveurensebasantsur
l
essocket sTCP.
Dansl ecl i
entsousformedeJFr ame,l’ut
ili
sateursai
sir
alesdeuxopér andesetchoi
sir
aune
opération( ADD,MUL,DI V,SOUS ouPUI S).Lecal culsef er
aparl asui t
ecotéserveuret
l
’affi
chagesef eracotécli
ent(dansunJLabelparexempl e)
.
Lancerl a classe Java suiv
ante (Server
.j
av .E
a) l
le per
metd’ établ
i
rla connexi
on av ec l
a
calculatr
icemaislesopérati
onsnesontpasencor eimplémentéespourlemoment.
i
mpor
tjav
a.i
o.*
;
i
mpor
tjav
[Link]
.*;
publ
i
ccl
assSer
ver{
publ
icst
ati
cvoi
dmai
n(St
ri
ng[
]ar
gs)t
hrowsI
OExcept
ion{
Ser
ver
Socketser
ver=newSer
ver
Socket
(6666)
;
whi
le(
true){
Socketsocket=ser
ver
.accept
();
Dat
aOut
put
Str
eam dos=newDat
aOut
put
Str
eam(
socket
.get
Out
put
Str
eam(
));
Dat
aInput
Str
eam di
s=newDat
aInput
Str
eam(
socket
.get
Input
Str
eam(
));
St
ri
ngr
equet
e="
";
whi
l
e((
requet
e=di
s.r
eadUTF(
))!
=nul
l){
/
/codeaaj
out
er
5
Lancerl
’
exécut
iondeCal
cul
atr
ice.
j a.
av Lesv
uesat
tenduessontcommesui
t:
Vot
reobjecti
festdecompl
éterl
ecodeduser
veuraf
ind’
i
mpl
ément
ert
out
esl
esopér
ati
ons.
Uneéventuel
levueser
acommesuit:
Indi
cat
ion:util
i
serlaméthodeStr
ing.
v ueOfa
al f
indeconver
tirler
ésult
atdel’
opérat
ioncot
é
serv
eurenStr
ingpourl
’
env
oy eraucli
entavecl
améthodewri
teUTFdeDat
aOut
put
Str
eam.
6
7