UDP网络通信
>类DatagramSocket和DatagramPacket实现了基于UDP协议网络程序
>UDP数据报通过数据包套接字DatagramSocket发送和接收,系统不能保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达
>DatagramPacket对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号。
>UDP协议中每个数据报都给出了完整的地址信息,因此无需建立接收方和发送方的连接。
UDP编程的实现
package com.jk.java;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import org.junit.Test;
//UDP编程的实现
public class TestUDP {
//发送端
@Test
public void send(){
DatagramSocket ds = null;
try {
ds = new DatagramSocket();
byte[] b = "你好,我是要发送的数据".getBytes();
//创建一个数据报,每一个数据报不能大于64K,都记录着数据信息,发送端的IP、端口号、以及要发送到的接收端的IP、端口号
DatagramPacket pack = new DatagramPacket(b, 0, b.length, InetAddress.getByName("127.0.0.1"), 9090);
ds.send(pack);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(ds != null){
ds.close();
}
}
}
//接收端
@Test
public void receive(){
DatagramSocket ds = null;
try {
ds = new DatagramSocket(9090);
byte[] b = new byte[1024];
//用来接收长度为 length 的包,在缓冲区中指定了偏移量。
DatagramPacket pack = new DatagramPacket(b, 0, b.length);
ds.receive(pack);
String string = new String(pack.getData(), 0, pack.getLength());
System.out.println(string);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(ds != null){
ds.close();
}
}
}
}