Java 25 UDP在Java中的实现

DatagramSocket 此类表示用于发送和接收数据报数据包的套接字。
DatagramPacket 该类表示数据报包。


DatagramSocket


DatagramSocket构造方法

DatagramSocket常用方法

DatagramSocket常用方法

DatagramPacket 构造方法 确定创建接受 还是发送的数据包


构造方法

方法

建立UDP发送端
1 建立可以实现UDP传输的socket服务
2 明确具体发送的数据
3 通过socket服务将具体的数据发送出去
4 关闭服务

public class UDPSend_test {
    public static void main(String[] args) throws IOException {
//       创建UDP服务
        DatagramSocket ds=new DatagramSocket();
//        明确数据
        String str="UDP 来了";
//        发送数据 将数据封装到数据包中
        byte[] buf=str.getBytes();
//        将数据封装到数据包对象中 数据包会明确目的地址 和端口
//        构造一个数据包,发送长度为 length的数据包到指定主机上的指定端口号。
        DatagramPacket dp=new DatagramPacket(buf,buf.length,
                InetAddress.getByName("192.168.1.6"),10000);
//        将数据包发送
        ds.send(dp);
//        关闭udp服务
        ds.close();
    }
}

创建接收端
创建socket服务 给接收端明确端口
收数据
将其中所需要的数据取出来 ip data 端口

public class UDPRece_test {
    public static void main(String[] args) throws IOException {
        /** 创建接受端
        * 创建socket服务 给接受端明确端口
        * 收数据
        * 将其中所需要的数据取出来 ip data 端口*/
//        使用socket的接收方法 接收数据
        DatagramSocket ds=new DatagramSocket(10000);
//        使用socket的接收方法 接收数据 需要将接到的数据存储到数据包中
//        可以通过数据包对象的方法对收到的数据进行解析
//        创建数据包
        byte[] bytes=new byte[1024];
        DatagramPacket dp=new DatagramPacket(bytes,bytes.length);
//        通过数据包的方法解析收到的数据 使用数据包的方法
        ds.receive(dp);
        String ip=dp.getAddress().getHostAddress();
        int port=dp.getPort();
        String s=new String(dp.getData(),0,dp.getLength());
        System.out.println(ip+":"+port+"---"+s);
        ds.close();
    }
}

实例:
聊天室

通过UDP协议
一个负责发送数据任务 一个负责接收数据任务 两个任务同时执行 需要多线程

public class UDP_test {
    public static void main(String[] args) throws SocketException {
//        创建发送端 并明确端口
        DatagramSocket send=new DatagramSocket(10002);
//        创建接收端 并明确端口
        DatagramSocket rece=new DatagramSocket(10001);
        new Thread(new Send(send)).start();
        new Thread(new Rece(rece)).start();
    }
}
//负责发送的任务 通过UDPsocket 发送
class Send implements Runnable{
    private DatagramSocket ds;

    public Send(DatagramSocket ds) {
        this.ds = ds;
    }
    @Override
    public void run() {
//         1.要发送的数据来自于哪里 键盘
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
//        读取数据
        String line=null;
        while (true)
        {
            try {
                if (!((line=br.readLine())!=null))break;
            } catch (IOException e) {
                e.printStackTrace();
            }
//       2.将数据封装到数据包中
            byte[] bytes=line.getBytes();
            DatagramPacket dp= null;
            try {
//                明确接收端的ip地址 和端口
                dp = new DatagramPacket(bytes,bytes.length,
                        InetAddress.getByName("192.168.1.6"),10001);
            } catch (UnknownHostException e) {
                e.printStackTrace();
            }
//        3.数据包发送
            try {
                ds.send(dp);
            } catch (IOException e) {
                e.printStackTrace();
            }
            if ("over".equals(line)){
                break;
            }
        }
        ds.close();
    }
}
//负责接收的任务
class Rece implements Runnable{
    private DatagramSocket ds;

    public Rece(DatagramSocket ds) {
        this.ds = ds;
    }
    @Override
    public void run(){
        while (true) {
//        接收的数据要存储到数据包中 而数据包中有字节数组
            byte[] bytes = new byte[1024];
            DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
//        将收到的数据存储到数据包重
            try {
                ds.receive(dp);
            } catch (IOException e) {
                e.printStackTrace();
            }
            String ip = dp.getAddress().getHostAddress();
            String data = new String(bytes, 0, dp.getLength());
            System.out.println(ip + ":" + data);
            if ("over".equals(data)) {
                System.out.println(ip + "离开聊天室");
            }
        }
        }
}

你可能感兴趣的:(Java 25 UDP在Java中的实现)