📌  相关文章
📜  使用 DatagramPacket 和 DatagramSocket 类创建服务器-客户端应用程序(1)

📅  最后修改于: 2023-12-03 15:22:10.616000             🧑  作者: Mango

使用 DatagramPacket 和 DatagramSocket 类创建服务器-客户端应用程序

在本篇文章中,我们将介绍如何使用 Java 中的 DatagramPacket 和 DatagramSocket 类创建一个简单的服务器-客户端应用程序。这两个类提供了一种无连接的通信协议,可以在网络中发送短消息。使用这些类可以实现网络通信,而无需建立一个繁琐的连接。

介绍

DatagramSocket 是 Java 中一个用于发送和接收 UDP 数据包的实现。DatagramPacket 是一个封装了数据和相关元数据的对象,可用于在网络上传输数据。

在本文中,我们将创建一个基于 UDP 协议的一个简单的调用服务器-客户端应用程序,客户端将会从消息队列中读取一个输入字符串,将该字符串发送到服务器。服务器将读取该消息并将其打印到终端,然后将消息的反转字符串返回给客户端。

程序源码

下面是客户端和服务器的代码片段:

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

public class ClientExample {
  public static void main(String[] args) throws Exception {

    // 创建一个 UDP 客户端套接字
    DatagramSocket clientSocket = new DatagramSocket();

    // 获取服务器的 IP 地址
    InetAddress serverIPAddress = InetAddress.getByName("localhost");

    // 定义一个消息
    String message = "hello, world!";

    // 创建一个数据包
    DatagramPacket sendPacket = new DatagramPacket(message.getBytes(), message.length(), serverIPAddress, 9876);
      
    // 发送数据包
    clientSocket.send(sendPacket);

    // 创建一个空白的数据包
    DatagramPacket receivePacket = new DatagramPacket(new byte[1024], 1024);

    // 接收反转消息
    clientSocket.receive(receivePacket);

    // 打印反转消息
    String modifiedMessage = new String(receivePacket.getData());
    System.out.println("FROM SERVER:" + modifiedMessage);

    // 关闭客户端套接字
    clientSocket.close();
  }
}
// 服务器代码
import java.net.*;
import java.io.*;

public class ServerExample {
  public static void main(String[] args) throws Exception {

    // 创建一个 UDP 服务器端套接字
    DatagramSocket serverSocket = new DatagramSocket(9876);

    while (true) {

      // 创建一个空白数据包
      DatagramPacket receivePacket = new DatagramPacket(new byte[1024], 1024);

      // 接收数据包
      serverSocket.receive(receivePacket);

      // 从数据包中提取出消息
      String message = new String(receivePacket.getData());

      // 将消息打印到终端
      System.out.println("RECEIVED:" + message);

      // 反转消息字符
      String modifiedMessage = new StringBuilder(message).reverse().toString();

      // 获取客户端的地址和端口号
      InetAddress clientIPAddress = receivePacket.getAddress();
      int clientPort = receivePacket.getPort();

      // 创建一个新的数据包
      DatagramPacket sendPacket = new DatagramPacket(modifiedMessage.getBytes(), modifiedMessage.length(), clientIPAddress, clientPort);

      // 发送数据包
      serverSocket.send(sendPacket);
    }
  }
}
解释说明

在客户端代码中,我们首先创建了一个 UDP 客户端套接字。然后,我们获取了服务器的 IP 地址,初始化了一个消息,并构造了一个发送数据包。我们在客户端套接字上通过调用 send() 方法将数据包发送出去。

在服务器代码中,我们首先创建了一个 UDP 服务器端套接字。然后,我们进入一个无限循环并接受一个空白的数据包。我们从数据包中提取出消息并将其打印到终端。然后我们将该消息反转,并将反转后的消息发送给客户端。

结论

在本篇文章中,我们介绍了使用 Java 中的 DatagramPacket 和 DatagramSocket 类创建了一个简单的调用服务器-客户端应用程序,以进行无连接协议的通信。我们通过创建一个基于 UDP 协议的应用程序,向读者展示了如何在 Java 中实现这一功能。本文中的代码仅仅是一个简单的演示,读者可以自己修改代码来实现自己的应用程序。