본문 바로가기

Java SE/MulticastSocket 01

MulticastSocket 01

멀티캐스트용 주소를 이용하여 한 주소로 패킷을 전송하면 동일 그룹에 속하는 컴퓨터에서 대기하는 프로그램에서 동시에 데이터를 수신할 수 있다.

멀티캐스트용 주소로 데이터를 전송하는 프로그램

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();
 }
}