Programação de soquete em Java: um breve guia

Publicados: 2022-05-21

Em Java, a programação de soquete é um meio de comunicação entre programas e permanecer conectado a diferentes JREs — tanto servidores orientados a conexão quanto servidores não orientados a conexão. Um soquete de servidor Java é usado exclusivamente para iniciar e processar a comunicação entre um servidor e um cliente.

Este blog cobrirá tudo o que há para saber sobre programação de sockets.

Índice

Programação de sockets em Java

A programação de soquete é o processo de complementar e usar nós de rede separados de maneira interativa. É um sistema de comunicação bidirecional em que um soquete (nó) escuta em uma porta específica em um endereço IP enquanto o outro soquete se conecta.

Soquetes em Java

Em Java, os soquetes são uma extremidade de um canal de comunicação bidirecional que conecta dois programas em rede. A camada TCP é usada para atribuir um número de porta ao soquete Java fornecido para identificar o aplicativo para o qual estamos transferindo dados. Usamos a combinação de um endereço IP e um número de porta para criar um endpoint.

A plataforma Java inclui uma classe chamada Socket, que implementa um lado de uma conexão de rede bidirecional entre seu aplicativo Java e outro programa. A classe fica no topo de uma implementação independente de plataforma, protegendo seu programa Java de detalhes específicos do sistema.

Ao usar a classe em vez de um determinado código nativo, seus programas Java podem se comunicar pela rede de maneira independente da plataforma.

Além disso, java.net inclui a classe ServerSocket, que implementa um soquete que os servidores podem usar para escutar e aceitar conexões de clientes. Este é um exemplo que mostra como usar as classes ServerSocket e Socket.

Entre a porta do lado do cliente e a porta do lado do servidor, uma conexão é criada.

Estabelecendo uma conexão de soquete Java [CLIENT SIDE]

Antes de continuar com a programação do lado do cliente, o cliente deve aguardar a inicialização do servidor. Uma vez instalado e funcionando, ele começará a enviar consultas para o servidor Java. O cliente aguardará a resposta do servidor. Este é um bom resumo da lógica de conexão cliente-servidor.

Vamos examinar a programação do lado do cliente com mais detalhes.

Para se conectar a outra máquina, você precisará de uma conexão de soquete. Os dois computadores devem saber onde estão na rede (endereço IP) e qual porta TCP estão utilizando para estabelecer uma conexão de soquete. A estrutura java.net denota a classe de soquete.

O endereço IP do servidor é o primeiro argumento de entrada. A porta TCP é o próximo parâmetro aqui. (Não é nada mais do que um número que informa qual programa deve ser iniciado em um servidor.) HTTP, por exemplo, usa a porta 80. Normalmente, o intervalo dos números das portas varia de 0 a 65535.

Comunicação

Os fluxos são utilizados para entrada e saída de dados ao se comunicar por meio de uma conexão de soquete. Depois de enviar as solicitações e estabelecer uma conexão forte, você deve desligar a conexão do soquete.

Fechando uma conexão de soquete do servidor Java

A conexão do soquete é fechada explicitamente após o envio da mensagem ao servidor, a conexão do soquete é fechada explicitamente.

// Programa Java de demonstração para clientela

import java.net.*;

import java.io.*;

classe pública Client_Side_Program

{

// para inicializar fluxos de soquete, fluxos de entrada e fluxos de saída

soquete privado = null;

entrada privada DataInputStream = null;

privado DataOutputStream out = null;

// construtor para colocar a porta TCP e o endereço IP

public Client(String add, int port)

{

//estabelece uma conexão

tentar

{

socket = new Socket(adicionar, porta);

System.out.println(“Conectado”);

// recebe entrada do terminal

entrada = new DataInputStream(System.in);

//envia a saída para o socket

out = new DataOutputStream(socket.getOutputStream());

}

catch(UnknownHostException u)

{

System.out.println(u);

}

catch(IOException i)

{

System.out.println(i);

}

// string para ler a mensagem da entrada

String linha = “”;

// continue lendo até que “Over” seja inserido

while (!line.equals(“Sobre”))

{

tentar

{

linha = input.readLine();

out.writeUTF(linha);

}

catch(IOException i)

{

System.out.println(i);

}

}

//fecha a conexão

tentar

{

entrada.fechar();

saída.fechar();

socket.close();

}

catch(IOException i)

{

System.out.println(i);

}

}

public static void main(String args[])

{

Cliente cliente = novo Cliente(“127.0.0.1”, 5000);

}

}

Para visitar a fonte deste código, clique aqui .

Estabelecendo uma conexão de soquete Java [SERVER SIDE]

O servidor cria seu objeto e aguarda a solicitação do cliente enquanto considera a conexão do lado do soquete do servidor Java. O servidor irá interagir com o cliente assim que a solicitação for enviada. Você precisará de dois soquetes para codificar o aplicativo do lado do servidor, que é o seguinte – quando um cliente cria um novo Socket(), um ServerSocket é criado para aguardar as solicitações do cliente. Um soquete simples pode ser definido como um programa que inicia a comunicação do lado do servidor com o cliente. Você pode comunicar as respostas com o cliente de acordo, depois de obter o relatório da conexão de soquete do lado do servidor java.

Comunicação

Para usar o soquete para enviar saída, geralmente esperamos usar o método getOutputStream().

Fechando uma conexão de soquete do servidor Java

É crucial terminar a conexão desligando o soquete e os fluxos de entrada-saída.

// Um ​​programa java do servidor

import java.net.*;

import java.io.*;

Servidor de classe pública

{

//inicializa socket e fluxo de entrada

soquete privado = null;

servidor ServerSocket privado = null;

privado DataInputStream em = null;

// construtor com porta

Servidor público (porta int)

{

// espera por uma conexão após iniciar um servidor

tentar

{

servidor = new ServerSocket(porta);

System.out.println(“Servidor: iniciado”);

System.out.println(“Aguardando a chegada de um cliente…”);

socket = server.aceitar();

System.out.println(“Cliente foi aceito”);

// para receber a entrada do socket do cliente

in = new DataInputStream(

new BufferedInputStream(socket.getInputStream()));

String linha = “”;

// para ler a mensagem do cliente até que “Over” seja enviado

while (!line.equals(“Sobre”))

{

tentar

{

linha = in.readUTF();

System.out.println(linha);

}

catch(IOException i)

{

System.out.println(i);

}

}

System.out.println(“Fechando conexão”);

//fecha a conexão

socket.close();

em.fechar();

}

catch(IOException i)

{

System.out.println(i);

}

}

public static void main(String args[])

{

Servidor servidor = novo Servidor(5000);

}

}

Para verificar os detalhes deste código, clique aqui .

Você pode executar o software do lado do servidor primeiro depois de configurar as extremidades do cliente e do servidor. Em seguida, você deve executar o software do lado do cliente e enviar a solicitação. O servidor reagirá imediatamente quando o pedido vier do cliente.

Explore nossos cursos populares de engenharia de software

SL. Não Programas de Desenvolvimento de Software
1 Mestre em Ciência da Computação pela LJMU & IIITB Programa de Certificado de Segurança Cibernética Caltech CTME
2 Curso de Desenvolvimento Full Stack Programa PG em Blockchain
3 Programa de Pós-Graduação Executiva em Desenvolvimento de Software - Especialização em DevOps Veja todos os Cursos de Engenharia de Software

Terminal ou prompt de comando em execução

Para iniciar o Terminal ou Prompt de Comando, usaremos os seguintes comandos. Para começar, criaremos duas janelas, uma dedicada ao servidor e a outra ao cliente.

  1. Deixe o programa Server começar a ser executado.

Servidor $ java

  1. Em seguida, em um terminal diferente, inicie o aplicativo Cliente como,

cliente java $

O software mostrará “Connected” e “Client Accepted” conforme o servidor aceita o cliente.

  1. Na caixa Cliente, você pode começar a inserir mensagens. Aqui está um exemplo de uma entrada de cliente.

Oi! Isso marca minha primeira conexão de soquete profissional.

Que o Servidor obtém e exibe ao mesmo tempo

Oi! Isso marca minha primeira conexão de soquete profissional.

Sobre.

Fechando conexão

Como dito anteriormente, o envio “Over” encerra a conexão entre o Cliente e o Servidor.

Leia nossos artigos populares relacionados ao desenvolvimento de software

Como implementar a abstração de dados em Java? O que é classe interna em Java? Identificadores Java: Definição, Sintaxe e Exemplos
Entendendo o encapsulamento em OOPS com exemplos Argumentos de linha de comando em C explicados Os 10 principais recursos e características da computação em nuvem em 2022
Polimorfismo em Java: Conceitos, Tipos, Características e Exemplos Pacotes em Java e como usá-los? Tutorial do Git para iniciantes: aprenda o Git do zero

Conclusão

A programação Java Socket é uma ferramenta essencial que procede usando APIs de soquete para estabelecer comunicação entre aplicativos cliente-servidor locais e remotos. O conhecimento adequado da programação de soquetes pode melhorar as conexões de ida e volta do servidor e do cliente.

Se você quer aprender Java e dominar o desenvolvimento full-stack, temos o curso de alto impacto para você: Programa PG Executivo em Desenvolvimento de Software da upGrad – Especialização em Desenvolvimento Full Stack .

O programa de 13 meses do IIIT-B foi desenvolvido para ajudar os alunos a adquirir habilidades como Fundamentos de Ciência da Computação, Processos de Desenvolvimento de Software, APIs de back-end e IU interativa da Web. Você obtém acesso a um Bootcamp de Transição de Carreira de Software para codificadores não técnicos e novos para aprimorar suas habilidades de programação e suporte de carreira 360° do upGrad.

Aprenda cursos de desenvolvimento de software online das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.

Quais são os benefícios de aprender programação de soquete Java?

Os soquetes podem ser usados ​​para construir um aplicativo cliente-servidor, como um bate-papo, do ponto de vista da rede. Os soquetes são implementados no nível mais básico de segurança para descobrir se as portas de um sistema estão abertas, se existem programas padrão de scanner de porta como o Nmap e se eles podem ser utilizados em um nível baixo. Eles podem ser usados ​​da mesma maneira que o comando SSH - Secure Socket Shell pode ser usado para conectar a um servidor externo por meio de um shell reverso.

O que a função aceitar faz?

A função accept espera que um cliente se conecte ao servidor, bloqueando a permanência lá até que um argumento chegue. Em seguida, usamos a função getInputStream para obter entrada do soquete. O servidor é projetado para continuar a aceitar mensagens enviadas até que o comando Over seja recebido.

Por que os threads são usados ​​na programação de rede?

Queremos que vários clientes participem ao mesmo tempo. Portanto, devemos empregar threads no lado do servidor para que uma thread diferente possa lidar com cada solicitação do cliente. Vamos supor uma situação em que duas solicitações cheguem ao servidor simultaneamente. Como nenhum método para processar várias solicitações simultaneamente é fornecido em nosso aplicativo cliente-servidor simples, a solicitação que chegar um nanossegundo antes poderá se conectar ao servidor, enquanto a outra solicitação será recusada.