[Java]简单实现UDP

不废话直接上源码,为了更好的理解我分了服务端和客户端(实际上UDP是不分的)

服务端

import java.net.*;//网络类
import java.util.*;//工具类

public class UDPServer {
    private static DatagramSocket server;
    private static int port = 1024;//监听的端口

    public static void main(String[] args) {
        try {
            server = new DatagramSocket(port);
            //数据接收缓冲
            byte[] buffer = new byte[1024];
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
            System.out.println("监听端口" + port + "成功, 等待数据接收...");
            while (true) {
                //阻塞接收数据
                server.receive(packet);
                //字节数据转文本
                String data = new String(packet.getData(), 0, packet.getLength());
                //客户端数据
                ArrayList<Object> client = new ArrayList<Object>();
                client.add(packet.getAddress());
                client.add(packet.getPort());
                receive(client, data);
            }
        } catch (Exception e) {
            System.out.println("监听端口" + port + "错误, 可能原因: \n1.端口被占用\n2.逻辑有问题\n3.监听小于1024的保护端口");
        }
    }

    //接收数据回调
    public static void receive(ArrayList client, String data) {
        /*System.out.println("接收到: " + data);
        send(client, data);*/
    }

    //发送数据
    public static void send(ArrayList client, String data) {
        try {
            DatagramPacket packet = new DatagramPacket(data.getBytes(), data.getBytes().length, (InetAddress)client.get(0), (int)client.get(1));
            server.send(packet);
        } catch (Exception e) {
            System.out.println("发送数据错误");
        }
    }
}

客户端

import java.net.*;//网络类

public class UDPClient {
    private static DatagramSocket client;
    private static String ip = "localhost";//服务器IP
    private static int port = 1024;//服务器端口

    public static void main(String[] args) {
        try {
            client = new DatagramSocket();
            //数据接收缓冲
            byte[] buffer = new byte[1024];
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
            while (true) {
                //阻塞接收数据
                client.receive(packet);
                //字节数据转文本
                String data = new String(packet.getData(), 0, packet.getLength());
                receive(data);
            }
        } catch (Exception e) {
            System.out.println("发生错误");
        }
    }

    //接收数据回调
    public static void receive(String data) {
        //System.out.println(data);
    }

    //发送数据
    public static void send(String data) {
        try {
            DatagramPacket packet = new DatagramPacket(data.getBytes(), data.getBytes().length, InetAddress.getByName(ip), port);
            client.send(packet);
        } catch (Exception e) {
            System.out.println("发送数据错误");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值