组播的原理暂时不介绍了,对网络这一块不太熟,大家可以查看其他专业的介绍。我在这里提供了一组组播发送,接受的例子,大家可以直接在IDE里面跑起来,根据注释学习怎么写的。组播组由D类IP地址和标准UDP端口号指定。D类IP地址在224.0.0.0至23.255.255.255范围内。地址224.0.0.0是保留的,不应该使用。首先创建具有所需端口的组播套接字,然后调用joinGroup(InetAddress groupAddr)方法,可以加入组播组:
**//发送组播数据**
package MulticastClient;
import java.net.*;
public class MulticastClient{
String groupHost="232.0.0.1"; //组播组虚拟IP
int port=5678; //端口
public MulticastClient(){
try{
byte[] message = "Hello,This is Client.".getBytes(); //发送信息
InetAddress inetAddress = InetAddress.getByName(groupHost); //组播地址
DatagramPacket datagramPacket= new DatagramPacket(message, message.length, inetAddress, port); //发送数据报
DatagramSocket socket = new DatagramSocket(); //DatagramSocket实例
socket.send(datagramPacket); //发送数据
socket.close(); //关闭端口
}
catch (Exception exception) {
exception.printStackTrace(); //输出错误信息
}
}
public static void main(String[] args){
new MulticastClient();
}
}
**// 接受组播数据**
package MulticastClient;
import java.net.*;
public class MulticastServer{
String groupHost="232.0.0.1"; //组播组虚拟IP
int port=5678; //端口
public MulticastServer(){
try{
MulticastSocket multicastSocket = new MulticastSocket(port); //MulticastSocket实例
InetAddress inetAddress = InetAddress.getByName(groupHost); //组地址
multicastSocket.joinGroup(inetAddress); //加入到组播组中
while (true){
byte[] received = new byte[128]; //接收数据缓冲
DatagramPacket datagramPacket = new DatagramPacket(received, received.length); //接收数据的数据报
multicastSocket.receive(datagramPacket); //接收数据
System.out.println(new String(received)); //输出接收到的数据
}
}
catch (Exception exception){
exception.printStackTrace(); //输出出错信息
}
}
public static void main(String [] arstring){
new MulticastServer();
}
这是最终结果: