1。java支持的UDP数据报通信需要DatagramPacket和DatagramSocket两个类的配合。DatagramPacket类将待传输数据封装成数据报包对象,
再由数据报套接字DatagramSocket类提供的send()和receiver()方法进行发送或接收操作。
2。DatagramPacket类:
(1)构造方法*/
public DatagramPacket(byte[] buffer , int length , InetAddress IP , int port){}
/* 创建待发送的数据报包对象,必须指定目标主机的IP地址和端口。其中,包长度length <= buffer.length。*/
public DatagramPacket(byte[] buffer , int length){}
/* 创建待接收的数据报包对象,指定接收到的数据报包的缓存地址与接收数据包长度,其中length <= buffer.length。*/
/* (2)操作方法*/
public byte[] getData(){} //返回数据缓冲区。接收到的或将要发送的数据从缓冲区中的偏移量 offset 处开始,持续 length 长度
/* 3。DatagramSocket类:提供数据报包的发送与接收服务
(1)构造方法*/
public DatagramSocket(){} //构造数据报套接字,用来发送数据报包
public DatagramSocket(int port){}//创建数据报套接字并将其绑定到本地主机上的指定端口,用来接收数据报包
/* (2)操作方法*/
public void receive(DatagramPacket p){} //从此套接字接收数据报包
//其中,在接收到数据报包之前,receive方法处于阻塞状态
public void send(DatagramPacket p){} //从此套接字发送数据报包
public void close(){} //关闭数据报套接字
再由数据报套接字DatagramSocket类提供的send()和receiver()方法进行发送或接收操作。
2。DatagramPacket类:
(1)构造方法*/
public DatagramPacket(byte[] buffer , int length , InetAddress IP , int port){}
/* 创建待发送的数据报包对象,必须指定目标主机的IP地址和端口。其中,包长度length <= buffer.length。*/
public DatagramPacket(byte[] buffer , int length){}
/* 创建待接收的数据报包对象,指定接收到的数据报包的缓存地址与接收数据包长度,其中length <= buffer.length。*/
/* (2)操作方法*/
public byte[] getData(){} //返回数据缓冲区。接收到的或将要发送的数据从缓冲区中的偏移量 offset 处开始,持续 length 长度
/* 3。DatagramSocket类:提供数据报包的发送与接收服务
(1)构造方法*/
public DatagramSocket(){} //构造数据报套接字,用来发送数据报包
public DatagramSocket(int port){}//创建数据报套接字并将其绑定到本地主机上的指定端口,用来接收数据报包
/* (2)操作方法*/
public void receive(DatagramPacket p){} //从此套接字接收数据报包
//其中,在接收到数据报包之前,receive方法处于阻塞状态
public void send(DatagramPacket p){} //从此套接字发送数据报包
public void close(){} //关闭数据报套接字
/*例如*/
public class UDPSender {
public static final int RECEICER_PORT = 3306; //目标主机端口号
public static void main(String[] args) throws IOException {
byte[] buffer = new byte[128]; //发送数据缓冲区
int length = 128; //缓冲区有效长度
String str = "hello this is a test of the udp communication";
buffer = str.getBytes();
DatagramPacket dgp = new DatagramPacket(buffer, str.length(), InetAddress.getByName("localhost"), RECEICER_PORT);
DatagramSocket dgs = new DatagramSocket();
dgs.send(dgp);
dgs.close(); //关闭数据包套接字
}
}
public class UDPReceiver {
public static final int RECEIVER_PORT = 3306; //接收主机端口号
public static void main(String[] args) throws IOException {
byte[] buffer = new byte[128]; //定义接收缓冲区
int length = 128; //定义缓冲区有效长度
DatagramPacket dgp = new DatagramPacket(buffer, length); //构造DatagramPacket,用来接收长度为length的数据包
DatagramSocket dgs = new DatagramSocket(RECEIVER_PORT); //构造DatagramSocket,指定本地端口号,用来接收数据包
dgs.receive(dgp); //获取接收到的packet
buffer = dgp.getData(); //获取packet中的缓冲区数据
System.out.println(new String(buffer));
dgs.close(); //关闭数据报套接字
}
}