Bem-vindo ao exemplo de programação de Sockets em Java. Todo servidor é um programa que roda em um sistema específico e escuta em uma porta específica. Os Sockets são vinculados aos números de porta e, quando executamos qualquer servidor, ele apenas escuta no socket e aguarda solicitações do cliente. Por exemplo, o servidor tomcat rodando na porta 8080 aguarda solicitações do cliente e, uma vez que recebe alguma solicitação do cliente, responde a elas.
Programação de Sockets em Java
Um socket é uma das extremidades de um link de comunicação bidirecional entre dois programas rodando na rede. O socket é vinculado a um número de porta para que a camada TCP possa identificar a aplicação destinatária dos dados. No tutorial de exemplo de programação de sockets em java, aprenderemos como escrever servidor socket java e cliente socket java. Também aprenderemos como os programas de servidor e cliente leem e escrevem dados no socket. java.net.Socket e java.net.ServerSocket são as classes java que implementam Socket e Servidor Socket.
Exemplo de Servidor Socket em Java
package com.journaldev.socket;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.ClassNotFoundException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* This class implements java Socket server
* @author pankaj
*
*/
public class SocketServerExample {
//variável ServerSocket estática
private static ServerSocket server;
//porta do servidor de socket na qual ele irá escutar
private static int port = 9876;
public static void main(String args[]) throws IOException, ClassNotFoundException{
//criar o objeto do servidor de socket
server = new ServerSocket(port);
//continuar escutando indefinidamente até receber chamada 'exit' ou o programa terminar
while(true){
System.out.println("Waiting for the client request");
//criar socket e esperar pela conexão do cliente
Socket socket = server.accept();
//ler do socket para o objeto ObjectInputStream
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
//converter o objeto ObjectInputStream para String
String message = (String) ois.readObject();
System.out.println("Message Received: " + message);
//criar o objeto ObjectOutputStream
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
//escrever objeto no Socket
oos.writeObject("Hi Client "+message);
//fechar recursos
ois.close();
oos.close();
socket.close();
//encerrar o servidor se o cliente enviar solicitação de saída
if(message.equalsIgnoreCase("exit")) break;
}
System.out.println("Shutting down Socket server!!");
//fechar o objeto ServerSocket
server.close();
}
}
Cliente de Socket Java
package com.journaldev.socket;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* This class implements java socket client
* @author pankaj
*
*/
public class SocketClientExample {
public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException, InterruptedException{
//obter o endereço IP local, se o servidor estiver em execução em outro IP, você precisa usar esse
InetAddress host = InetAddress.getLocalHost();
Socket socket = null;
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
for(int i=0; i<5;i++){
//estabelecer conexão de socket com o servidor
socket = new Socket(host.getHostName(), 9876);
//escrever no socket usando ObjectOutputStream
oos = new ObjectOutputStream(socket.getOutputStream());
System.out.println("Sending request to Socket Server");
if(i==4)oos.writeObject("exit");
else oos.writeObject(""+i);
//ler a mensagem de resposta do servidor
ois = new ObjectInputStream(socket.getInputStream());
String message = (String) ois.readObject();
System.out.println("Message: " + message);
//fechar recursos
ois.close();
oos.close();
Thread.sleep(100);
}
}
}
Para testar a programação de socket Java para comunicação servidor-cliente, primeiro precisamos executar a classe SocketServerExample
. Quando você executar o servidor de socket, ele apenas imprimirá “Aguardando solicitação do cliente” e então esperará pela solicitação do cliente. Agora, ao executar a classe SocketClientExample, ela enviará uma solicitação ao servidor de socket Java e imprimirá a mensagem de resposta no console. Aqui está a saída do programa de exemplo de servidor de socket Java SocketServerExample
.
Waiting for the client request
Message Received: 0
Waiting for the client request
Message Received: 1
Waiting for the client request
Message Received: 2
Waiting for the client request
Message Received: 3
Waiting for the client request
Message Received: exit
Shutting down Socket server!!
Aqui está a saída do programa cliente de socket Java SocketClientExample
.
Sending request to Socket Server
Message: Hi Client 0
Sending request to Socket Server
Message: Hi Client 1
Sending request to Socket Server
Message: Hi Client 2
Sending request to Socket Server
Message: Hi Client 3
Sending request to Socket Server
Message: Hi Client exit
Isso é tudo para um resumo rápido da programação de Socket em Java. Espero que você consiga começar com a programação de servidor de socket Java e cliente de socket Java. Referência: Documento da Oracle
Source:
https://www.digitalocean.com/community/tutorials/java-socket-programming-server-client