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 ...