멀티캐스트용 주소를 이용하여 한 주소로 패킷을 전송하면 동일 그룹에 속하는 컴퓨터에서 대기하는 프로그램에서 동시에 데이터를 수신할 수 있다.
멀티캐스트용 주소로 데이터를 전송하는 프로그램
import java.net.*;
import java.io.*;
/* 멀티캐스트용 IP 주소를 이용하여 동일 그룹에 속하는 모든 컴퓨터에게 데이터를 전송하는 예
* 네트워크 상황에 따라 안 될 수도 있음.
* 일련의 숫자를 전송할 때 멀티캐스트용 주소로 전송하여 감청하고 있는 모든 동일 그룹 컴퓨터에서
* 수신할 수 있도록 한다. 멀티캐스트용 주소는 224.0.0.0 ~ 239.255.255.255를 이용함
*/
class MulticastSend {
public static void main(String[] args) throws Exception {
MulticastSocket ms = new MulticastSocket();
InetAddress ia = InetAddress.getByName("230.0.0.1");
for(int i=0;i<=100;i++) {
byte[] data = {(byte)i};
// 123번 포트에서 감청하고 있는 모든 컴퓨터에 데이터를 전송한다.
DatagramPacket dp = new DatagramPacket(data, data.length, ia, 1234);
ms.send(dp);
try{
Thread.sleep(1000);
}catch(InterruptedException ie){}
}
//ms.close();
}
}
멀티캐스트용 주소의 그룹에 등록하여 데이터를 수신하는 프로그램
import java.net.*;
import java.io.*;
/* 멀티캐스트 그룹에 속하는 컴퓨터에서 실행되는 수신측 프로그램*/
class MulticastReceiver {
public static void main(String[] args) throws Exception {
MulticastSocket ms = new MulticastSocket(1234);
ms.joinGroup(InetAddress.getByName("230.0.0.1"));
byte[] data = new byte[1024];
DatagramPacket dp = new DatagramPacket(data, data.length);
int len = 0;
System.out.println("데이터를 기다림....");
while(true) {
ms.receive(dp);
len = dp.getLength();
byte[] received = dp.getData();
System.out.println(received[0]);
}
//ms.close();
}
}