//UDP 发送端
package liu.net.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;

public class Send2 {
	public static void main(String[] args) throws IOException {
		/*UDP 发送步骤
		 *1. 建立DatagramSocket 
		 *2. 建立 DatagramPacket
		 *3. 使用 DatagramSocket 的send 方法 发送数据
		 *4. 关闭 DatagramSocket
		 */
		//定义发送使用的端口,接收的IP地址
		try {
			DatagramSocket ds = new DatagramSocket(8899);
			String str = "发送给UDP的数据";
			byte[] buf = str.getBytes();
			InetAddress ip = InetAddress.getByName("127.0.0.1");
			DatagramPacket dp = new DatagramPacket(buf,buf.length,ip,8890);
			ds.send(dp);
			ds.close();
		} catch (SocketException e) {
			e.printStackTrace();
		}							
	}

}



//UDP 接收端

package liu.net.udp;

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

public class Receive2 {
	public static void main(String[] args) throws IOException {
		/*UDP接收步骤:
		 * 使用 DatagramSocket(int port) 建立socket(套间字)服务。(我们注意到此服务即可以接收,又可以发送),port指定监视接受端口。
		 *定义一个数据包(DatagramPacket),储存接收到的数据,使用其中的方法提取传送的内容
		 *通过DatagramSocket 的receive方法将接受到的数据存入上面定义的包中
		 *使用DatagramPacket的方法,提取数据。
		 *关闭资源。
		 */
		
		//1.使用 DatagramSocket(int port) 建立socket(套间字)服务。
		//	(我们注意到此服务即可以接收,又可以发送),port指定监视接受端口。
		DatagramSocket ds = new DatagramSocket(8890);
		
		//2.定义一个数据包(DatagramPacket),储存接收到的数据,使用其中的方法提取传送的内容
		byte[] buf = new byte[1024];
		DatagramPacket dp = new DatagramPacket(buf,0,buf.length);
		
		//3.通过DatagramSocket 的receive方法将接受到的数据存入上面定义的包中
		ds.receive(dp);
		
		//4.使用DatagramPacket的方法,提取数据。
			//获取接收的数据。数据报包也包含发送方的 IP 地址和发送方机器上的端口号。 
		String receiveData = new String(dp.getData(),0,dp.getLength());
		String sourceAddress = dp.getAddress().getHostAddress();
		int sourcePort = dp.getPort();
		System.out.println("原地址:"+sourceAddress+"  发送端端口号:"+sourcePort);
		System.out.println("收到的数据内容:"+receiveData);
		
		//5.关闭资源。
		ds.close();		
	}
}