Programação de Socket em Java – Exemplo de Servidor de Socket e Cliente

Bem-vindo ao exemplo de programação de Socket em Java. Cada servidor é um programa que é executado em um sistema específico e escuta em uma porta específica. Os Sockets estão vinculados aos números de porta e, quando executamos qualquer servidor, ele simplesmente escuta no socket e aguarda solicitações do cliente. Por exemplo, o servidor Tomcat em execução na porta 8080 aguarda solicitações de clientes e, uma vez que recebe qualquer solicitação de cliente, responde a elas.

Programação de Socket em Java

Um socket é um ponto de extremidade de uma comunicação bidirecional entre dois programas em execução na rede. O socket está vinculado a um número de porta para que a camada TCP possa identificar a aplicação para a qual os dados destinam-se a ser enviados. No tutorial de exemplo de programação de socket em Java, aprenderemos como escrever servidor de socket Java e programa de cliente de socket Java. Também aprenderemos como o programa cliente-servidor lê e escreve dados no socket. java.net.Socket e java.net.ServerSocket são as classes Java que implementam Socket e Socket server.

Exemplo de Servidor de 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 soquetes na qual ele vai escutar
    private static int port = 9876;
    
    public static void main(String args[]) throws IOException, ClassNotFoundException{
        //criar o objeto do servidor de soquete
        server = new ServerSocket(port);
        //permanecer ouvindo indefinidamente até receber a chamada 'exit' ou o programa terminar
        while(true){
            System.out.println("Waiting for the client request");
            //criando soquete e esperando conexão do cliente
            Socket socket = server.accept();
            //ler do soquete 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 objeto ObjectOutputStream
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            //escrever objeto no soquete
            oos.writeObject("Hi Client "+message);
            //fechar recursos
            ois.close();
            oos.close();
            socket.close();
            //encerrar o servidor se o cliente enviar uma 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 Soquete 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 localhost, se o servidor estiver sendo executado 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 soquete com o servidor
            socket = new Socket(host.getHostName(), 9876);
            //escrever no soquete 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 soquete Java para comunicação entre servidor e cliente, primeiro precisamos executar a classe SocketServerExample. Quando você executar o servidor de soquete, ele simplesmente imprimirá “Aguardando pedido do cliente” e então aguardará o pedido do cliente. Agora, quando você executar a classe SocketClientExample, ela enviará um pedido para o servidor de soquete Java e imprimirá a mensagem de resposta no console. Aqui está a saída do programa SocketServerExample do servidor de soquete Java.

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 soquete 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 soquete em Java. Espero que você possa começar com o servidor de soquete Java e a programação do cliente de soquete Java. Referência: Documento da Oracle

Source:
https://www.digitalocean.com/community/tutorials/java-socket-programming-server-client