Trocando mensagens Cliente/Servidor utilizando Sockets.

Posted by Rafael Orágio

Nesta última terça-feira na aula de Redes II, meu professor ensinou como criar uma conexão entre dois sistemas (Cliente/Servidor) com a utilização de Sockets. Aí pensei comigo... "Por que não fazer desta aula um artigo para meu blog?!". E foi isto que aconteceu! Segue abaixo duas mini aplicações, uma "Cliente" e a outra o "Servidor". Para rodar, basta criar estas classes na sua IDE de preferência e fazer o "copy-paste" de ambas. Nos comentários do código, há mais detalhes de como funciona a troca de mensagens.

Bom galera, divirtam-se!

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;

public class Cliente {

   public static void main(String[] args) {

       String sentence;
       String modifiedSentence;

       try {
    
            // Cria um buffer que armazenará as informações de entrada do teclado
            BufferedReader inFromUSer = new BufferedReader(new InputStreamReader(System.in));
    
            // Cria um Socket cliente passando como parâmetro o ip e a porta do servidor   
            Socket client = new Socket("localhost", 40000);
    
            // Cria um stream de saída 
            DataOutputStream outToServer = new DataOutputStream(client.getOutputStream());
   
            // Cria um buffer que armazenará as informações retornadas pelo servidor
            BufferedReader inFromServer = new BufferedReader(new InputStreamReader(client.getInputStream()));
    
            // Atribui as informações armazenadas no buffer do teclado à variável "sentence"
            sentence = inFromUSer.readLine();
    
            // Disponibiliza as informações contidas em "sentence" para a stream de saída do cliente
            outToServer.writeBytes(sentence + "\n");
    
            // Atribui as informações modificadas pelo servidor na variável "modifiedSentence"
            modifiedSentence = inFromServer.readLine();
    
            // Imprime no console do cliente a informação retornada pelo servidor
            System.out.println("From Server: " + modifiedSentence);
    
            // Fecha o Socket
            client.close();   

       } catch (UnknownHostException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       } catch (IOException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }
   } 
}
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Servidor {

   public static void main(String[] args) {

       String clientSentence;
       String capitalized;
  
       try {
 
           // Cria um SocketServer (Socket característico de um servidor)
           ServerSocket socket = new ServerSocket(40000);
   
           while(true) {    
    
               /* Cria um objeto Socket, mas passando informações características de um servidor,
                *no qual somente abre uma porta e aguarda a conexão de um cliente 
                */
               Socket connectionSocket = socket.accept();
    
               // Cria uma buffer que irá armazenar as informações enviadas pelo cliente
               BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
    
               // Cria uma stream de sáida para retorno das informações ao cliente
               DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
    
               // Faz a leitura das informações enviadas pelo cliente as amazenam na variável "clientSentence"
               clientSentence = inFromClient.readLine();
    
               /* Faz uma modificação na String enviada pelo cliente, simulando um processamento em "back-end"
                * antes de retorná-la ao cliente
                */
               capitalized = clientSentence.toUpperCase() + "\n";
    
               // Imprime a a String modificada no console do servidor
               System.out.println(capitalized);
    
               // Retorna as informações modificadas, ao cliente
               outToClient.writeBytes(capitalized);    
           } 
      
       } catch (IOException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }  
   }
}

Comments (4)

    Gostei muito dos comentários deu perfeitamente para entender o código, me ajudou bastante de um atual estudante para o ex estudante. Meus agradecimentos ! ! !

    pode me ajudar estou tentando fazer um programa socket como este so que o cliente envia a palavra e o server inverte ela tipo cliente envia programa e o servidor inverete a palavra ficando amargorp to no desespero espero q use ainda este blogue

    Jóia. Exemplo excelente e bem explicado! Ótimo

    o código está cortado ...

Postar um comentário