java里把udp网络功能封装成DatagramSocket类.
udp的接收/发送端的用法:
1 创建DatagramSocket类对象,如是接收端时还需创建对象时绑定端口号.
DatagramSocket udp = null; //声明一个DatagramSocket指针变量,用于存放创建的DatagramSocket对象地址
try {
udp = new DatagramSocket(7788); //创建udp对象并绑定端口号(接收端需要指定端口号), 如果是创建发送端的对象则可以不指定绑定端口号
} catch (SocketException e) { //异常处理
...
}
2 创建DatagramSocket对象后,就可以进行接收或发送数据
byte [] data = new byte[1500];
DatagramPacket dp = new DatagramPacket(data, data.length); // 创建一个udp数据包对象,用于存放接收到的或要发出的数据内容.
// 接收udp数据
try {
udp.receive(dp); //等待接收数据
} catch (IOException e) {
//...
}
//发出数据
dp.setAddress(InetAddress.getByName("192.168.250.255")); //设置要发送到的目的ip地址
dp.setPort(7788); //设置目的端口号
udp.send(dp); //发出数据
如实现一个udp广播功能网络程序,把接收到的数据广播到局域网内绑定端口号7788的udp网络程序.
/* Main.java */
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class Main {
public static void main(String[] args) throws IOException {
DatagramSocket udp = null;
try {
udp = new DatagramSocket(7788); //创建udp对象并绑定端口号
} catch (SocketException e) {
e.printStackTrace();
System.exit(0);
}
byte [] data = new byte[1500];
DatagramPacket dp = new DatagramPacket(data, data.length);
udp.setBroadcast(true); //让DatagramSocket对象支持udp广播功能
while (true) {
try {
udp.receive(dp);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
break;
}
System.out.println(dp.getAddress()+":"+dp.getPort()+ " " + new String(data, 0, dp.getLength()));
dp.setAddress(InetAddress.getByName("192.168.250.255")); //目的ip地址为广播地址
dp.setPort(7788);
udp.send(dp);
}
}
}