2021-04-18 11:30  阅读(59)
文章分类:Java 基础教程 文章标签:JavaJava 教程
©  原文作者:w3cschool 原文地址:https://www.w3cschool.cn/java/java-network-tcp-server.html

Java网络教程 - Java网络UDP服务器

以下代码显示了如何编写UDP回显服务器:

    DatagramSocket socket  = new DatagramSocket(12345);
    DatagramPacket packet  = new DatagramPacket(new byte[1024],  1024);
    while(true)  {
        // Receive   the   packet socket.
        receive(packet);
        
        //Send back  the   same packet to the   sender socket.
        send(packet);
    }
    
    

Echo 服务器

基于UDP套接字的Echo服务器

    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    
    public class Main {
      public static void main(String[] args) throws Exception {
        final int LOCAL_PORT = 12345;
        final String SERVER_NAME = "localhost";
        DatagramSocket udpSocket = new DatagramSocket(LOCAL_PORT,
            InetAddress.getByName(SERVER_NAME));
    
        System.out.println("Created UDP  server socket at "
            + udpSocket.getLocalSocketAddress() + "...");
        while (true) {
          System.out.println("Waiting for a  UDP  packet...");
          DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
          udpSocket.receive(packet);
          displayPacketDetails(packet);
          udpSocket.send(packet);
        }
      }
      public static void displayPacketDetails(DatagramPacket packet) {
        byte[] msgBuffer = packet.getData();
        int length = packet.getLength();
        int offset = packet.getOffset();
    
        int remotePort = packet.getPort();
        InetAddress remoteAddr = packet.getAddress();
        String msg = new String(msgBuffer, offset, length);
    
        System.out.println("Received a  packet:[IP Address=" + remoteAddr
            + ", port=" + remotePort + ", message=" + msg + "]");
      }
    }
    

上面的代码生成以下结果。

202104181130_1.png

Echo 客户端

基于UDP套接字的Echo客户端

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    
    public class Main {
      public static void main(String[] args) throws Exception {
        DatagramSocket udpSocket = new DatagramSocket();
        String msg = null;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Please enter a  message  (Bye  to quit):");
        while ((msg = br.readLine()) != null) {
          if (msg.equalsIgnoreCase("bye")) {
            break;
          }
          DatagramPacket packet = Main.getPacket(msg);
          udpSocket.send(packet);
          udpSocket.receive(packet);
          displayPacketDetails(packet);
          System.out.print("Please enter a  message  (Bye  to quit):");
        }
        udpSocket.close();
      }
      public static void displayPacketDetails(DatagramPacket packet) {
        byte[] msgBuffer = packet.getData();
        int length = packet.getLength();
        int offset = packet.getOffset();
        int remotePort = packet.getPort();
        InetAddress remoteAddr = packet.getAddress();
        String msg = new String(msgBuffer, offset, length);
        System.out.println("[Server at IP  Address=" + remoteAddr + ", port="
            + remotePort + "]: " + msg);
      }
      public static DatagramPacket getPacket(String msg)
          throws UnknownHostException {
        int PACKET_MAX_LENGTH = 1024;
        byte[] msgBuffer = msg.getBytes();
    
        int length = msgBuffer.length;
        if (length > PACKET_MAX_LENGTH) {
          length = PACKET_MAX_LENGTH;
        }
        DatagramPacket packet = new DatagramPacket(msgBuffer, length);
        InetAddress serverIPAddress = InetAddress.getByName("localhost");
        packet.setAddress(serverIPAddress);
        packet.setPort(15900);
        return packet;
      }
    }
    

上面的代码生成以下结果。

202104181130_2.png

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Java 网络UDP服务器
上一篇
Java 网络UDP套接字
下一篇
Java 网络UDP多播