Advertisement

JAVA 实现UDP协议 数据包接收和发送

阅读量:

1. 实现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 SendMan {

    
 	public static void main(String[] args)throws IOException{
    
 		//创建数据包对象,封装要发送的数据,接收端IP,端口
    
 		byte[] data = "hello".getBytes();
    
 		//创建InetAddress对象,封装自己的IP地址
    
 		InetAddress inet = InetAddress.getByName("192.168.2.170");
    
 		DatagramPacket dp = new DatagramPacket(data,data.length,inet,6000);
    
 		//创建DatagramSocket对象,数据包的发送和接收对象
    
 		DatagramSocket ds = new DatagramSocket();
    
 		//调用ds对象的方法send,发送数据包
    
 		ds.send(dp);
    
 		ds.close();
    
 	}
    
 }

2.实现UDP接收端

* 实现封装数据包java.net.DatagramPacket 将数据接收

  • 实现输出传输 java.net.DatagramSocket 接受数据包
  • 实现步骤:
  • 1.创建DatagramSocket对象,绑定端口号 要和发送数据端口号一致
  • 2.创建字节数组,接受发来的数组
  • 3.创建数据包对象DatagramPacket
  • 4.调用DatagramSocket对象方法

receive(DatagramPacket dp)接受数据,数据放在数据包中

  • 5.拆包
  • 发求送的IP地址
  • 数据包对象DatagramPacket.getAddress()
  • 求接受到的字节个数
  • 数据包对象DatagramPacket.getLength()
  • 求发送方的端口号
  • 数据包对象DatagramPacket.getPort()
  • 6.关闭资源

代码示例如下:

复制代码
 public class ReceiverMan {

    
 	 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(); 
    
 	        
    
 	    }
    
 }

全部评论 (0)

还没有任何评论哟~