基于UDP相互发送消息的demo

一、demo功能与意义

本次demo主要是为了演示基于UDP协议的应用方式.由两段代码组成:

(1) UDPProvider端的作用是接收UDPSearcher端发送过来的数据,并回送到UDPSearcher一个字符串数据.

(2) UDPSearcher端的作用是向UDPProvider端发送一段数据,并接收由UDPProvider端发送过来的数据.

二、demo工作流程图

三、demo源代码

(1) UDPProvider端代码

package socket.SocketDemo2.demo1;

import socket.SocketDemo2.MessageCreator;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

/**
 * Created by lifuqing on  2019/4/8 15:39
 * Email : [email protected]
 */
public class UDPProvider {
    public static void main(String [] args) throws IOException {
        System.out.println("UDPProvider Started.");

        // 监听20000 端口
        DatagramSocket ds = new DatagramSocket(20000);

        // 构建接收实体
        final byte[] buf = new byte[512];
        DatagramPacket receivePack = new DatagramPacket(buf, buf.length);

        // 接收数据并将数据放到实体receivePack中
        ds.receive(receivePack);

        // 打印接收到的信息与发送者的信息
        // 发送者的IP地址
        String ip = receivePack.getAddress().getHostAddress();//从实体中获得IP地址
        int port = receivePack.getPort();//端口
        int dataLen = receivePack.getLength();//大小
        String data = new String(receivePack.getData(), 0, dataLen);//获得数据

        //输出
        System.out.println("UDPProvider receive form ip:" + ip + "\tport:" + port + "\tdata:" + data);


        //构建一份回送数据
        String responseData = "Receive data with len:"+data.length();
        byte[] responseDataBytes = responseData.getBytes();


        // 直接根据发送者构建一份回送信息
        DatagramPacket responsePacket = new DatagramPacket(responseDataBytes,
                responseDataBytes.length,
                receivePack.getAddress(),
                receivePack.getPort());

        ds.send(responsePacket);
        System.out.println("UDPProvider Finished.");
        ds.close();
        }


}

(2) UDPSearcher端代码

package socket.SocketDemo2.demo1;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

/**
 * Created by lifuqing on  2019/4/8 15:39
 * Email : [email protected]
 */
public class UDPSearcher {
    public static void main(String [] args) throws IOException {
        System.out.println("UDPSearcher Started.");

        // 作为搜索方,无需指定端口
        DatagramSocket ds = new DatagramSocket();

        //构建一份请求数据
        String requestData = "Hello world";
        byte[] requestDataBytes = requestData.getBytes();

        // 直接根据发送者构建一份回送信息
        DatagramPacket responsePacket = new DatagramPacket(requestDataBytes, requestDataBytes.length);
        responsePacket.setAddress(InetAddress.getLocalHost());
        responsePacket.setPort(20000);

        //发送
        ds.send(responsePacket);

        // 构建接收实体
        final byte[] buf = new byte[512];
        DatagramPacket receivePack = new DatagramPacket(buf, buf.length);

        // 接收数据并将数据放到实体receivePack中
        ds.receive(receivePack);

        // 打印接收到的信息与发送者的信息
        // 发送者的IP地址
        String ip = receivePack.getAddress().getHostAddress();//从实体中获得IP地址
        int port = receivePack.getPort();//端口
        int dataLen = receivePack.getLength();//大小
        String data = new String(receivePack.getData(), 0, dataLen);//获得数据

        //输出
        System.out.println("UDPSearcher receive form ip:" + ip + "\tport:" + port + "\tdata:" + data);

        //完成
        System.out.println("UDPSearcher Finished.");
        ds.close();
    }
}

四、总结

本文介绍了最简单的一种UDP应用的demo,并画了一副demo工作流程图,用以梳理UDP工作流程.如有不足之处,清大家多多指教.

猜你喜欢

转载自blog.csdn.net/weixin_39527812/article/details/89101858