实现UDP通信要依靠 DatagramPacket对象进行实现
UDP协议的相关介绍:
UDP传输分为 服务端 和客户端
服务端发送消息 客户端接收消息,服务端需要知晓客户端的 IP和所监听的端口号
话不多说直接上代码:
服务端:
//1.创建DatagramSocket 对象准备发送和接受数据
DatagramSocket socket =new DatagramSocket(3000);
//2. 将需要发送的数据,封装到 DataggramPacket对象
byte[] data = "今年必须发财!!".getBytes();
//封装的DataggramPacket对象 data 内容字节数组 ,data.lengtth,IP 端口
DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getByName("目标的IP"), 2000);
socket.send(packet);
socket.close();//关闭资源
System.out.println("服务端退出!!!");
客户端:
DatagramSocket socket =new DatagramSocket(2000); //1:创建一个DatagramSocket
// 2:构建以DatagranPacket 对象,准备接受数据
//UDP每个数据包大小在 64K 不适合大量传输数据
byte [] buf =new byte[256]; //准备数据容器大小
DatagramPacket packet =new DatagramPacket(buf,buf.length);
//3.调用接受方法 将通过网络传输的 DatagramPacket对象
// 填充到packet对象中
System.out.println("接收端 等待接受数据。。。。。");
socket.receive(packet);
//4. 把packet进行拆包 取数据 并显示。
int length = packet.getLength(); //实际接受到的数据字节长度
System.out.println("实际长度"+length);
byte[] data = packet.getData(); //接受到的数据
String s= new String(data,0,length);
System.out.println("接收到的数据是:"+s);
String ip = packet.getSocketAddress().toString(); //发送方的IP地址
System.out.println("发送方的IP:"+ip);
System.out.println(ip);
接收端 的结果
值得一提的是 ,接收端在启动后回监听,所设置的端口,当没有接受到数据时就会,处于阻塞状态。一直到接受到数据才会结束。
如果在实验时 在同一台计算机上运行这两个文件,记得服务端和接受端所监听的端口号分开,要不会出现报错的情况,即端口号被占用。
除此之外,在启动顺序上,应先启动接受端,再启动服务端。