发送端
package com.phil.socket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class TestUDP1 {
    public static void main(String[] args) throws Exception {
        DatagramSocket socket = new DatagramSocket();
//        String dataString = "你好  我是UDP1";
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        while (true) {
            String string = reader.readLine();
            DatagramPacket sendData = new DatagramPacket(string.getBytes(), 0, string.getBytes().length, InetAddress.getByName("localhost"), 8888);
            socket.send(sendData);
            if (string.equals("88"))
                break;
        }
        socket.close();
    }
}
接收端
package com.phil.socket;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class TestUDP2 {
    public static void main(String[] args) throws Exception {
        DatagramSocket socket = new DatagramSocket(8888);
        byte[] buffer = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
        while (true) {
            socket.receive(packet);
            String s = new String(packet.getData());
            System.out.println(s);
            if (s.equals("88"))
                break;
        }
        socket.close();
    }
}
发送工具类
package com.phil.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
public class SendTool implements Runnable {
    private DatagramSocket socket = null;
    private BufferedReader reader = null;
    private int fromPort;
    private String toIP;
    private int toPort;
    public SendTool(int fromPort, String toIP, int toPort) {
        this.fromPort = fromPort;
        this.toIP = toIP;
        this.toPort = toPort;
        try {
            this.socket = new DatagramSocket(this.fromPort);
        }catch (Exception e) {
            e.printStackTrace();
        }
        this.reader = new BufferedReader(new InputStreamReader(System.in));
    }
    @Override
    public void run() {
        while (true) {
            String dataString = null;
            try {
                dataString = this.reader.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            byte[] bytes = dataString.getBytes();
            DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length, new InetSocketAddress(this.toIP, this.toPort));
            try {
                this.socket.send(packet);
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (dataString.equals("88"))
                break;
        }
        this.socket.close();
    }
}
接收工具类
package com.phil.socket;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class RecieveTool implements Runnable {
    private DatagramSocket socket = null;
    private int port;
    private String name;
    public RecieveTool(int port, String name) {
        this.port = port;
        this.name = name;
        try {
            this.socket = new DatagramSocket(port);
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
    @Override
    public void run() {
        while (true) {
            try {
                byte[] buffer = new byte[1024];
                DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
                if (this.socket==null) {
                    System.out.println("傻逼哦");
                    break;
                }
                this.socket.receive(packet);
                String dataString = new String(packet.getData());
                System.out.println(this.name + ": " + dataString);
                if (dataString.equals("88"))
                    break;
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
        this.socket.close();
    }
}
角色1(儿子)
package com.phil.socket;
public class Son {
    public static void main(String[] args) {
        new Thread(new SendTool(6666, "127.0.0.1", 7788)).start();
        new Thread(new RecieveTool(6677, "老子")).start();
    }
}
角色2(老子)
package com.phil.socket;
public class Father {
    public static void main(String[] args) {
        new Thread(new SendTool(7777,"localhost",6677)).start();
        new Thread(new RecieveTool(7788,"儿子")).start();
    }
}
原文:https://www.cnblogs.com/philx/p/14029889.html