组播主要就是创建一个MulticastSocket,然后还是通过和UDP一样的DatagramPacket来收发数据
一般是先加入一个组播网,发送数据,接收数据,然后离开组播网
下面是一个Java Network Programming的例子,我略加改动,用来对组播网all-systems.mcast.net 4000监听以及发送数据
请先运行MulticastSniffer然后再运行MulticastSender
public class MulticastSniffer{
public static void main(String[] args){
InetAddress group = null;
int port = 0;
try{
group = InetAddress.getByName(args[0]);
port = Integer.parseInt(args[1]);
}
catch(Exception e){
try{
group = InetAddress.getByName("sap.mcast.net");
}
catch(UnknownHostException e1){
System.err.println("Shit happens");
System.exit(0);
}
port = 9875;
}
MulticastSocket ms = null;
try{
ms = new MulticastSocket(port);
ms.joinGroup(group); byte[] buffer = new byte[8192];
while(true){
DatagramPacket dp = new DatagramPacket(buffer,buffer.length);
ms.receive(dp);
String s = new String(dp.getData());
System.out.println(s);
}
}
catch(IOException e){
System.err.println(e);
}
finally{
if(ms != null){
try{
ms.leaveGroup(group);
ms.close();
}
catch(IOException e){}
}
}
}
}
public class MulticastSender{
public static void main(String[] args){
InetAddress ia = null;
int port = 0;
byte ttl = (byte)1; try{
ia = InetAddress.getByName(args[0]);
port = Integer.parseInt(args[1]);
if(args.length > 2) ttl = (byte)Integer.parseInt(args[2]);
}
catch(Exception e){
System.err.println(e);
System.err.println(
"Usage: java MulticastSender multicast_address port ttl");
System.exit(1);
} byte[] data = "Here is some multicast data\r\n".getBytes();
DatagramPacket dp = new DatagramPacket(data,data.length,ia,port); try{
MulticastSocket ms = new MulticastSocket();
ms.joinGroup(ia);
for(int i = 1;i < 10;i++){
ms.send(dp);
ms.setTimeToLive(ttl);
}
ms.leaveGroup(ia);
ms.close();
}
catch(SocketException e){
System.err.println(e);
}
catch(IOException ie){
System.err.println(ie);
}
}
}
一般是先加入一个组播网,发送数据,接收数据,然后离开组播网
下面是一个Java Network Programming的例子,我略加改动,用来对组播网all-systems.mcast.net 4000监听以及发送数据
请先运行MulticastSniffer然后再运行MulticastSender
public class MulticastSniffer{
public static void main(String[] args){
InetAddress group = null;
int port = 0;
try{
group = InetAddress.getByName(args[0]);
port = Integer.parseInt(args[1]);
}
catch(Exception e){
try{
group = InetAddress.getByName("sap.mcast.net");
}
catch(UnknownHostException e1){
System.err.println("Shit happens");
System.exit(0);
}
port = 9875;
}
MulticastSocket ms = null;
try{
ms = new MulticastSocket(port);
ms.joinGroup(group); byte[] buffer = new byte[8192];
while(true){
DatagramPacket dp = new DatagramPacket(buffer,buffer.length);
ms.receive(dp);
String s = new String(dp.getData());
System.out.println(s);
}
}
catch(IOException e){
System.err.println(e);
}
finally{
if(ms != null){
try{
ms.leaveGroup(group);
ms.close();
}
catch(IOException e){}
}
}
}
}
public class MulticastSender{
public static void main(String[] args){
InetAddress ia = null;
int port = 0;
byte ttl = (byte)1; try{
ia = InetAddress.getByName(args[0]);
port = Integer.parseInt(args[1]);
if(args.length > 2) ttl = (byte)Integer.parseInt(args[2]);
}
catch(Exception e){
System.err.println(e);
System.err.println(
"Usage: java MulticastSender multicast_address port ttl");
System.exit(1);
} byte[] data = "Here is some multicast data\r\n".getBytes();
DatagramPacket dp = new DatagramPacket(data,data.length,ia,port); try{
MulticastSocket ms = new MulticastSocket();
ms.joinGroup(ia);
for(int i = 1;i < 10;i++){
ms.send(dp);
ms.setTimeToLive(ttl);
}
ms.leaveGroup(ia);
ms.close();
}
catch(SocketException e){
System.err.println(e);
}
catch(IOException ie){
System.err.println(ie);
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货