Carregando...
Carregando...
Ajude a melhorar a plataforma
Em um projeto de desenvolvimento de aplicações de rede em Java, um programador se depara com o desafio de balancear a necessidade de confiabilidade com a demanda por transmissões de dados rápidas e em tempo real. Enquanto algumas partes da aplicação requerem uma troca de informações sem falhas, onde cada pacote é crucial, outras priorizam a velocidade e o fluxo contínuo de dados, onde o desempenho em tempo real é mais crítico que a integridade absoluta dos pacotes de dados. Diante desse cenário, o desenvolvedor opta por utilizar sockets TCP para a confiabilidade e UDP para a rapidez.
Considere os seguintes fragmentos de código exemplificando a implementação de cada protocolo:
TCP:
ServerSocket serverSocket = new ServerSocket(portNumber);
Socket clientSocket = serverSocket.accept();
InputStream in = clientSocket.getInputStream();
OutputStream out = clientSocket.getOutputStream();
// Código para ler e escrever dados do in e out...
UDP:
DatagramSocket udpSocket = new DatagramSocket();
byte[] sendBuffer = new byte[1024];
DatagramPacket sendPacket = new DatagramPacket(sendBuffer, sendBuffer.length, address, port);
udpSocket.send(sendPacket);
// Código para receber pacotes...
Baseando-se na análise dos fragmentos de código para os respectivos protocolos, assinale a alternativa que melhor descreve a implementação correta e as características dos sockets TCP e UDP em Java:
Explique melhor esta questão
Abre o Tutor com o enunciado e as alternativas já no campo — você revisa e envia.
Esta questão foi verificada por um de nossos administradores.
🎓 Gabarito Comentado (AVA):
A alternativa "A implementação UDP utiliza DatagramSocket e DatagramPacket para enviar e receber mensagens sem garantia de ordem ou entrega, ideal para situações em que a velocidade é prioritária e perdas ocasionais de pacotes são aceitáveis" está correta pois descreve com precisão a utilização de classes e métodos no Java para a implementação de sockets UDP. A natureza do UDP, que não garante a entrega ou a ordem dos pacotes, é ideal para aplicações que requerem transferências rápidas, como streaming de vídeo ou jogos online.
A alternativa "A comunicação via socket TCP no Java não permite a transmissão de dados em tempo real, pois exige a confirmação de recebimento de cada pacote, resultando em latências que inviabilizam qualquer aplicação que necessite de transmissões rápidas" está incorreta pois, embora o TCP seja mais lento que o UDP devido às confirmações de recebimento, ele ainda é usado em aplicações em tempo real que exigem confiabilidade, como chamadas VoIP ou jogos que necessitam de integridade de dados.
A alternativa "No protocolo UDP, a classe ServerSocket é utilizada para escutar por datagramas em uma porta específica, enquanto a classe Socket é empregada para enviar datagramas aos clientes" está incorreta pois no protocolo UDP, a classe DatagramSocket é usada tanto para enviar quanto para receber datagramas, não as classes ServerSocket ou Socket, que são usadas com o protocolo TCP.
A alternativa "A utilização de ObjectInputStream e ObjectOutputStream com sockets UDP permite a serialização e desserialização de objetos durante a transmissão, garantindo a integridade dos dados sem necessidade de confirmação de recebimento" está incorreta pois, enquanto a serialização e desserialização de objetos podem ser realizadas com UDP, não há garantia de integridade dos dados sem confirmação de recebimento, o que é uma característica inerente ao TCP e não ao UDP.
A alternativa "Na programação de sockets TCP, a execução do método accept() na classe ServerSocket é opcional e pode ser substituída por uma implementação personalizada de polling para novas conexões, a fim de aumentar a velocidade de comunicação" está incorreta pois o método accept() é fundamental na programação de sockets TCP para aguardar e aceitar conexões de entrada; ele não é opcional e não pode ser substituído por polling sem alterar o comportamento fundamental da conexão TCP.