JavaTM Platform
Standard Ed. 6

java.net
클래스 MulticastSocket

java.lang.Object 
  상위를 확장 java.net.DatagramSocket 
      상위를 확장 java.net.MulticastSocket


public class MulticastSocket
extends DatagramSocket

멀티 캐스트 데이터 그램 소켓 클래스는, IP 멀티 캐스트 패킷을 송수신 하는 경우에 도움이 됩니다. MulticastSocket 는, 인터넷상외의 멀티 캐스트 호스트의 「그룹」에 참가하는 기능이 추가된 (UDP) DatagramSocket 입니다.  

멀티 캐스트 그룹은, 클래스 D IP 주소와 표준의 UDP 포트 번호에 의해 지정됩니다. 클래스 D IP 주소의 범위는,239.255. 255.255 에서 224.0. 0.0 까지입니다. 주소 224.0. 0.0 은 예약되고 있어 사용할 수 없습니다.  

멀티 캐스트 그룹에 참가하려면 , 최초로 목적의 포트로 MulticastSocket 를 작성해, 계속되어 joinGroup(InetAddress groupAddr) 메소드를 호출합니다.

// 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);
 
멀티 캐스트 그룹에 메세지를 송신하면(자), 그 호스트와 포트의 모든 참가자가 메세지를 받아들입니다 (다만 패킷의 유효기간내에 한정된다. 자세한 것은 후술). 멀티 캐스트 그룹에 메세지를 송신하기 위해서는, 소켓이 그 멀티 캐스트 그룹의 멤버일 필요는 없습니다.  

소켓이 멀티 캐스트 그룹 또는 포트에 참가하면(자), 다른 호스트로부터 그 그룹 또는 포트에 송신된 데이터 그램을 수신할 수가 있습니다. 그 그룹과 포트의 다른 멤버도 모두 같은 데이터 그램을 수신합니다. 소켓을 그룹으로부터 제외하려면 , leaveGroup(InetAddress addr) 메소드를 사용합니다. 복수의 MulticastSocket 가 병행해 멀티 캐스트 그룹과 포트에 참가할 수가 있어 그러한 MulticastSocket 는 모두 같은 그룹 데이터 그램을 수신합니다.  

현재로서는, 애플릿에서는 멀티 캐스트 소켓을 사용할 수 없습니다.

도입된 버젼:
JDK1. 1

생성자 의 개요
MulticastSocket ()
          멀티 캐스트 소켓을 작성합니다.
MulticastSocket (int port)
          특정의 포트에 바인드 된 멀티 캐스트 소켓을 작성합니다.
MulticastSocket (SocketAddress  bindaddr)
          지정된 소켓 주소에 바인드 된 MulticastSocket 를 작성합니다.
 
메소드의 개요
 InetAddress getInterface ()
          멀티 캐스트 패킷에 사용하는 네트워크 인터페이스의 주소를 가져옵니다.
 boolean getLoopbackMode ()
          멀티 캐스트 데이터 그램의 로컬 루프백의 설정치를 가져옵니다.
 NetworkInterface getNetworkInterface ()
          멀티 캐스트 네트워크 인터페이스 세트를 가져옵니다.
 int getTimeToLive ()
          이 소켓으로부터 송신되는 멀티 캐스트 패킷의 디폴트의 유효기간을 가져옵니다.
 byte getTTL ()
          추천 되고 있지 않습니다.  대신에 getTimeToLive 메소드를 사용해 주세요. 이 메소드는,byte 는 아니고 int 를 돌려줍니다.
 void joinGroup (InetAddress  mcastaddr)
          있는 멀티 캐스트 그룹에 참가합니다.
 void joinGroup (SocketAddress  mcastaddr, NetworkInterface  netIf)
          지정된 인터페이스로 지정된 멀티 캐스트 그룹에 참가합니다.
 void leaveGroup (InetAddress  mcastaddr)
          있는 멀티 캐스트 그룹으로부터 멀어집니다.
 void leaveGroup (SocketAddress  mcastaddr, NetworkInterface  netIf)
          지정된 로컬 인터페이스상의 멀티 캐스트 그룹으로부터 멀어집니다.
 void send (DatagramPacket  p, byte ttl)
          추천 되고 있지 않습니다.  대신에, 다음의 코드 또는 그것과 동등의 코드를 사용해 주세요. ...... + context.getLifetime()); + context.getLifetime()); + context.getLifetime()); + context.getLifetime()); ......
 void setInterface (InetAddress  inf)
          네트워크 인터페이스의 값에 의해 그 동작이 영향을 받는 메소드가 사용하는, 멀티 캐스트 네트워크 인터페이스를 설정합니다.
 void setLoopbackMode (boolean disable)
          멀티 캐스트 데이터 그램의 로컬 루프백을 유효 또는 무효로 합니다.
 void setNetworkInterface (NetworkInterface  netIf)
          이 소켓으로부터 송신되는 송출 멀티 캐스트 데이터 그램용의 네트워크 인터페이스를 지정합니다.
 void setTimeToLive (int ttl)
          멀티 캐스트의 스코프를 제어하기 위해서, 이 MulticastSocket 로부터 송신되는 멀티 캐스트 패킷의 디폴트의 유효기간을 설정합니다.
 void setTTL (byte ttl)
          추천 되고 있지 않습니다.  대신에 setTimeToLive 메소드를 사용해 주세요. 이 메소드는 ttl 의 형태로서byte 는 아니고 int 를 사용합니다.
 
클래스 java.net. DatagramSocket 로부터 상속된 메소드
bind , close , connect , connect , disconnect , getBroadcast , getChannel , getInetAddress , getLocalAddress , getLocalPort , getLocalSocketAddress , getPort , getReceiveBufferSize , getRemoteSocketAddress , getReuseAddress , getSendBufferSize , getSoTimeout , getTrafficClass , isBound , isClosed , isConnected , receive , send , setBroadcast , setDatagramSocketImplFactory , setReceiveBufferSize , setReuseAddress , setSendBufferSize , setSoTimeout , setTrafficClass
 
클래스 java.lang. Object 로부터 상속된 메소드
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
 

생성자 의 상세

MulticastSocket

public MulticastSocket()
                throws IOException 
멀티 캐스트 소켓을 작성합니다.

시큐리티 매니저가 존재하는 경우, 최초로 그 checkListen 메소드가 0 을 인수로 지정해 불려 가 이 조작이 허가될지 어떨지가 확인됩니다. 이 결과, SecurityException 가 throw 되는 일이 있습니다.  

소켓이 작성되면(자),DatagramSocket.setReuseAddress(boolean) 메소드가 불려 가 SO_REUSEADDR 소켓 옵션이 유효하게 됩니다.

예외:
IOException - MulticastSocket 의 작성중에 입출력 예외가 발생했을 경우
SecurityException - 시큐리티 매니저가 존재해, 그 checkListen 메소드가 이 조작을 허가하지 않는 경우
관련 항목:
SecurityManager.checkListen(int) , DatagramSocket.setReuseAddress(boolean)

MulticastSocket

public MulticastSocket(int port)
                throws IOException 
특정의 포트에 바인드 된 멀티 캐스트 소켓을 작성합니다.

시큐리티 매니저가 존재하는 경우, 그 checkListen 메소드가 port 인수를 그 인수로서 지정해 불려 가 이 조작이 허가될지 어떨지가 확인됩니다. 이 결과, SecurityException 가 throw 되는 일이 있습니다.  

소켓이 작성되면(자),DatagramSocket.setReuseAddress(boolean) 메소드가 불려 가 SO_REUSEADDR 소켓 옵션이 유효하게 됩니다.

파라미터:
port - 사용하는 포트
예외:
IOException - MulticastSocket 의 작성중에 입출력 예외가 발생했을 경우
SecurityException - 시큐리티 매니저가 존재해, 그 checkListen 메소드가 이 조작을 허가하지 않는 경우
관련 항목:
SecurityManager.checkListen(int) , DatagramSocket.setReuseAddress(boolean)

MulticastSocket

public MulticastSocket(SocketAddress  bindaddr)
                throws IOException 
지정된 소켓 주소에 바인드 된 MulticastSocket 를 작성합니다.  

혹은, 주소가 null 의 경우는, 안 바운드의 소켓을 작성합니다.  

시큐리티 매니저가 존재하는 경우, 최초로 그 checkListen 메소드가 SocketAddress 포트를 인수로 지정해 불려 가 이 조작이 허가될지 어떨지가 확인됩니다. 이 결과, SecurityException 가 throw 되는 일이 있습니다.  

소켓이 작성되면(자),DatagramSocket.setReuseAddress(boolean) 메소드가 불려 가 SO_REUSEADDR 소켓 옵션이 유효하게 됩니다.

파라미터:
bindaddr - 바인드 하는 소켓 주소. 안 바운드의 소켓의 경우는 null
예외:
IOException - MulticastSocket 의 작성중에 입출력 예외가 발생했을 경우
SecurityException - 시큐리티 매니저가 존재해, 그 checkListen 메소드가 이 조작을 허가하지 않는 경우
도입된 버젼:
1.4
관련 항목:
SecurityManager.checkListen(int) , DatagramSocket.setReuseAddress(boolean)
메소드의 상세

setTTL

@Deprecated 
public void setTTL(byte ttl)
            throws IOException 
추천 되고 있지 않습니다.  대신에 setTimeToLive 메소드를 사용해 주세요. 이 메소드는 ttl 의 형태로서byte 는 아니고 int 를 사용합니다.

멀티 캐스트의 스코프를 제어하기 위해서, 이 MulticastSocket 로부터 송신되는 멀티 캐스트 패킷의 디폴트의 유효기간을 설정합니다.

ttl 는부호 없음 8 비트 데이터이므로,0 <= ttl <= 0xFF 의 범위가 아니면 안됩니다.

파라미터:
ttl - 유효기간
예외:
IOException - 디폴트의 유효기간치의 설정중에 입출력 예외가 발생했을 경우
관련 항목:
getTTL()

setTimeToLive

public void setTimeToLive(int ttl)
                   throws IOException 
멀티 캐스트의 스코프를 제어하기 위해서, 이 MulticastSocket 로부터 송신되는 멀티 캐스트 패킷의 디폴트의 유효기간을 설정합니다.

ttl 의 범위는 0 <= ttl <= 255아니면 안됩니다. 그렇지 않은 경우는, IllegalArgumentException 가 throw 됩니다.

파라미터:
ttl - 유효기간
예외:
IOException - 디폴트의 유효기간치의 설정중에 입출력 예외가 발생했을 경우
관련 항목:
getTimeToLive()

getTTL

@Deprecated 
public byte getTTL()
            throws IOException 
추천 되고 있지 않습니다.  대신에 getTimeToLive 메소드를 사용해 주세요. 이 메소드는,byte 는 아니고 int 를 돌려줍니다.

이 소켓으로부터 송신되는 멀티 캐스트 패킷의 디폴트의 유효기간을 가져옵니다.

반환값:
디폴트의 유효기간치
예외:
IOException - 디폴트의 유효기간치의 취득중에 입출력 예외가 발생했을 경우
관련 항목:
setTTL(byte)

getTimeToLive

public int getTimeToLive()
                  throws IOException 
이 소켓으로부터 송신되는 멀티 캐스트 패킷의 디폴트의 유효기간을 가져옵니다.

반환값:
디폴트의 유효기간치
예외:
IOException - 디폴트의 유효기간치의 취득중에 입출력 예외가 발생했을 경우
관련 항목:
setTimeToLive(int)

joinGroup

public void joinGroup(InetAddress  mcastaddr)
               throws IOException 
어느 멀티 캐스트 그룹에 참가합니다. 그 동작은,setInterface 또는 setNetworkInterface 의 영향을 받을 가능성이 있습니다.

시큐리티 매니저가 존재하는 경우, 최초로 시큐리티 매니저의 checkMulticast 메소드가, 인수로서 mcastaddr 를 지정해 불려 갑니다.

파라미터:
mcastaddr - 참가하는 멀티 캐스트 주소
예외:
IOException - 참가시에 에러가 발생했을 경우, 또는 주소가 멀티 캐스트 주소가 아닌 경우
SecurityException - 시큐리티 매니저가 존재해, 그 checkMulticast 메소드가 참가를 허가하지 않는 경우
관련 항목:
SecurityManager.checkMulticast(InetAddress)

leaveGroup

public void leaveGroup(InetAddress  mcastaddr)
                throws IOException 
어느 멀티 캐스트 그룹으로부터 멀어집니다. 그 동작은,setInterface 또는 setNetworkInterface 의 영향을 받을 가능성이 있습니다.

시큐리티 매니저가 존재하는 경우, 최초로 시큐리티 매니저의 checkMulticast 메소드가, 인수로서 mcastaddr 를 지정해 불려 갑니다.

파라미터:
mcastaddr - 떨어지는 멀티 캐스트 주소
예외:
IOException - 멀어질 때에 에러가 발생했을 경우, 또는 주소가 멀티 캐스트 주소가 아닌 경우
SecurityException - 시큐리티 매니저가 존재해, 그 checkMulticast 메소드가 이 조작을 허가하지 않는 경우
관련 항목:
SecurityManager.checkMulticast(InetAddress)

joinGroup

public void joinGroup(SocketAddress  mcastaddr,
                      NetworkInterface  netIf)
               throws IOException 
지정된 인터페이스로 지정된 멀티 캐스트 그룹에 참가합니다.

시큐리티 매니저가 존재하는 경우, 최초로 시큐리티 매니저의 checkMulticast 메소드가, 인수로서 mcastaddr 를 지정해 불려 갑니다.

파라미터:
mcastaddr - 참가하는 멀티 캐스트 주소
netIf - 멀티 캐스트 데이터 그램 패킷을 수신하는 로컬 인터페이스를 지정한다. setInterface(InetAddress) 또는 setNetworkInterface(NetworkInterface) 로 설정된 인터페이스를 사용하는 경우는 null
예외:
IOException - 참가시에 에러가 발생했을 경우, 또는 주소가 멀티 캐스트 주소가 아닌 경우
SecurityException - 시큐리티 매니저가 존재해, 그 checkMulticast 메소드가 참가를 허가하지 않는 경우
IllegalArgumentException - mcastaddr 가 null 인지, 이 소켓에 의해 지원되어 있지 않은 SocketAddress 서브 클래스인 경우
도입된 버젼:
1.4
관련 항목:
SecurityManager.checkMulticast(InetAddress)

leaveGroup

public void leaveGroup(SocketAddress  mcastaddr,
                       NetworkInterface  netIf)
                throws IOException 
지정된 로컬 인터페이스상의 멀티 캐스트 그룹으로부터 멀어집니다.

시큐리티 매니저가 존재하는 경우, 최초로 시큐리티 매니저의 checkMulticast 메소드가, 인수로서 mcastaddr 를 지정해 불려 갑니다.

파라미터:
mcastaddr - 떨어지는 멀티 캐스트 주소
netIf - 로컬 인터페이스를 지정한다. setInterface(InetAddress) 또는 setNetworkInterface(NetworkInterface) 로 설정된 인터페이스를 사용하는 경우는 null
예외:
IOException - 멀어질 때에 에러가 발생했을 경우, 또는 주소가 멀티 캐스트 주소가 아닌 경우
SecurityException - 시큐리티 매니저가 존재해, 그 checkMulticast 메소드가 이 조작을 허가하지 않는 경우
IllegalArgumentException - mcastaddr 가 null 인지, 이 소켓에 의해 지원되어 있지 않은 SocketAddress 서브 클래스인 경우
도입된 버젼:
1.4
관련 항목:
SecurityManager.checkMulticast(InetAddress)

setInterface

public void setInterface(InetAddress  inf)
                  throws SocketException 
네트워크 인터페이스의 값에 의해 그 동작이 영향을 받는 메소드가 사용하는, 멀티 캐스트 네트워크 인터페이스를 설정합니다. multi-homed의 호스트에게 편리합니다.

파라미터:
inf - InetAddress
예외:
SocketException - 사용하고 있는 프로토콜로 에러 (TCP 에러등)가 발생했을 경우
관련 항목:
getInterface()

getInterface

public InetAddress  getInterface()
                         throws SocketException 
멀티 캐스트 패킷에 사용하는 네트워크 인터페이스의 주소를 가져옵니다.

반환값:
멀티 캐스트 패킷에 사용하는 네트워크 인터페이스의 주소를 나타내는 InetAddress
예외:
SocketException - 사용하고 있는 프로토콜로 에러 (TCP 에러등)가 발생했을 경우
관련 항목:
setInterface(java.net.InetAddress)

setNetworkInterface

public void setNetworkInterface(NetworkInterface  netIf)
                         throws SocketException 
이 소켓으로부터 송신되는 송출 멀티 캐스트 데이터 그램용의 네트워크 인터페이스를 지정합니다.

파라미터:
netIf - 인터페이스
예외:
SocketException - 사용하고 있는 프로토콜로 에러 (TCP 에러등)가 발생했을 경우
도입된 버젼:
1.4
관련 항목:
getNetworkInterface()

getNetworkInterface

public NetworkInterface  getNetworkInterface()
                                     throws SocketException 
멀티 캐스트 네트워크 인터페이스 세트를 가져옵니다.

반환값:
현재 설정되어 있는 멀티 캐스트 NetworkInterface
예외:
SocketException - 사용하고 있는 프로토콜로 에러 (TCP 에러등)가 발생했을 경우
도입된 버젼:
1.4
관련 항목:
setNetworkInterface(NetworkInterface)

setLoopbackMode

public void setLoopbackMode(boolean disable)
                     throws SocketException 
멀티 캐스트 데이터 그램의 로컬 루프백을 유효 또는 무효로 합니다. 이 옵션은, 멀티 캐스트 데이터를 로컬 소켓에 루프백 할지 어떨지를 설정하는 힌트로서 플랫폼의 네트워크 코드가 사용합니다.

이 옵션은 힌트이므로, 어플리케이션으로 루프 백 모드의 설정을 조사할 필요가 있는 경우는,getLoopbackMode() 를 호출해 주세요.

파라미터:
disable - LoopbackMode 를 무효로 하는 경우는 true
예외:
SocketException - 치의 설정중에 에러가 발생했을 경우
도입된 버젼:
1.4
관련 항목:
getLoopbackMode()

getLoopbackMode

public boolean getLoopbackMode()
                        throws SocketException 
멀티 캐스트 데이터 그램의 로컬 루프백의 설정치를 가져옵니다.

반환값:
LoopbackMode 가 무효가 되었을 경우는 true
예외:
SocketException - 치의 취득중에 에러가 발생했을 경우
도입된 버젼:
1.4
관련 항목:
setLoopbackMode(boolean)

send

@Deprecated 
public void send(DatagramPacket  p,
                            byte ttl)
          throws IOException 
추천 되고 있지 않습니다.  대신에, 다음의 코드 또는 그것과 동등의 코드를 사용해 주세요. ...... + context.getLifetime()); + context.getLifetime()); + context.getLifetime()); + context.getLifetime()); ......

이 소켓의 디폴트 이외의 TTL (유효기간)를 사용해, 데이터 그램 패킷을 행선지에 송신합니다. 이 메소드를 사용할 필요가 있는 것은, 특정의 TTL 가 필요하게 되는 경우만입니다. 그 이외의 경우는, 이 소켓상에서 TTL 를 한 번만 설정해, 그 디폴트의 TTL 를 모든 패킷으로 사용하는 것을 추천합니다. 이 메소드는, 소켓의 디폴트의 TTL 를 변경하지 않습니다. 그 동작은,setInterface 의 영향을 받을 가능성이 있습니다.

시큐리티 매니저가 존재하는 경우, 이 메소드는 우선, 몇개의 시큐리티 체크를 실행합니다. 우선,p.getAddress(). isMulticastAddress() 가 true 의 경우, 이 메소드는, 시큐리티 매니저의 checkMulticast 메소드를,p.getAddress()ttl 를 그 인수로 지정해 호출합니다. 그 식의 평가가 false 의 경우, 이 메소드는 대신에, 시큐리티 매니저의 checkConnect 메소드를, 인수 p.getAddress(). getHostAddress()p.getPort() 를 지정해 호출합니다. 각각의 시큐리티 매니저 메소드 호출의 결과, 조작이 허가되지 않는 경우는 SecurityException 가 throw 됩니다.

파라미터:
p - 송신되는 패킷. 패킷에는, 행선지의 멀티 캐스트 IP 주소와 송신 대상의 데이터를 포함해야 하는 것이다. 어느 행선지 멀티 캐스트 주소에 패킷을 송신하려면 , 그 그룹의 멤버일 필요는 없는
ttl - 멀티 캐스트 패킷의 유효기간 (임의). 디폴트 ttl 치는 1
예외:
IOException - 에러가 발생했을 경우, 구체적으로는 ttl 의 설정중에 에러가 발생했을 경우에 발행된다
SecurityException - 시큐리티 매니저가 존재해, 그 checkMulticast 또는 checkConnect 메소드가 송신을 허가하지 않는 경우
관련 항목:
DatagramSocket.send(java.net.DatagramPacket) , DatagramSocket.receive(java.net.DatagramPacket) , SecurityManager.checkMulticast(java.net.InetAddress, byte) , SecurityManager.checkConnect(java.lang.String, int)

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.