Вы находитесь на странице: 1из 26

Implementando comunicao em

JAVA via Sockets


Alcides Calsavara - alcides@ppgia.pucpr.br
Leonardo . !unes - leonardo@sumerso"t.com
Sockets

#tili$ado para comunicao entre processos%

Compreendendo Sockets - diagramas&

sockets.pd"

socketsgeral.pd"
Sockets

'ecanismo b(sico de comunicao sobre I)

*ornece tr+s modos de acesso&

'odo orientado a cone,o -connection-oriented.&

Socket, ServerSocket;

'odo orientado a datagrama -datagram-oriented.&

DatagramSocket, MulticastSocket;

Acesso a dados I) de bai,o n/vel -ra0 ip data.&

SocketImpl
'odo orientado a cone,o
-connection-oriented.

*unciona sobre o protocolo 1C)2I)

Servios con"i(veis&

Sem perdas de dados na rede%

3arantia de ordem dos pacotes%

45ata streams6 podem ser utili$ados

5esvantagens&

7 mais lento 8ue o modo orientado a datagrama%

Comportamento servidor di"erente do comportamento cliente%


A9es para implementar um
socket cliente
: - Abrir a cone,o&
import java.io.* ; // streams
import java.net.* ; // sockets
Socket clientSocket = new Socket
(www.javasoft.com, 80);
A9es para implementar um
socket cliente
; - )egando os streams de entrada e sa/da&
ata!np"tStream in#o"n$ = new ata!np"tStream
( clientSocket.%et!np"tStream( ) );
ata&"tp"tStream o"t#o"n$ = new
ata&"tp"tStream
( clientSocket.%et&"tp"tStream( ) );
A9es para implementar um
socket cliente
< - #tili$ando os streams de entrada e sa/da&
o"t#o"n$.write!nt( ' );
o"t#o"n$.write()*( +ello );
int k = in#o"n$.rea$!nt( );
Strin% s = in#o"n$.rea$()*() ;
A9es para implementar um
socket cliente
= > *ec?ando os streams de entrada e sa/da&
in#o"n$.close () ;
o"t#o"n$.close () ;
@ > *ec?ando o socket&
clientSocket.close() ;
A9es para implementar um
socket servidor
: - Criar o server socket&
ServerSocket serverSocket =
new ServerSocket (80, ,);
; - Aguardar cone,oes de clientes&
Socket clientSocket =
serverSocket.accept ();
A9es para implementar um
socket servidor
< - Criar streams de entrada e sa/da do cliente&
ata!np"tStream in#o"n$ = new ata!np"tStream
( clientSocket.%et!np"tStream( ) ) ;
ata&"tp"tStream o"t#o"n$ = new
ata&"tp"tStream
( clientSocket.%et&"tp"tStream( ) ) ;
A9es para implementar um
socket servidor
= - Conversando com o cliente&
int k = in#o"n$.rea$!nt( );
Strin% s = in#o"n$.rea$()*() ;
o"t#o"n$.write!nt( ' );
o"t#o"n$.write()*( +ello );
A9es para implementar um
socket servidor
@ - *ec?ando streams e socket cliente&
in#o"n$.close () ;
o"t#o"n$.close () ;
clientSocket.close() ;
A - *ec?ando o socket servidor&
serverSocket.close() ;
'odo orientado a cone,o - "eatures

)ossibilidade de sockets unidirecional&

socket.s?utdo0nInput-.%

socket.s?utdo0nButput-.%

Implementa9es de alto n/vel para protocolos


como ?ttpC etc...
'odo orientado a datagrama
-datagram-oriented.

*unciona sobre o protocolo #5)2I)

Servios no con"i(veis&

'ensagens podem ser perdidas%

Brdem das mensagens no garantida%

Cada mensagem D um datagrama&

EsenderC receiverC contentsF

Vantagem&

7 muito mais r(pido 8ue o modo orientado a cone,o%


#tili$ando datagramas -sender side.
: - Criao do socket cliente&
// sen$er socket $oesn-t nee$
// a special port n"m#er
ata%ramSocket clientSocket =
new ata%ramSocket () ;
#tili$ando datagramas -sender side.
; - Criando e enviando o datagrama&
!net.$$ress a$$r=!net.$$ress.%et/01ame
(www.javasoft.com) ;
Strin% toSen$ = )2at-s m0 3"estion4 ;
#0te56 #"ffer = toSen$.%et/0tes() ;
// $ata%ram to receiver-s port 7,7,
ata%ram8acket 3"estion = new ata%ram8acket
(#"ffer, #"ffer.len%t2, a$$r, 7,7,) ;
clientSocket.sen$ (3"estion) ;
#tili$ando datagramas -sender side.
< - ecebendo e abrindo uma resposta&
ata%ram8acket answer = new
ata%ram8acket (new #0te5,9:6, ,9:);
clientSocket.receive (answer) ;
S0stem.o"t.println (answer.%etata()
; <n ; answer.%et=en%t2()
; <n ; answer.%et.$$ress()
; <n ; answer.%et8ort() ) ;
#tili$ando datagramas -sender side.
= - *ec?ando o socket
clientSocket.close() ;
#tili$ando datagramas -receiver side.
: - Criando um socket servidor&
// listens on port 7,7,
ata%ramSocket serverSocket =
new ata%ramSocket (7,7,) ;
#tili$ando datagramas -receiver side.
; - ecebendo um datagrama&
ata%ram8acket 3"estion = new
ata%ram8acket (new #0te5,9:6, ,9:) ;
serverSocket.receive (3"estion) ;
#tili$ando datagramas -receiver side.
< - Gnviando o datagrama resposta&
Strin% toSen$ = )2at-s t2e answer 4 ;
#0te56 #"ffer = toSen$.%et/0tes() ;
ata%ram8acket answer = new
ata%ram8acket (#"ffer, #"ffer.len%t2,
3"estion.%et.$$ress()/*sen$er info*/,
3"estion.%et8ort()/*sen$er info*/);
serverSocket.sen$ (answer) ;
#tili$ando datagramas -receiver side.
= - *ec?ando o socket servidor&
serverSocket.close() ;
'odo orientado a datagama > 'ulticast

#m grupo 4'ulticast6 D especi"icado por um endereo I) de


classe 456 -;;=.H.H.H atD ;<I.;@@.;@@.;@@C inclusive. e uma
porta #5).

B endereo ;;=.H.H.H D reservado e no deve ser usado.

'ulticastSocket&
!net.$$ress %ro"p = !net.$$ress.%et/01ame(>::8.,.?.@>);
A"lticastSocket s = new A"lticastSocket(?@8B);
s.joinCro"p(%ro"p);
// Dnvia e rece#e mensa%ens.
s.leaveCro"p(%ro"p);
Sockets sobre I) - 1C) e #5)

Algumas con"igura9es&

1imeout do Sistema Bperacional%

#tili$ao de bu""ers%

JeepAlive%

etc ...
Acesso a dados I) de bai,o n/vel

Java possibilita acesso a algumas con"igura9es


ipC mas no permite ra0 sockets.

SocketImpl*actorK

SocketImpl

SocketBptions
)rincipais novidades do J;SG v:.=

Suporte L I)vA

SocketC?annel

Stream-oriented connecting sockets.

Bpera9es ass/ncronas

'aior controle de e,ecuo e recursos -possibilidade de accept


no blo8ueante.

Suporte a Secure Socket LaKer

'aiores detal?es&

MJAVANOB'GM2docs2guide2net2en?ancements:=.?tml