/*
* UdP程序的接收端
*/
public class ServerDemo1 {
public static void main(String[] args) throws IOException {
/*
* 建数据报套接字并将其绑定到本地主机上的指定端口。
*
* public DatagramSocket(int port) 监听指定端口
*/
DatagramSocket ds = new DatagramSocket(12306);
/*
* public DatagramPacket(byte[] buf,int length) 构造
* DatagramPacket,用来接收长度为 length 的数据包。 参数: buf - 保存传入数据报的缓冲区。 len -
* 要读取的字节数。
*
*/
byte[] bye = new byte[1024];
DatagramPacket dp = new DatagramPacket(bye, 1024);
System.out.println("等待接收数据");
/*
* public void receive(DatagramPacket p)
* 从此套接字接收数据报包。当此方法返回时,DatagramPacket 的缓冲区填充了接收的数据。 数据报包也包含发送方的 IP
* 地址和发送方机器上的端口号。
*/
// 等待接收数据,如果没有数据会阻塞
ds.receive(dp);
// 调用DatagramPacket的方法获得接收的信息,包括内容、长度、IP地址和端口号
/*
* public InetAddress getAddress() 返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的
* 返回值类型:InetAddress
*/
/*
* public byte[] getData() 返回数据缓冲区。 用来接收或发送数据的缓冲区
*
* public String(byte[] bytes,int offset,int length)
* 通过使用平台的默认字符集解码指定的byte 子数组,构造一个新的 String。
*
* 参数: bytes - 要解码为字符的 byte offset - 要解码的第一个 byte 的索引 length - 要解码的 byte
* 数
*
*/
String str = new String(dp.getData(), 0, dp.getLength()) + " , from:" + dp.getAddress().getHostAddress() + "::"
+ "端口号:" + dp.getPort();
System.out.println(str);
// 释放资源
ds.close();
}
}