Vous êtes sur la page 1sur 18

Reues ue

comunicao





L s c o | a r o f | s s | o n a | d o
N e r v | r



0 7 1 2 2 0 1 1
ugo Niianua
1rabalho reallzado para o mdulo 6 da dlsclpllna

ugo Mlranda Modulo 6 8edes de comunlcao Lscola roflsslonal do nervlr
1


Indice
nLroduo 2
1 Modelo de programao cllenLeservldor 2
a Servldores MonoCllenLes e MulLlcllenLes 2
Servldor MonoCllenLe 2
Servldor MulLlcllenLe 3
b 8esoluo e formao de endereos 3
2 C lnLerface SockeL 4
a SockeLs uu e 1C 4
SockeLs uu 4
b Crlao de sockeLs 4
c Assoclao de sockeLs com a llgao 7
d Lnvlo e recepo de lnformao vla sockeL 8
3Lxemplo slmples de programao de um servldor 9
4Lxemplo slmples de programao de um cllenLe 13
Concluso 17
8lbllografla 17

ugo Mlranda Modulo 6 8edes de comunlcao Lscola roflsslonal do nervlr
2

ntroduo

LsLe Lrabalho no mblLo do mdulo 6 da dlsclpllna de 8edes de Comunlcao e
deslgnado para conhecermos vrlos Llpo de programao enLre cllenLes e servldores e
Lambem os seus lnLerfaces para lsso apresenLando exemplos e desenvolvlmenLos
. Modelo de programao cliente-servidor
O purudlgmu de progrumuo dlstrlbuidu utruvs du sepuruo dus upllcues entre servldores
(upllcues que dlsponlblllzum ulgum servlo) e cllentes (upllcues que usum esses servlos) fol u
urqulteturu de dlstrlbulo predomlnunte nos unos 1990. Um dos seus utrutlvos o uumento du
conflubllldude (u fulhu de umu mqulnu no necessurlumente lnvlublllzu u operuo do slstemu
como um todo) e reduo de custo (mqulnus muls slmples podem executur os servlos
lsoludumente, uo lnvs de ter umu grunde mqulnu fuzendo todos os servlos).
As upllcues cllentes e servldorus so progrumus executundo em mqulnus dlstlntus, trocundo
lnformuo utruvs de umu rede de computudores. Puru que os servlos possum ser sollcltudos, u
upllcuo cllente deve conhecer quem fornece o servlo (o endereo du upllcuo servldoru) e quul
o protocolo pr-estubelecldo puru reullzur u sollcltuo.
Entre us vuntugens cltudus puru o modelo de progrumuo cllente-servldor destucum-se:
O #eluclonu u execuo de processos dlstlntos.
O Oferece umu estruturuo do processumento dlstrlbuido buseudo no concelto de servlos:
O $ervldor: provedor de servlos
O llente: consumldor de servlos
Permlte compurtllhumento de recursos
O $ervldor pode utender u vrlos cllentes
Oferece trunspurnclu de locullzuo
O %rutumento unlforme lndependentemente de processos esturem nu mesmu mqulnu ou em
mqulnus dlstlntus
Permlte u comunlcuo utruvs du trocu de mensugens
O Arqultecturu frucumente ucopludu
O ensugens puru sollcltues (cllente puru servldor) e respostus (servldor puru cllente)
Encupsulu servlos
O llente no preclsu suber como servldor lmplementu o servlo, mus upenus u lnterfuce puru
sollcltuo e respostu.



a. Servidores Mono-Clientes e Multiclientes

Servidor Mono-Cliente

ugo Mlranda Modulo 6 8edes de comunlcao Lscola roflsslonal do nervlr
3

um mono cllenLe e um compuLador cllenLe numa rede de modelo cllenLeservldor de duas
camadas o qual Lem poucos ou nenhum apllcaLlvo lnsLalado de modo que depende
prlmarlamenLe de um servldor cenLral para o processamenLo de acLlvldades A palavra mono
se refere a uma pequena lmagem de booL que Lals cllenLes LlplcamenLe requerem Lalvez no
mals do que o necessrlo para fazer a conexo com a rede e lnlclar um navegador web
dedlcado ou uma conexo de rea de 1rabalho 8emoLa" Lals como x11 ClLrlx CA ou
MlcrosofL 8u

Servidor Multicliente

MulLlcllenLe e um compuLador (cllenLe) no cllenLeservldor que normalmenLe fornece a
funclonalldade lndependenLemenLe do cenLral servldor

MulLlcllenLe necesslLa alnda de pelo menos perldlca llgao a uma rede ou servldor cenLral
mas e mulLas vezes caracLerlzado pela capacldade de execuLar vrlas funes

b. Resoluo e formao de endereos

Cs endereos da nLerneL so conhecldos pelos nomes assoclados aos endereos (por
exemplo wwwgooglepL) ara que lsLo se[a posslvel e necessrlo Lraduzlr (resolvlng) os
nomes em endereos

C uomaln name SysLem (unS) e um mecanlsmo que converLe os nomes em endereos e
endereos em nomes Asslm como o endereamenLo Cu8 os nomes unS so hlerrqulcos e
permlLem que falxas de espaos de nomes se[am delegados a ouLros unS

Cs compuLadores comunlcam se enLre eles graas ao proLocolo (nLerneL roLocol) que
uLlllza endereos numerlcos chamados endereos composLos por 4 numeros lnLelros (4
byLes) enLre 0 e 233 e escrlLos sob a forma de xxxxxxxxxxxx or exemplo 19413320326
LsLes endereos numa rede servem para que os compuLadores se comunlquem enLre sl cada
compuLador Lem um endereo unlco
C CAnn (nLerneL CorporaLlon for Asslgned names and numbers subsLlLulndo o AnA
nLerneL Asslgned numbers Agency desde 1998) e encarregado de aLrlbulr endereos
publlcos quer dlzer os endereos dos compuLadores que esLam conecLados a uma rede
publlca de nLerneL
ugo Mlranda Modulo 6 8edes de comunlcao Lscola roflsslonal do nervlr
4

. U interface Socket
a. Sockets UD e TC

Sockets UD

uu no esLabelece conexo C remeLenLe coloca expllclLamenLe endereo e orLa do
desLlno C servldor deve exLralr servldores porLa do remeLenLe do daLa grama recebldo Cs
dados recebldos podem ser recebldos fora de ordem ou perdldos


Socketx 1CP

um sockeL 1C crla uma llgao sLream bldlrecclonal enLre os endereos 'hosLCporLC' e
'hosLSporLS' ou se[a enLre uma apllcao cllenLe em execuo na mqulna 'hosLC' consegue
conLrolar Lambem a porLa 'porLC' e ouLra apllcao servldora em execuo na mqulna 'hosLS'
consegulndo a vlsuallzao da porLa 'porLS' de 'hosLS'

A apllcao cllenLe uLlllza a porLa 'porLC' da mqulna 'hosLC' para envlar sollclLaes de
servlos e para receber reLornos a suas sollclLaes A apllcao servldora vlsuallza
consLanLemenLe a porLa 'porLS' da mqulna 'hosLS' aguardando a chegada de sollclLaes de
servlo Cuando alguma sollclLao e receblda a apllcao servldora execuLa o servlo e uLlllza
a conexo para envlar o reLorno com os resulLados do servlo





b. Criao de sockets

LsLe LexLo no Lem como ob[ecLlvo o aprendlzado da llnguagem !ava porLanLo s sero
demonsLradas e expllcadas as llnhas de cdlgos referenLes s lnsLrues que so uLlllzadas no
programa exempllflcado pela llusLrao aclma
ugo Mlranda Modulo 6 8edes de comunlcao Lscola roflsslonal do nervlr
3


Comeando com a apllcao que ser hospedada no Servldor

no lnlclo do programa dever ser lnserlda essas llnhas que lmporLam a blblloLeca que conLem
as classes que so uLlllzadas em uma apllcao com SockeL([avaneL*) e as classes de recepo
de lnformao do Leclado ou SockeL do cllenLe ou servldor([avalo*)

lmporL [avalo*

lmporL [avaneL*

Aqul crlamos um ob[ecLo welcomeSockeL e o sockeL do lado do servldor numero_da_porLa
dever ser subsLlLuldo pelo numero da porLa pela qual a apllcao cllenLe usar para conecLar
com o servldor LsLe sockeL esperar a requlslo de conexo de um cllenLe


ServerSockeL welcomeSockeL new ServerSockeL(numero_da_porLa)

ugo Mlranda Modulo 6 8edes de comunlcao Lscola roflsslonal do nervlr
6


Como o programa servldor normalmenLe flca a funclonar por Lempo lndeflnldo colocase o
resLanLe das lnsLrues denLro de um loop lnflnlLo como segue

whlle(Lrue)



A prxlma lnsLruo crla um ob[ecLo connecLlonSockeL do Llpo SockeL quando um cllenLe
conecLar ao servldor C 1C encarregar de crlar uma conexo vlrLual dlreLa enLre esse sockeL
e o sockeL do cllenLe de forma que Lodos os byLes sero envlados ao servldor na ordem cerLa

SockeL connecLlonSockeL welcomeSockeLaccepL()

no caso do envlo de um ob[ecLo do Llpo SLrlng do cllenLe para o servldor uLlllzamos as
segulnLes lnsLrues para receber os dados do cllenLe

8uffered8eader lnfouoCllenLe new 8uffered8eader(new
npuLSLream8eader(connecLlonSockeLgeLnpuLSLream())

SLrlng mensagemuoCllenLe lnfouoCllenLereadLlne()

uepols de processar a lnformao envlada pelo cllenLe queremos envlar um ouLro
ob[ecLo(mensagem_para_cllenLe) do Llpo SLrlng de volLa para o cllenLe como um mensagem
de dado recebldo ou algo do Llpo

uaLaCuLpuLSLream lnfoaraCllenLe new
uaLaCuLpuLSLream(connecLlonSockeLgeLCuLpuLSLream())
lnfoaraCllenLewrlLe8yLes(mensagem_para_cllenLe)

Com lsso Lermlnase o programa do lado do Servldor
ugo Mlranda Modulo 6 8edes de comunlcao Lscola roflsslonal do nervlr
7


c. Associao de sockets com a ligao

As llgaes so esLabelecldas de duas formas

passlvo espera que um parLlclpanLe acLlvo faa o pedldo de llgao
acLlvo lnlcla um pedldo de llgao ao lado passlvo
Aps exlsLlr uma llgao pode exlsLlr Lranferencla de dados (envlo e recepo) e qualquer um
deles pode desllgar a mesma

Cs clnco passos para esLabelecer uma llgao so

asso 1 (parL passlvo) flca espera de pedldos de llgao
asso 2 (parL acLlvo) faz pedldo e esLabelece llgao
asso 3 (parL passlvo) acelLa pedldo de llgao
asso 4 (parL passlvo) comunlca dados
asso 3 (parL acLlvo) comunlca dados











ugo Mlranda Modulo 6 8edes de comunlcao Lscola roflsslonal do nervlr
8


d. Envio e recepo de informao via socket

Lnvlo de um sockeL

lnL counL sendLo (sockld buf len flags addr addrlen)


counL sockld buf len como no send

addr endereo do desLlno (sLrucL sockaddr)

addrlen slzeof (add)

8ecpo de um sockeL

lnL counL recvfrom (sockld buf len flags addr addrlen)


counL sockld buf len como no recv

addr endereo da orlgem (sLrucL sockaddr)

addrlen slzeof (add)

ugo Mlranda Modulo 6 8edes de comunlcao Lscola roflsslonal do nervlr
9


.Exemplo simples de programao de um servidor

uslng SysLemC
uslng SysLemneL
uslng SysLem
uslng SysLem1hreadlng
uslng n SysLemneL
uslng SysLemCollecLlons

class 1alkServ

SysLemneLSockeLs1cpLlsLener server
publlc sLaLlc ashLable handles
publlc sLaLlc ashLable handle8yConnecL

publlc sLaLlc vold Maln()
1alkServ 1S new 1alkServ()


publlc 1alkServ()
handles new ashLable(100)
handle8yConnecL new ashLable(100)
server new SysLemneLSockeLs1cpLlsLener(4296)
whlle(Lrue)
serverSLarL()
lf(serverendlng())
ugo Mlranda Modulo 6 8edes de comunlcao Lscola roflsslonal do nervlr
10

nSockeLs1cpCllenL connecLlon serverAccepL1cpCllenL()
ConsoleWrlLeLlne(ConnecLlon made)
8acklorLh 8l new 8acklorLh(connecLlon)




publlc sLaLlc vold Send1oAll(sLrlng namesLrlng msg)
SLreamWrlLer SW
ArrayLlsL 1o8emove new ArrayLlsL(0)
nSockeLs1cpCllenL Lc new nSockeLs1cpCllenL1alkServhandlesCounL
1alkServhandlesvaluesCopy1o(Lc0)
for(lnL l0lLcLengLhl++)
Lry
lf(msg1rlm()||Lclnull)
conLlnue
SW new SLreamWrlLer(LclCeLSLream())
SWWrlLeLlne(name + + msg)
SWllush()
SW null
caLch(LxcepLlon e44) e44 e44
sLrlng g (sLrlng) 1alkServhandle8yConnecLLcl
1alkServSendSysMsg(** + g + ** AS LLl1 uS)
1alkServhandles8emove(g)
1alkServhandle8yConnecL8emove(Lcl)


ugo Mlranda Modulo 6 8edes de comunlcao Lscola roflsslonal do nervlr
11



publlc sLaLlc vold SendSysMsg(sLrlng msg)
SLreamWrlLer SW
ArrayLlsL 1o8emove new ArrayLlsL(0)
nSockeLs1cpCllenL Lc new nSockeLs1cpCllenL1alkServhandlesCounL
1alkServhandlesvaluesCopy1o(Lc0)
for(lnL l0lLcLengLhl++)
Lry
lf(msg1rlm()||Lclnull)
conLlnue
SW new SLreamWrlLer(LclCeLSLream())
SWWrlLeLlne(msg)
SWllush()
SW null
caLch(LxcepLlon e44) e44 e44
1alkServhandles8emove(1alkServhandle8yConnecLLcl)
1alkServhandle8yConnecL8emove(Lcl)



//end of class 1alkServ

class 8acklorLh
nSockeLs1cpCllenL cllenL
SysLemCSLream8eader S8
SysLemCSLreamWrlLer SW
ugo Mlranda Modulo 6 8edes de comunlcao Lscola roflsslonal do nervlr
12

sLrlng handle

publlc 8acklorLh(SysLemneLSockeLs1cpCllenL c)
cllenL c
1hread L new 1hread(new 1hreadSLarL(lnlL))
LSLarL()


prlvaLe sLrlng CeLandle()
SWWrlLeLlne(WhaL ls your handle? )
SWllush()
reLurn S88eadLlne()


prlvaLe vold run()
Lry
sLrlng l
whlle(Lrue)
l S88eadLlne()
1alkServSend1oAll(handlel)

caLch(LxcepLlon e44) ConsoleWrlLeLlne(e44)


prlvaLe vold lnlL()
S8 new SysLemCSLream8eader(cllenLCeLSLream())
SW new SysLemCSLreamWrlLer(cllenLCeLSLream())
ugo Mlranda Modulo 6 8edes de comunlcao Lscola roflsslonal do nervlr
13

SWWrlLeLlne(WLLCCML 1C 1alkServ! 8e nlce!)
//SWWrlLeLlne(WhaL ls your handle? )
//SWllush()
handle CeLandle()
whlle(1alkServhandlesConLalns(handle))
SWWrlLeLlne(L88 andle already exlsLs!)
handle CeLandle()

1alkServhandlesAdd(handlecllenL)
1alkServhandle8yConnecLAdd(cllenLhandle)
1alkServSendSysMsg(** + handle + ** AS !CnLu uS)
SWWrlLeLlne(now 1alklngrn)
SWllush()
1hread L new 1hread(new 1hreadSLarL(run))
LSLarL()


.Exemplo simples de programao de um cliente

uslng SysLemC
uslng SysLemneL
uslng SysLem
uslng SysLem1hreadlng
uslng n SysLemneL
uslng SysLemCollecLlons
uslng SysLemWlndowslorms
uslng SysLemComponenLModel
ugo Mlranda Modulo 6 8edes de comunlcao Lscola roflsslonal do nervlr
14

uslng SysLem8unLlmenLeropServlces

class 1alkuser

sLaLlc lorm Lalk
sLaLlc nSockeLs1cpCllenL 1C

ullmporL(kernel32dll)
prlvaLe sLaLlc exLern vold LxlLrocess(lnL a)

publlc sLaLlc vold Maln()
Lalk new lorm()
Lalk1exL 1alkuser 1he CllCAL 1alkServ CllenL
LalkCloslng + new CancelLvenLandler(Lalk_Closlng)
LalkConLrolsAdd(new 1exL8ox())
LalkConLrols0uock uockSLylellll
LalkConLrolsAdd(new 1exL8ox())
LalkConLrols1uock uockSLyle8oLLom
((1exL8ox)LalkConLrols0)MulLlllne Lrue
((1exL8ox)LalkConLrols1)MulLlllne Lrue
LalkWlndowSLaLe lormWlndowSLaLeMaxlmlzed
LalkShow()
((1exL8ox)LalkConLrols1)keyup + new keyLvenLandler(key_up)
1C new nSockeLs1cpCllenL()
1CConnecL( Cl A SL8vL8 L8L4296)
1hread L new 1hread(new 1hreadSLarL(run))
LSLarL()
ugo Mlranda Modulo 6 8edes de comunlcao Lscola roflsslonal do nervlr
13

whlle(Lrue)
AppllcaLlonuoLvenLs()



prlvaLe sLaLlc vold Lalk_Closlng(ob[ecL s CancelLvenLArgs e)
eCancel false
AppllcaLlonLxlL()
LxlLrocess(0)


prlvaLe sLaLlc vold key_up(ob[ecL skeyLvenLArgs e)
1exL8ox 18 (1exL8ox)s
lf(18LlnesLengLh1)
SLreamWrlLer SW new SLreamWrlLer(1CCeLSLream())
SWWrlLeLlne(181exL)
SWllush()
181exL
18Llnes null



prlvaLe sLaLlc vold run()
SLream8eader S8 new SLream8eader(1CCeLSLream())
whlle(Lrue)
AppllcaLlonuoLvenLs()
1exL8ox 18 (1exL8ox)LalkConLrols0
ugo Mlranda Modulo 6 8edes de comunlcao Lscola roflsslonal do nervlr
16

18Append1exL(S88eadLlne()+rn)
18SelecLlonSLarL 181exLLengLh




ugo Mlranda Modulo 6 8edes de comunlcao Lscola roflsslonal do nervlr
17

Concluso

Com esLe Lrabalho exponho aqul exemplo de programao e Lambem duvldas sobre
lnLerfaces

Bibliografia

hLLp//wwwdeveloperfusloncom/code/3374/achaLcllenLserverprogramforc/
hLLp//wwwdcafeeunlcampbr/cursos/oo!ava/neLwork/cshLml
hLLp//pLwlklpedlaorg/wlkl/CllenLeservldor