UDP
编程的步骤:
发送端和接收端是相对的
发送端:
-
先创建
DatagramSocket
对象,并在指定端口监听 -
同时创建一个
DatagramPacket
对象,用于包装数据DatagramPacket(byte[] buf, int length, InetAddress address, int port)
构造用于发送长度的分组的数据报包length
指定主机上到指定的端口号。 -
再调用
DatagramSocket
类的Send
方法 -
最后关闭
DatagramSocket
对象的流
接收端:
-
先创建
DatagramSocket
对象,并在指定端口监听 -
同时创建一个
DatagramPacket
对象,用于接收数据包DatagramPacket(byte[] buf, int length)
构造一个DatagramPacket
用于接收长度的数据包length
。 -
再调用
DatagramPacket
类中getData
方法和getLength
方法【相当于拆包】 -
使用
String
构造器打印出信息 -
最后关闭
DatagramSocket
对象的流
接收端
package com.haikang.inte_.udp_;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/**
* @author: 海康
* @version: 1.0
*/
public class UDPReceiverA {
public static void main(String[] args) throws IOException {
//接收方在端A监听
DatagramSocket socket = new DatagramSocket(9999);
// 创建 DatagramSocket 对象
byte[] bytes = new byte[1024 * 8];
DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
// 调用 receiver 接收方法
//如果程序没有接收到信息直接阻塞在此处
socket.receive(packet);
// 调用DatagramPacket类中的getData方法和getLength方法进行拆包
byte[] data = packet.getData();
int length = packet.getLength();
System.out.println(new String(data,0,length));
// 向发送端回信息
// 创建一个 DatagramPacket对象用于封装数据
byte[] by = "好的,明天雷南吃,串串香!".getBytes();
DatagramPacket datagramPacket = new DatagramPacket(by, by.length, InetAddress.getByName("127.0.0.1"), 8888);
// 调用发送方法
socket.send(datagramPacket);
//关闭流
if (socket!=null){
socket.close();
}
System.out.println("接收端退出程序!");
}
}
发送端
package com.haikang.inte_.udp_;
import java.io.IOException;
import java.net.*;
/**
* @author: 海康
* @version: 1.0
*/
public class UDPSenderB {
public static void main(String[] args) throws IOException {
DatagramSocket socket = new DatagramSocket(8888);
//创建一个DatagramSocket对象用于包装数据
byte[] bytes = "hello 明天雷南吃串串香不?".getBytes();
DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("127.0.0.1"), 9999);
socket.send(datagramPacket);
//创建一个DatagramPacket对象用于接收数据
byte[] data = new byte[1024 * 8];
DatagramPacket packet = new DatagramPacket(data, data.length);
//如果没有接收到数据程序一直阻塞在此处
socket.receive(packet);
// 调用方法对数据进行拆包
System.out.println(new String(packet.getData(),0,packet.getLength()));
//关闭流
if (socket!=null){
socket.close();
}
}
}