Orientação a Objetos Socketsem Java ServerSocket/ Socket Gil Eduardo de Andrade
Introdução Socketssão mecanismos de comunicação entre tarefas que permitem que aplicativos, em um mesma máquina ou em máquinas distintas, conversem através da utilização do protocolo TCP/IP; Para que a comunicação ocorra é necessário especificar o IP da máquina com qual pretende-se conversar e a porta na qual a aplicação nessa máquina está respondendo; Aula 21: Socketsem Java: ServerSocket/ Socket Gil Eduardo de Andrade
Codificação Primeiramente, para que uma comunicação ocorra, é necessária a abertura de uma porta por parte de uma máquina servidor; Após a abertura de uma porta é possível ao servidor ouvir os pedidos de conexão de máquinas cliente;
A classe ServerSocket (java.net.serversocket) Para efetuar a abertura de uma porta por parte da máquina servidor, intanciamosum objeto da classe ServerSocketpassando ao seu construtor o número da porta a ser aberta: ServerSocket ss = new ServerSocket(12000);
A classe Socket (java.net.socket) Após abrir uma porta é necessário ouví-laa espera dos pedidos de conexão vindos das máquinas cliente, para tal utilizamos a classe Socketem conjunto com o método accept() da classe ServerSocket: Socketsock= ss.accept();
Criando os canais de comunicação O servidor socketfica pausado na linha Socketsock = ss.accept() a espera de uma nova conexão, no momento em que ela ocorre torna-se necessário definir canais de comunicação para envio e recebimento de dados; Para tal são utilizadas as classes: OutputStream, DataOutputStream, InputStream e DataInputStream;
As classes Outpute DataOutputStream (java.io.outputstream) (java.io.dataoutputstream) Para criação do canal de envio de dados são instanciados os objetos das classes OutputStream e DataOutputStream: OutputStream os = sock.getoutputstream(); DataOutputStream dos = new DataOutputStream(os);
Método para Recebimento de Dados Paraque seja possível enviar dados via uma conexão socketem Java utilizamos o método writeutf()da classe DataOutputStream, que recebe como parâmetro uma Stringcontendo o dado a ser enviado para o cliente: dos.writeutf( dado a ser enviado );
As classes Inpute DataInputStream (java.io.inputstream) (java.io.datainputstream) Para criação do canal de recebimento de dados são instanciados os objetos das classes InputStream e DataInputStream: InputStream is = sock.getinputstream(); DataInputStream dis = new DataInputStream(is);
Método para Recebimento de Dados Paraque seja possível receber dados via uma conexão socketem Java utilizamos o método readutf()da classe DataInputStream, que retorna uma Stringcontendo o dado enviado por um cliente: String dado_recebido = dis.readutf();
Fechando uma comunicação Após a transferência de dados via socketter sido concluída, torna-se necessário finalizar a comunicação, indicando ao sistema operacional a liberação da porta que havia sido reservada anteriormente, para tal utilizase o método close() da classe Socket: sock.close();
Exemplo: Socketem Java
Exemplo: Socketem Java (Servidor) O código-fonte completo encontra-se disponível na seção de exemplos desta aula.
Exemplo: Socketem Java (Cliente) O código-fonte completo encontra-se disponível na seção de exemplos desta aula.