본문 바로가기

강좌/JAVA NETWORK

자바 네트워크(Network) - UDP 예제 2 (멀티캐스트-MulticastSocket)

일단 DatagramSocket클래스의 자식 클래스를 알아보자.


DatagramSocket클래스의 자식 클래스는 MutilcastSocket이다.


우선 자바API에서 MulticastSocket을 살펴보자.


가기 귀찮아서 퍼왔다.

잘 해석해서 이넘이 무엇을 하는 넘인지 살펴보자.


public class MulticastSocket extends DatagramSocket
The multicast datagram socket class is useful for sending and receiving IP multicast packets. A MulticastSocket is a (UDP) DatagramSocket, with additional capabilities for joining "groups" of other multicast hosts on the internet.

A multicast group is specified by a class D IP address and by a standard UDP port number. Class D IP addresses are in the range 224.0.0.0 to 239.255.255.255, inclusive. The address 224.0.0.0 is reserved and should not be used.

One would join a multicast group by first creating a MulticastSocket with the desired port, then invoking the joinGroup(InetAddress groupAddr) method:

 // join a Multicast group and send the group salutations
 ...
 String msg = "Hello";
 InetAddress group = InetAddress.getByName("228.5.6.7");
 MulticastSocket s = new MulticastSocket(6789);
 s.joinGroup(group);
 DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(),
                             group, 6789);
 s.send(hi);
 // get their responses!
 byte[] buf = new byte[1000];
 DatagramPacket recv = new DatagramPacket(buf, buf.length);
 s.receive(recv);
 ...
 // OK, I'm done talking - leave the group...
 s.leaveGroup(group);


MulticastSocket은 특정 클라이언트에게 데이터를 던저주는것이 아닌

어느 한 위치에 데이터를 내리면 클라이언트가 서버가 아니 그 위치에 붙어서

데이터를 가져가는 형식을 말한다.



그림을 보면 첫번째는 그동안 해왔던 통신방식 두번째가 멀티캐스트 방식이다.

서버에서 파일이나 데이터베이스에서 정보를 특정 위치에 내려주면 클라이언트가

그쪽으로 접속해서 받아간다.

이걸 테스트 하기 위해서는 최소 컴퓨터 2대로 해야 한다..

일단 서버부터 살펴보자.



원리는 서버에 저장된 파일을 읽어다가 내려주는 역할을 한다.

쓰레드를 사용하였고 너무 빨리 내려주면 부하가 걸리기 때문에 중간에 sleep(2000)를 주었다. 2초

자 뉴스를 잘 찍고 있다. "일본의 후지산이 폭발 위험이 있다는데...."

이건 UDP1 예제를 했으면 쉽게 이해 할수 있다. 사실 나도 무작정 하는거라..


클라이언트를 확인해보자.

서버에서 내려주는 아이피대역 230.0.0.1에 join 하면 된다.

DatagramSocket의 서브 클래스인 MulticastSocket을 사용한다.


결과를 잘 받아 왔다.


어차피 데이터를 받아 오는건 DatagramPacket을 이용한다.

이건 이전에도 계속 사용 해왔으니 어렵지는 않을 것이다.

계속 반복해서 보고 하다보면 금방 익숙해 질것이다~