javaUDP传输信息

来源:互联网 发布:阿里云centos 安装yum 编辑:程序博客网 时间:2024/06/15 14:59

package UDP;

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

/**
 * 采用UDP方式传送信息
 * @author milk
 *
 */
public class UDPSender1

 public static void main(String[] args)
 {
  System.out.println("构建DatagramPacket对象,用来发送数据");
  
  //要发送的信息
  String sendMessage = "这是采用UDP方式发送过来的信息";
  byte[] sendContent = sendMessage.getBytes();
  
  //创建DatagramPacket对象
  DatagramPacket dp = new DatagramPacket(sendContent,sendContent.length);
  
  //定义要发送信息的IP地址
  byte[] IP = new byte[]{127,0,0,1};
  
  try
  {
   InetAddress local = InetAddress.getByAddress(IP);
   dp.setAddress(local);//设置要发送信息的主机IP地址
   dp.setPort(9999);//设置发送的端口号
   DatagramSocket ds = new DatagramSocket();
   System.out.println("开始发送数据");
   ds.send(dp);//发送数据
   System.out.println("数据发送完毕");
   ds.close();
  }
  catch(UnknownHostException e)
  {
   e.printStackTrace();
  }
  catch(SocketException e)
  {
   e.printStackTrace();
  }
  catch(IOException e)
  {
   e.printStackTrace();
  }
  
  
 }
}
------------------------------------------------------------------------------------------------------------------------------------

package UDP;

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

/**
 *功能:接收采用UDP方式传送过来的信息
 * @author milk
 *
 */
public class UDPReceive1
{
 public static void main(String[] args)
 {
  System.out.println("等待接收数据传递过来....");
  byte[] receiveMessage = new byte[1024];//用来接收信息的数组
  DatagramPacket dp = new DatagramPacket(receiveMessage,receiveMessage.length);//创建DatagramPacket对象用来接收传递过来的信息
  System.out.println("使用DatagramPacket对象开始接收信息");
  
  try
  {
   DatagramSocket ds = new DatagramSocket(9999);//在9999端口监听,等待接收数据
   //This method blocks until a datagram is received
   ds.receive(dp);
   System.out.println("数据接收完毕");
   byte[] rece = dp.getData();
   int len = dp.getLength();
   String content = new String(rece,0,len);
   System.out.println("接收到的数据为:"+content);
   ds.close();
  }
  catch(SocketException e)
  {
   e.printStackTrace();
  }
  catch(IOException e)
  {
   e.printStackTrace();
  }
 }
}

 

附录:

在UDP协议中,没有TCP中所谓的服务器端和客户端,而是有数据的发送端和接收端。

UDP发送数据就好像发送电报一样。对于一段需要发送的数据,每次都生成一个“数据包”实例,然后发送出去。

在UDP发送数据过程中有两个类比较重要:

1.DatagramPacket

2.DatagramSocket

 

数据的目的地是保存在DatagramPacket实例中的,UDP更像是现实中的信件,每个信件都包含有目的地端和数据。

DatagramSocket则像是发送信件的邮递员,只是负责将数据传递到目的地。