第一次写博客,不知道格式什么的对不对,我也不是一个擅长表达的人,凑合看吧.
写的可能比较简单,我对udp的理解还是不深,有些东西还不是很明白,望谅解
注意,需要在同一个局域网内.
首先 服务端代码(注释什么的都是根据自己的理解写的,有不对的地方轻喷)
//端口
private static int BROADCAST_PORT = 9899;
//组ip 范围是224.0.0.0---239.255.255.255,其中224.0.0.0为系统自用
private static String BROADCAST_IP = "224.0.0.1";
//组
static InetAddress inetAddress = null;
//多组数据报套接字(就是一个socket而已,用来连接两端)
static MulticastSocket multicastSocket = null;
public static void main(String[] args) {
try {
//创建组
inetAddress = InetAddress.getByName(BROADCAST_IP);
//创建服务器
multicastSocket = new MulticastSocket(BROADCAST_PORT);
//当参数为0时,指定数据报停留在本地主机,为1时,指定数据报发送到本地局域网网,为32时,发送到本站点的网络上。为64时,发送到本地区,128时,发送到本大洲,255为全球。
multicastSocket.setTimeToLive(1);
//加入组
multicastSocket.joinGroup(inetAddress);
} catch (Exception e) {
e.printStackTrace();
}
new Thread(new Runnable() {
@Override
public void run() {
//创建数据传输对象
DatagramPacket dataPacket = null;
//被传输的数据
byte[] data ="hello".getBytes();
dataPacket = new DatagramPacket(data, data.length, inetAddress,BROADCAST_PORT);
while(true){
try{
//发送
multicastSocket.send(dataPacket);
//每3s执行一次发送广播
Thread.sleep(3000);
System.out.println("发送数据广播:.....");
} catch (Exception e){
e.printStackTrace();
}
}
}
}).start();
}
服务端代码
//多组数据报套接字
private static MulticastSocket multicastSocket = null;
//端口
private static int BROADCAST_PORT = 9899;
//udp广播组ip
private static String BROADCAST_IP = "224.0.0.1";
//udp广播组对象
static InetAddress inetAddress = null;
//随便定义的字符串
private static String ip;
public static void main(String[] args) {
try {
//通过固定端口,创建服务器对象
multicastSocket = new MulticastSocket(BROADCAST_PORT);
//创建组
inetAddress = InetAddress.getByName(BROADCAST_IP);
//加入组
multicastSocket.joinGroup(inetAddress);
new Thread(new Runnable() {
@Override
public void run() {
byte buf[] = new byte[1024];
//创建一个数据发送对象
DatagramPacket dp = null;
dp = new DatagramPacket(buf, buf.length, inetAddress,BROADCAST_PORT);
while (true) {
try {
//接收服务器发送过来的数据
//这边需要注意一下,服务端每3s发送一次数据,而客户端这边会根据服务端发送数据的频率读取服务端传过来的数据
multicastSocket.receive(dp);
ip = new String(buf, 0, dp.getLength());
System.out.println("检测到服务端IP : " + ip);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}).start();
} catch (Exception e1) {
e1.printStackTrace();
}
}
执行完毕,记得调用close()
好了,就到这里吧.