Orientação a Objetos Sockets em Java ServerSocket / Socket Gil Eduardo de Andrade Sockets em Java Introdução • Sockets sã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: Sockets em Java: ServerSocket / Socket – Gil Eduardo de Andrade Sockets em Java 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; Aula 21: Sockets em Java: SocketServer / Socket – Gil Eduardo de Andrade Sockets em Java A classe “ServerSocket” (java.net.ServerSocket) • Para efetuar a abertura de uma porta por parte da máquina servidor, intanciamos um objeto da classe ServerSocket passando ao seu construtor o número da porta a ser aberta: – ServerSocket ss = new ServerSocket(12000); Aula 21: Sockets em Java: SocketServer / Socket – Gil Eduardo de Andrade Sockets em Java A classe “Socket” (java.net.Socket) • Após abrir uma porta é necessário ouví-la a espera dos pedidos de conexão vindos das máquinas cliente, para tal utilizamos a classe Socket em conjunto com o método accept() da classe ServerSocket: – Socket sock = ss.accept(); Aula 21: Sockets em Java: SocketServer / Socket – Gil Eduardo de Andrade Sockets em Java Criando os canais de comunicação • O servidor socket fica pausado na linha “Socket sock = 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; Aula 21: Sockets em Java: SocketServer / Socket – Gil Eduardo de Andrade Sockets em Java As classes “Output e 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); Aula 21: Sockets em Java: SocketServer / Socket – Gil Eduardo de Andrade Sockets em Java Método para Recebimento de Dados • Para que seja possível enviar dados via uma conexão socket em Java utilizamos o método writeUTF() da classe DataOutputStream, que recebe como parâmetro uma String contendo o dado a ser enviado para o cliente: – dos.writeUTF (“dado a ser enviado”); Aula 21: Sockets em Java: SocketServer / Socket – Gil Eduardo de Andrade Sockets em Java As classes “Input e 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); Aula 21: Sockets em Java: SocketServer / Socket – Gil Eduardo de Andrade Sockets em Java Método para Recebimento de Dados • Para que seja possível receber dados via uma conexão socket em Java utilizamos o método readUTF() da classe DataInputStream, que retorna uma String contendo o dado enviado por um cliente: – String dado_recebido = dis.readUTF(); Aula 21: Sockets em Java: SocketServer / Socket – Gil Eduardo de Andrade Sockets em Java Fechando uma comunicação • Após a transferência de dados via socket ter 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(); Aula 21: Sockets em Java: SocketServer / Socket – Gil Eduardo de Andrade Sockets em Java Exemplo: Socket em Java Aula 21: Sockets em Java: SocketServer / Socket – Gil Eduardo de Andrade Sockets em Java Exemplo: Socket em Java (Servidor) O código-fonte completo encontra-se disponível na seção de exemplos desta aula. Aula 21: Sockets em Java: SocketServer / Socket – Gil Eduardo de Andrade Sockets em Java Exemplo: Socket em Java (Cliente) O código-fonte completo encontra-se disponível na seção de exemplos desta aula. Aula 21: Sockets em Java: SocketServer / Socket – Gil Eduardo de Andrade