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