问题:一般来说,应该是发送方先发送,然后接收方接收,但是由于发送的速度很快,在发送方关闭之前根本接受不到数据。
解决:先运行接收方,再运行发送方时,就可以快速接收到消息。
public class UDP_service {
public static void main(String[] args) throws Exception {
System.out.println("发动方启动中!");
// 1.使用DatagramSocket 指定端口,创建发送端
DatagramSocket data = new DatagramSocket(8888);
// 2.准备数据并要转成字节数组
String message = "哈哈哈,这是我的数据!";
byte[] b = message.getBytes();
// 3.封装成DatagramPacket包裹,需要指定目的地
DatagramPacket packet = new DatagramPacket(b, 0, b.length, new InetSocketAddress("localhost",6666));
// 4.发送包裹send
data.send(packet);
// 5.释放资源
data.close();
System.out.println("发送数据完成!!");
}
}
public class UDP_client {
public static void main(String[] args) throws Exception {
System.out.println("接收方启动中!");
//1.使用DatagramSocket 指定端口,创建接收端
DatagramSocket data = new DatagramSocket(6666);
// 2.准备容器,封装成DatagramPacket
byte[] b = new byte[1024*60];
DatagramPacket d = new DatagramPacket(b, 0, b.length);
// 3.阻塞式接受包裹receive,将其存在准备的容器中
data.receive(d);
// 4.分析数据 byte[] getDate() getLength()
byte[] bb = d.getData();
int len = d.getLength();
System.out.println(len);
System.out.println(new String(bb,0,bb.length) );
// 5.释放资源
data.close();
System.out.println("接受收数据完成!!");
}
}