Vous êtes sur la page 1sur 10

Mecanismos de Comunicao

Sockets em java
(http://java.sun.com/docs/books/tutorial/networking/sockets/
Sockets ! o "ue #$

%m socket # um mecanismo de comunicao


(dois sentidos entre dois programas a
&uncionar (normalmente numa rede

' pacote java.net cont#m duas classes !


Socket e ServerSocket ! "ue implementam(
respectivamente( o cliente e o servidor numa
ligao
Sockets ! o "ue #$

%ma aplicao servidor # e)ecutada numa


determinada m*"uina e tem um socket
ligado a uma porta espec+&ica dessa m*"uina

' servidor espera "ue um cliente &aa um


pedido de ligao atrav#s desse socket
Servidor
(escuta numa porta espec+&ica
Cliente
,edido de
ligao
Sockets ! o "ue #$

' servidor ao aceitar a ligao cria um novo


socket para uma porta di&erente (e assim
permite novas liga-es

.o lado do cliente um socket # criado e #


usado para comunicar com o servidor (numa
porta dispon+vel na m*"uina cliente.
Servidor
(escuta numa porta espec+&ica
Cliente
(porta dispon+vel
/igao
(por um outra porta
' cliente e o servidor podem agora comunicar
lendo e escrevendo nos seus sockets.
Sockets ! o "ue #$

' pacote java.net cont#m a classe Socket


"ue esconde todos os detalhes particulares a
cada sistema.

0inda tem uma segunda classe(


SocketServer( "ue implementa a parte de
servidor.
Servidor
(escuta numa porta espec+&ica
Cliente
(porta dispon+vel
/igao
(por um outra porta
Sockets ! 1)emplo cliente

/igao 2 porta 3
(1cho Server

0 negrito:

a de&inio do
socket e como
pode ser lido e
escrito

Ciclo while para


enviar e receber
mensagens
import java.io.*;
import java.net.*;
public class EchoClient {
public static void main(String[] args) throws IOException {
Socket echoSocket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
echoSocket = new Socket("max.uma.pt", 7);
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
echoSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("No encontro o host: Max.");
System.exit(1);
} catch (IOException e) {
System.err.println("No foi possvel a ligao a: Max.");
System.exit(1);
}
BufferedReader stdIn = new BufferedReader(
new InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
System.out.println("echo: " + in.readLine());
}
out.close();
in.close();
stdIn.close();
echoSocket.close();
}
}
,assos para o criar um cliente:
4. 0brir um socket5
6. Criar os streams de leitura e escrita
7. /er e escrever mediante os objectivos do sistema
8. 9echar os streams.
:. 9echar o socket.
Sockets ! 1)emplo Servidor

Classe servidor

1spera o pedido de
ligao do cliente

' resto #
semelhante ao
cliente
import java.net.*;
import java.io.*;
public class KnockKnockServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(4444);
} catch (IOException e) {
System.err.println("Could not listen on port: 4444.");
System.exit(1);
}
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
} catch (IOException e) {
System.err.println("Accept failed.");
System.exit(1);
}
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(
clientSocket.getInputStream()));
String inputLine, outputLine;
KnockKnockProtocol kkp = new KnockKnockProtocol();
outputLine = kkp.processInput(null);
out.println(outputLine);
while ((inputLine = in.readLine()) != null) {
outputLine = kkp.processInput(inputLine);
out.println(outputLine);
if (outputLine.equals("Bye."))
break;
}
out.close();
in.close();
clientSocket.close();
serverSocket.close();
}
}
Sockets ! 1)erc+cio

Copie os &icheiros do e)emplo Knock Knock


Server e adapte de &orma "ue o cliente
e)ecute na m*"uina do laborat;rio e o
servidor no ma).uma.pt
.ota: este servidor aceita m<ltiplas liga-es
,*gina:
http://java.sun.com/docs/books/tutorial/networking/sockets/clientServer.html
Sockets ! Stream Vs
=atagrama

Stream (>C,: e)iste uma ligao entre


cliente e servidor (iniciada( mantida e
terminada

?antagem: &i*vel

=esvantagem: velocidade

=atagrama (%=,: mensagem independente


cuja entrega( tempo e conte<do no so
garantidos

?antagem: rapide@

=esvantagem: no # &i*vel
Sockets ! =atagrama

' Aava tem as classes DatagramPacket


e DatagramSocket no pacote java.net
"ue implementa a comunicao de
=atagramas sobre o %=,.
,ara mais in&ormao ver:
http://java.sun.com/docs/books/tutorial/networking/datagrams/