* UDP协议接收端
*
* 1)创建接收端的Socket对象
* public DatagramSocket(int port) :直接绑定端口到本地主机上
* 2)接收数据
* 发送端发送过来的数据报包
* 2.1)创建一个数据报包public DatagramPacket(byte[] buf,int length)
*
* 自定义一个包裹(接收容器)
* byte[] byte = new byte[1024] ;
*
* 2.2)接收之后 DatagramSocket
* public void receive(DatagramPacket p)
* 2.3)解析实际长度
* public byte[] getData():获取实际的缓冲区大小
* public int getLength():获取当前接收的实际长度
*
*
* 3)关闭资源
*
*
*先运行接收端,等待发送端发送数据,不要运行多次,否则:
*
*java.net.BindException: Address already in use: Cannot bind :端口号被占用了!
public class ReceiveDemo {
public static void main(String[] args) throws IOException {
//创建接收端的Socket对象
DatagramSocket ds = new DatagramSocket(10086) ; //端口号不能冲突
//创建一个包裹(自定义接收容器)
byte[] bytes = new byte[1024] ;
int length = bytes.length ;
//创建数据报包对象
DatagramPacket dp = new DatagramPacket(bytes, length) ;
//接收数据
//public void receive(DatagramPacket p)
ds.receive(dp);
//解析数据报包的实际数据
/*
* public byte[] getData():获取实际的缓冲区大小
* public int getLength():获取当前接收的实际长度
* */
/*byte[] bytes2 = dp.getData() ;
int length2 = dp.getLength() ;*/
//转换成字符串:
//String s = new String(bytes2,0,length2) ;
//改进:解析长度
String s = new String(dp.getData(), 0, dp.getLength()) ;
//获取ip地址public InetAddress getAddress()
InetAddress address = dp.getAddress() ;
//public String getHostAddress():获取字符串ip地址形式
String ip = address.getHostAddress() ;
System.out.println("data is "+ s+" from "+ip);
//释放资源
//ds.close();
}
}