Coder Social home page Coder Social logo

sockets-java's Introduction

GitHub license Java CI with Gradle

Exemplos de sockets TCP e UDP com a API Java I/O

Aviso de isenção de responsabilidade

Para os códigos aqui disponibilizados optou-se por uma organização simplificada para facilitar a leitura e entendimento. Contudo, o código aqui apresentado tem grande potencial de melhorias para torná-lo adequado para atender situações reais ou mesmo, para atender demandas das listas de exercícios e projetos desenvolvidos dentro da disciplina.

Java possui diferentes APIs para lidar com operações de I/O:. Aqui é apresentado um exemplo com a API Java I/O, que segue modelo bloqueante.

A API Java NIO.2 permite desenvolver aplicações com comunicação assíncrona, porém seu entendimento demanda mais tempo. Veja mais detalhes na documentação oficial da Oracle.

No arquivo build.gradle foram criadas tarefas para permitir executar servidor e o cliente (TCP e UDP) diretamente com o gradle. Abaixo são apresentados os comandos para execução dos exemplos.

Sockets TCP

O servidor cria uma Thread para atender cada cliente e essa Thread é destruída após isso.

%%{init: {'sequence': {'mirrorActors':false} } }%%
sequenceDiagram
    Servidor ->> Servidor: cria socket
    loop Servidor aguarda por conexões de Clientes 
        Cliente ->> Servidor: conecta
        create participant AtenderCliente 
        Servidor -->> AtenderCliente: Criar thread com dados do cliente
        end
        Cliente ->> AtenderCliente: Olá, servidor!
        AtenderCliente ->> AtenderCliente: imprimir mensagem recebida
        AtenderCliente -->> Cliente: Mensagem recebida com sucesso!
        Cliente ->> Cliente: imprimir resposta do servidor
        destroy AtenderCliente
  1. Servidor cria socket TCP e aguarda por conexões
  2. Cliente conecta no servidor
  3. Servidor cria uma Thread (AtenderCliente) para atender o Cliente
  4. Cliente envia mensagem de saudação
  5. AtenderCliente imprime a mensagem recebida no console
  6. AtenderCliente envia resposta ao Cliente
  7. Cliente imprime a mensagem recebida no console
  8. AtenderCliente é encerrada
  9. Cliente é encerrado

Como executar o servidor TCP

Abra um terminal e execute uma das linhas abaixo de acordo com o sistema operacional do computador que esteja usando.

# No Linux ou macOS
./gradlew -q servidorTcp

# No Windows
gradle.bat -q servidorTcp

Como executar o cliente TCP

Abra um outro terminal e execute uma das linhas abaixo.

# Tentará conectar na porta 12345 na localhost
./gradlew -q clienteTcp

# Passando o IP e porta do tcp como argumentos de linha de comando
./gradlew -q clienteTcp --args "localhost 12345"

Sockets UDP

%%{init: {'sequence': {'mirrorActors':false} } }%%
sequenceDiagram
    Servidor ->> Servidor: cria socket
    Cliente ->> Cliente: cria socket
    Cliente ->> Servidor: Olá, eu sou o cliente UDP!
    Servidor ->> Servidor: imprime mensagem recebida
    Servidor ->> Cliente: Olá, eu sou o servidor UDP!
    Cliente ->> Cliente: imprime mensagem recebida
  1. Servidor cria socket UDP
  2. Cliente cria socket UDP
  3. Servidor aguarda por datagrama
  4. Cliente envia datagrama
  5. Cliente aguarda por datagrama
  6. Servidor imprime no console
  7. Servidor envia datagrama
  8. Cliente imprime no console

Como executar o servidor UDP

Abra um terminal e execute a linha abaixo.

./gradlew -q servidorUdp

Como executar o cliente UDP

Abra um outro terminal e execute uma das linhas abaixo.

# Tentará conectar na porta 9876 na localhost
./gradlew -q clienteUdp

# Passando o IP e porta do tcp como argumentos de linha de comando
./gradlew -q clienteUdp --args "localhost 9876"

Comunicação Multicast

Neste exemplo, o servidor envia periodicamente uma mensagem com sua hora local para um grupo de clientes que estão escutando em um endereço multicast.

O cliente, para todas interfaces de rede, escuta em um endereço multicast e imprime no console a mensagem recebida do servidor.

captura de tela do cliente e servidor multicast

Como executar o servidor Multicast

Abra um terminal e execute a linha abaixo.

./gradlew -q servidorMulticast

Como executar o cliente Multicast

Abra um outro terminal e execute a linha abaixo.

./gradlew -q clienteMulticast

Para encerrar a execução do servidor ou do cliente, pressione Ctrl+C no terminal onde o programa está sendo executado.

Para ambos os casos, o endereço multicast utilizado é 231.0.0.0 e a porta 8888. É possível passar outros valores como argumentos de linha de comando.

./gradlew -q servidorMulticast --args "231.0.0.1 8889"
./gradlew -q clienteMulticast  --args "231.0.0.1 8889"

Referências

sockets-java's People

Contributors

emersonmello avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.