java实现udp发送端和接收端

 发送端:

package demo02;

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

/*
 * 实现UDP协议的发送端:
 *     实现封装数据的类 java.net.DatagramPacket 将你的数据包装    
 *     实现数据传输类    java.net.DatagramSocket 将数据包发出去
 *    
 *    实现步骤:
 *        1.创建DatagramPacket对象,封装数据,接收的地址和端口
 *        2.创建DatagramSocket对象,
 *        3.调用DatagramSocket类的方法send,发送数据包
 *        4.关闭资源
 *
 *    DatagramPacket构造方法:
 *        DatagramPacket(byte[] buf,int length,InetAddress address,int port)
 *        
 *    DatagramSocket构造方法:
 *        DatagramSocket()空参数
 *        方法:send(DatagramPacket d)
 *
 *
 */
public class UDPSend {
    public static void main(String[] args) throws IOException {
        //创建数据包对象,封装要发送的数据,接受端IP,端口
        byte[] data="你好UDP".getBytes();
        //创建InetAddress对象,封装自己的IP地址
        InetAddress inet=InetAddress.getByName("127.0.0.1");
        DatagramPacket dp=new DatagramPacket(data,data.length,inet,6000);
        //创建DatagramSocket对象,数据包的发送和接受对象
        DatagramSocket ds=new DatagramSocket();
        //调用ds对象的方法send,发送数据包
        ds.send(dp);
        ds.close();
                                
    }
}

 接收端

package demo01;

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

/*
 *     实现UDP接收端
 *         实现封装数据包java.net.DatagramPacket 将数据接收
 *         实现输出传输    java.net.DatagramSocket 接受数据包
 *         
 *     实现步骤:
 *         1.创建DatagramSocket对象,绑定端口号
 *               要和发送数据端口号一致
 *         2.创建字节数组,接受发来的数组
 *         3.创建数据包对象DatagramPacket
 *         4.调用DatagramSocket对象方法 receive(DatagramPacket dp)
 *               接受数据,数据放在数据包中
 *         5.拆包
 *                 发送的IP地址
 *                  数据包对象DatagramPacket()方法getAddress()获取的是发送端的IP地址对象
 *                 接受到的字节个数
 *                  数据包对象DatagramPacket()方法getLength()
 *                 发送方的端口号
 *              数据包对象DatagramPacket()方法getPort()
 *         6.关闭资源
 */
public class UDPReceive {
    public static void main(String[] args) throws IOException {
        //创建数据包传输对象DatagramSocket 绑定端口号
        DatagramSocket ds=new DatagramSocket(6000);
        //创建字节数组
        byte[] data=new byte[1024];
        //创建数据包对象,传递字节数组
        DatagramPacket dp=new DatagramPacket(data, data.length);
        //调用ds对象的方法receive传递数据包
        ds.receive(dp);
        
        //获取发送端的IP地址对象
        String ip=dp.getAddress().getHostAddress();
        
        //获取发送的端口号
        int port=dp.getPort();
        
        //获取接收到的字节数
        int length=dp.getLength();    
        System.out.println(new String(data,0,length)+"...."+ip+":"+port);
        ds.close();
                
    }
}

猜你喜欢

转载自www.cnblogs.com/benjamin77/p/9146817.html