Anhaguera
Sockets
Um socket é definido como uma extremidade de um canal de comunicação. Um par de processos (ou threads) se comunica em uma rede utilizando um par de sockets, sendo uma para cada processos. Um socket é formado por um endereço IP conectado com um número de porta. Em geral utilizam uma arquitetura cliente-servidor. Servidores que implementam serviços específicos, ouvem portas bem conhecidas (por exemplo, um servidor telnet ouve a porta 23, um servidor FTP, ouve a porta 21, um servidor web ouve a porta 80). Todas as portas abaixo de 1024 são consideradas bem conhecidas – podemos usá-las para implementar serviços padrões. Quando uma thread cliente inicia um pedido de conexão, ela recebe uma porta atribuída pelo host. Essa porta tem um número arbitrário > 1024. Por exemplo, se um cliente no host X com endereço IP 146.86.5.20 desejar estabelecer uma conexão com um servidor web no endereço 161.25.19.8, o host X poderá receber a porta 1625 (por exemplo). A conexão consistirá então em um par de sockets: 146.86.5.20:1625 no host X e 161.25.19.8:80 no servidor web. Todas as conexões devem ser exclusivas.
Exemplo: Servidor de data e hora
Programa simples que obtém informações de data e hora de um servidor remoto.
O servidor:
import java.net.*; public class Servidor { public Servidor(){ try { s = new ServerSocket(5155); //cria o socket } catch (java.io.IOException e) { System.out.println(e); System.exit(1); } System.out.println(“Servidor escutando. . . “); try { while (true) { cliente = s.accept(); c = new Conexao(cliente); c.start(); } } catch (java.io.IOException e) { System.out.println(e); } }
public static void main(String args[]) { Servidor data_e_hora = new Servidor(); }
private ServerSocket s; private Socket cliente; private Conexao c;
}
A thread para atender o pedido de data e hora:
import java.net.*;
import