Você está na página 1de 6

Programação Orientada a Objetos II Profª Tatiana Pereira Filgueiras

1. Sockets

Define-se Socket como a ligação para a comunicação entre duas máquinas. Em


uma conexão utilizando Sockets sempre existe um computador servidor e, pelo
menos, um computador cliente.
O computador servidor tem como função abrir determinada porta de
comunicação a fim de escutar (LISTENING), a requisição de alguma máquina
cliente. Muitos serviços podem ser disponibilizados numa mesma máquina, sendo
então diferenciados não só pelo endereço IP, mas também por um número de porta.
Portas são “ligações” para conexões de um computador para uma rede externa
a ele (saída) ou vice-versa (entrada). Só existe compartilhamento, ou comunicação
entre dois computadores quando há conexões de entrada e saída estabelecidas
entre os mesmos através de uma determinada porta do computador de origem, a
uma porta do computador de destino do compartilhamento.
Na linguagem de programação JAVA é possível executar dois modos de
conexão: modo baseado em conexão e; modo sem conexão.
O modo baseado em conexão pode ser representado por uma ligação
telefônica. O cliente faz a ligação e o servidor atende. Somente após isso a
conversa se inicia. Este modo utiliza o protocolo de rede TCP1.
O modo sem conexão pode ser representado pelo serviço prestado pelos
correios. O cliente envia uma carta, sem saber se a mesma chegará ao seu destino
ou se o destino realmente existe. Este tipo de conexão é muito utilizado em
aplicações de videoconferência e em sistemas de tempo real, e utiliza como
protocolo de rede o UDP.
Nesta apostila serão abordados cliente e servidor TCP, por serem os mais
utilizados.

1 O funcionamento, vantagens e desvantagens deste e dos demais protocolos de rede serão


estudados na disciplina de Redes de Computadores.
1.1 Criando um Servidor de CHAT Unidirecional

Um chat unidirecional é um chat onde somente o Cliente envia mensagens, sem


que o lado Servidor possa respondê-las.
Como já mencionado, o servidor tem como função aguardar requisições e
atende-las de maneira correta. A lógica de programação para esta ação pode ser
descrita como:

1. Criar um Socket de escuta em uma determinada porta;


2. Criar um Socket com a máquina cliente;
3. Processar o pedido;
4. Encerrar a conversa;
5. Fechar o Socket.
Uma possível solução para esta lógica, em linguagem JAVA segue:
import java.io.IOException;
import java.net.ServerSocket; //classe que define funções do servidor
import java.net.Socket; //classe que define ligação entre duas ou mais máquinas
import java.util.Scanner;

public class Servidor {

public static void main(String[] args) throws IOException {

//definindo servidor na porta 12345


ServerSocket servidor = new ServerSocket(12345);
System.out.println("Porta 12345 aberta!");

Socket cliente = servidor.accept(); //aguarda por conexões

/*Quando um cliente se conectar ao servidor, as linhas abaixo serão


executadas*/
//recuperando o endereço IP da maquina cliente e mostrando em tela
System.out.println("Nova conexão com o cliente " +
cliente.getInetAddress().getHostAddress() );

//criando canal de comunicação


Scanner s = new Scanner(cliente.getInputStream());

while (s.hasNextLine()) { //enquanto o cliente enviar algo escrito


System.out.println(s.nextLine()); //mostre o que esta sendo escrito
}

System.out.println( "Cliente desconectou-se. Encerrando..." );


s.close();
servidor.close();
cliente.close();
System.out.println( "Comunicação encerrada." );
}
}

Com isso, teremos um Servidor TCP do tipo “chat”, aguardando por requisições
na porta 12345.
1.2 Criando um Cliente de CHAT Unidirecional

A máquina cliente tem como função preparar requisições e enviá-las para o


servidor na porta correta. A lógica de programação para esta ação pode ser
descrita como:

1. Criar um Socket com algum servidor;


2. Criar um fluxo de comunicação no Socket;
3. Utilizar o fluxo para conversar com o Servidor;
4. Encerrar o fluxo;
5. Fechar o Socket.

Lembrando que o Socket é a ligação entre as duas máquinas, enquanto que o


fluxo de comunicação é o canal utilizado para a comunicação entre as máquinas,
através do Socket.
Uma possível solução para a lógica apresentada para o Cliente, em linguagem
JAVA, encontra-se a seguir:

import java.io.IOException;
import java.io.PrintStream; //classe que define fluxo de comunicação
import java.net.UnknownHostException;
import java.net.Socket; //classe que define ligação entre duas ou mais máquinas
import java.util.Scanner;

public class Cliente {

public static void main(String[] args)


throws UnknownHostException, IOException {

String ServerAddress = "127.0.0.1";


int ServerPort = 12345;

/*Criando conexão com o servidor*/


Socket conexaoServidor = new Socket(ServerAddress, ServerPort);
System.out.println( "O cliente se conectou ao servidor!" );

//criando ferramenta de escrita local


Scanner teclado = new Scanner(System.in);

//criando fluxo de dados para envio de mensagens ao Servidor


PrintStream saida = new PrintStream(conexaoServidor.getOutputStream());

while (teclado.hasNextLine()) { //enquanto cliente quiser escrever


saida.println(teclado.nextLine()); //envia a mensagem pro servidor
}
saida.close(); //encerra fluxo
conexaoServidor.close(); //fecha a conexao (Socket)
}
}

Com isso, teremos um Cliente TCP do tipo “chat”, enviando


requisições(mensagens) para a porta 12345.
2. Exercícios de Fixação

1. Modifique o cliente e o servidor do exemplo apresentado, de modo que


os mesmos tenham interface gráfica.

2. Modifique o Servidor de maneira que o mesmo forneça o serviço de


cálculos remotos (ou seja, funcione como uma espécie de calculadora
remota, onde o cliente envia pedidos de soma, subtração, multiplicação e
divisão para o Servidor e o mesmo mostre em tela o resultado).

Os exercícios podem ser feitos em trio e entregues à professora via moodle.


Estes exercícios complementarão o conceito final de A3.

Você também pode gostar