Usando o servidor Java para realizar o envio e recebimento de mensagens UDP (multithreading)

Introdução:

Neste blog, apresentaremos como usar o servidor Java para enviar e receber mensagens UDP e lidar com solicitações simultâneas por meio de multithreading. UDP (User Datagram Protocol) é um protocolo de transmissão sem conexão e não confiável, adequado para cenários de aplicação com altos requisitos de tempo real, como jogos em tempo real e comunicação de voz.
insira a descrição da imagem aqui

etapa:

1. Importe as bibliotecas necessárias

Primeiro, precisamos importar a biblioteca de programação de rede fornecida pelo Java, incluindo java.nete java.io.

2. Crie código do lado do servidor

No lado do servidor, precisamos criar um objeto Socket e vinculá-lo à porta especificada. Em seguida, crie um loop infinito no qual a solicitação do cliente seja recebida e processada adequadamente. Como o UDP não tem conexão, podemos DatagramSocketfazer isso por meio de classes.

3. Crie o código do cliente

No lado do cliente, também precisamos criar um objeto Socket e especificar o endereço IP e o número da porta do servidor. Em seguida, envie e receba datagramas UDP por meio do objeto Socket.

4. Implementar multithreading

Se quisermos que o servidor seja capaz de lidar com solicitações de vários clientes, podemos usar multithreading para obter processamento simultâneo. Sempre que uma nova solicitação chega ao servidor, um novo thread é criado para tratar a solicitação.

5. Teste

Depois que o código do servidor e do cliente estiver concluído, podemos executá-los separadamente e observar a saída do console. Certifique-se de que o servidor possa receber a mensagem enviada pelo cliente e processá-la corretamente.

Código de amostra:

A seguir está um exemplo de código Java simples que demonstra como implementar o envio e recebimento de mensagens UDP (multithread):

// 服务器端代码
import java.io.*;
import java.net.*;

public class UDPServer {
    
    
   public static void main(String args[]) throws Exception {
    
    
      DatagramSocket serverSocket = new DatagramSocket(9876);
      byte[] receiveData = new byte[1024];
      byte[] sendData;
      
      while (true) {
    
    
         DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
         serverSocket.receive(receivePacket);
         
         String sentence = new String(receivePacket.getData());
         InetAddress IPAddress = receivePacket.getAddress();
         int port = receivePacket.getPort();
         
         String capitalizedSentence = sentence.toUpperCase();
         sendData = capitalizedSentence.getBytes();
         
         DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
         serverSocket.send(sendPacket);
      }
   }
}

// 客户端代码
import java.io.*;
import java.net.*;

public class UDPClient {
    
    
   public static void main(String args[]) throws Exception {
    
    
      BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
      DatagramSocket clientSocket = new DatagramSocket();
      InetAddress IPAddress = InetAddress.getByName("localhost");
      byte[] sendData;
      byte[] receiveData = new byte[1024];
      
      String sentence = inFromUser.readLine();
      sendData = sentence.getBytes();
      
      DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
      clientSocket.send(sendPacket);
      
      DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
      clientSocket.receive(receivePacket);
      
      String modifiedSentence = new String(receivePacket.getData());
      System.out.println("FROM SERVER:" + modifiedSentence);
      
      clientSocket.close();
   }
}

descrição da função

Claro, aqui está uma descrição mais detalhada da interface de classe e função:

Descrição do código do lado do servidor:

  1. DatagramSocketClasse: Representa um soquete para envio e recebimento de datagramas UDP. Possui os seguintes métodos comuns:

    • DatagramSocket(int port): crie um objeto DatagramSocket vinculado à porta especificada.
    • void receive(DatagramPacket p): Armazene o datagrama UDP recebido no objeto DatagramPacket fornecido.
    • void send(DatagramPacket p): Envia um datagrama UDP no objeto DatagramPacket fornecido.
  2. DatagramPacketClasse: Representa um datagrama UDP. Possui os seguintes métodos comuns:

    • DatagramPacket(byte[] buf, int length): Crie um objeto DatagramPacket com comprimento especificado para receber dados.
    • DatagramPacket(byte[] buf, int length, InetAddress address, int port): Crie um objeto DatagramPacket com um comprimento especificado, que é usado para enviar dados para o endereço IP e número de porta especificados.
    • byte[] getData(): Retorna os dados recebidos ou enviados.
    • InetAddress getAddress(): Retorna o endereço IP do host remoto.
    • int getPort(): Retorna o número da porta do host remoto.
  3. StringClasse: Representa um objeto string. Possui os seguintes métodos comuns:

    • String(byte[] bytes): cria um novo objeto string usando a matriz de bytes especificada.
    • String(byte[] bytes, int offset, int length): cria um novo objeto string usando uma parte da matriz de bytes especificada.
    • byte[] getBytes(): converte uma string em uma matriz de bytes.

Descrição do código do cliente:

  1. BufferedReaderClasse: Um buffer para leitura de dados de texto de um fluxo de entrada. Possui os seguintes métodos comuns:

    • BufferedReader(Reader reader): crie um novo leitor em buffer.
    • String readLine(): Leia uma linha de texto e retorne-a.
  2. InputStreamReaderClasse: Uma ponte que converte fluxos de bytes em fluxos de caracteres. Possui os seguintes construtores comuns:

    • InputStreamReader(InputStream in): cria um leitor de fluxo de entrada que converte um fluxo de bytes em um fluxo de caracteres.
  3. DatagramSocketPara descrições de classes e DatagramPacketclasses, consulte a explicação no código do lado do servidor.

Espero que essas descrições detalhadas da interface de classes e funções possam ajudá-lo a entender e aplicar melhor o processo de implementação de envio e recebimento de mensagens UDP (multithreading). Se você tiver alguma dúvida, fique à vontade para perguntar.

Resumir:

No código do lado do servidor, usamos classes DatagramSockete DatagramPacketpara lidar com envio e recebimento de UDP. No código do cliente, usamos BufferedReadera classe and InputStreamReaderpara ler a entrada do usuário e a classe DatagramSocketand DatagramPacketpara enviar e receber datagramas UDP.

Através deste blog, aprendemos como usar o servidor Java para enviar e receber mensagens UDP e lidar com solicitações simultâneas de maneira multithread. Isto é muito útil para cenários de aplicação com altos requisitos de tempo real, como desenvolvimento de jogos, comunicação de voz, etc. Espero que este artigo possa ajudá-lo a compreender e aplicar a programação de redes UDP. Se você tiver alguma dúvida, fique à vontade para deixar uma mensagem.

Acho que você gosta

Origin blog.csdn.net/lzyzuixin/article/details/132331271
Recomendado
Clasificación