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(); } } }
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 ...