JavaTM Platform
Standard Ed. 6

java.net
클래스 DatagramSocket

java.lang.Object 
  상위를 확장 java.net.DatagramSocket
직계의 기존의 서브 클래스:
MulticastSocket


public class DatagramSocket
extends Object

이 클래스는, 데이터 그램 패킷을 송수신하기 위한 소켓을 나타냅니다.

데이터 그램 소켓은, 패킷 전달 서비스의 송신점 또는 수신점입니다. 데이터 그램 소켓상에서 송신 또는 수신하는 각 패킷은, 각각 다른 주소로 경로가 지정됩니다. 어느 머신으로부터 다른 머신에 복수의 패킷을 송신하는 경우, 각 패킷은 다른 경로에서 송신될 가능성이 있어, 행선지에는 임의의 순서로 도달할 가능성이 있습니다.

UDP 브로드캐스트의 송신은, DatagramSocket 상에서 항상 유효하게 되어 있습니다. 브로드캐스트 패킷을 수신할 때는, DatagramSocket 를 와일드 카드 주소에 바인드 하도록 해 주세요. 구현에 따라서는, DatagramSocket 가 특정의 주소에 바인드 되고 있어도 브로드캐스트 패킷을 수신하는 경우도 있습니다.

예:DatagramSocket s = new DatagramSocket(null); s.bind(new InetSocketAddress(8888));. 이것은,DatagramSocket s = new DatagramSocket(8888); 와 동등합니다. 어느 쪽의 방법에서도, UDP 포트 8888 상에서 브로드캐스트를 수신하는 DatagramSocket 를 작성할 수 있습니다.

도입된 버젼:
JDK1. 0
관련 항목:
DatagramPacket , DatagramChannel

생성자 의 개요
  DatagramSocket ()
          데이터 그램 소켓을 구축해, 로컬 호스트 머신상의 사용 가능한 포트에 바인드 합니다.
protected DatagramSocket (DatagramSocketImpl  impl)
          지정된 DatagramSocketImpl 를 사용해 바인드되어 있지 않은 데이터 그램 소켓을 작성합니다.
  DatagramSocket (int port)
          데이터 그램 소켓을 구축해, 로컬 호스트 머신상의 지정된 포트에 바인드 합니다.
  DatagramSocket (int port, InetAddress  laddr)
          지정된 로컬 주소에 바인드 된 데이터 그램 소켓을 작성합니다.
  DatagramSocket (SocketAddress  bindaddr)
          지정된 로컬 주소에 바인드 된 데이터 그램 소켓을 작성합니다.
 
메소드의 개요
 void bind (SocketAddress  addr)
          이 DatagramSocket 를 특정의 주소 및 포트에 바인드 합니다.
 void close ()
          이 데이터 그램 소켓을 닫습니다.
 void connect (InetAddress  address, int port)
          소켓을 이 소켓의 원격 주소에 접속합니다.
 void connect (SocketAddress  addr)
          이 소켓을 원격 소켓 주소 (IP 주소 + 포트 번호)에 접속합니다.
 void disconnect ()
          소켓을 절단 합니다.
 boolean getBroadcast ()
          SO_BROADCAST 가 유효한가 어떤가를 조사합니다.
 DatagramChannel getChannel ()
          이 데이터 그램 소켓에 관련하는 고유 DatagramChannel 객체를 돌려줍니다 (존재하는 경우).
 InetAddress getInetAddress ()
          이 소켓의 접속처의 주소를 돌려줍니다.
 InetAddress getLocalAddress ()
          소켓의 바인드처의 로컬 주소를 가져옵니다.
 int getLocalPort ()
          이 소켓의 바인드처가 되는, 로컬 호스트상의 포트 번호를 돌려줍니다.
 SocketAddress getLocalSocketAddress ()
          이 소켓이 바인드 되고 있는 단 점의 주소를 돌려줍니다.
 int getPort ()
          이 소켓을 위한 포트를 돌려줍니다.
 int getReceiveBufferSize ()
          이 DatagramSocket 로 사용되는 SO_RCVBUF 옵션의 값을 가져옵니다.
 SocketAddress getRemoteSocketAddress ()
          이 소켓이 접속되고 있는 단 점의 주소인가, 소켓이 접속되어 있지 않은 경우는 null 를 돌려줍니다.
 boolean getReuseAddress ()
          SO_REUSEADDR 가 유효한가 어떤가를 조사합니다.
 int getSendBufferSize ()
          이 DatagramSocket 로 사용되는 SO_SNDBUF 옵션의 값을 가져옵니다.
 int getSoTimeout ()
          SO_TIMEOUT 의 설정을 가져옵니다.
 int getTrafficClass ()
          이 DatagramSocket 로부터 송신되는 패킷의 IP 데이터 그램 헤더의 트래픽 클래스 또는 서비스형을 가져옵니다.
 boolean isBound ()
          소켓의 바인딩 상태를 돌려줍니다.
 boolean isClosed ()
          소켓이 닫았는지의 여부를 돌려줍니다.
 boolean isConnected ()
          소켓의 접속 상태를 돌려줍니다.
 void receive (DatagramPacket  p)
          이 소켓으로부터의 데이터 그램 패킷을 수신합니다.
 void send (DatagramPacket  p)
          이 소켓으로부터 데이터 그램 패킷을 송신합니다.
 void setBroadcast (boolean on)
          SO_BROADCAST 를 유효 또는 무효로 합니다.
static void setDatagramSocketImplFactory (DatagramSocketImplFactory  fac)
          어플리케이션의 데이터 그램 소켓 구현 팩토리를 설정합니다.
 void setReceiveBufferSize (int size)
          SO_RCVBUF 옵션을, 이 DatagramSocket 로 지정된 값으로 설정합니다.
 void setReuseAddress (boolean on)
          SO_REUSEADDR 소켓 옵션을 유효 또는 무효로 합니다.
 void setSendBufferSize (int size)
          SO_SNDBUF 옵션을, 이 DatagramSocket 로 지정된 값으로 설정합니다.
 void setSoTimeout (int timeout)
          지정된 대기 시간 (밀리 세컨드 단위)을 사용해, SO_TIMEOUT 를 유효 또는 무효로 합니다.
 void setTrafficClass (int tc)
          이 DatagramSocket 로부터 송신되는 데이터 그램의 IP 데이터 그램 헤더의 트래픽 클래스 또는 서비스형 octet 를 설정합니다.
 
클래스 java.lang. Object 로부터 상속된 메소드
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
 

생성자 의 상세

DatagramSocket

public DatagramSocket()
               throws SocketException 
데이터 그램 소켓을 구축해, 로컬 호스트 머신상의 사용 가능한 포트에 바인드 합니다. 소켓은 와일드 카드 주소 (커넬에 의해 선택된 임의의 IP 주소)에 바인드 됩니다.

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

예외:
SocketException - 소켓을 열 수가 없었던 경우, 또는 지정된 로컬 포트에 소켓을 바인드 할 수 없었던 경우
SecurityException - 시큐리티 매니저가 존재해, 그 checkListen 메소드가 이 조작을 허가하지 않는 경우
관련 항목:
SecurityManager.checkListen(int)

DatagramSocket

protected DatagramSocket(DatagramSocketImpl  impl)
지정된 DatagramSocketImpl 를 사용해 바인드되어 있지 않은 데이터 그램 소켓을 작성합니다.

파라미터:
impl - 서브 클래스가 DatagramSocket 상에서 사용하는 DatagramSocketImpl 의 인스턴스
도입된 버젼:
1.4

DatagramSocket

public DatagramSocket(SocketAddress  bindaddr)
               throws SocketException 
지정된 로컬 주소에 바인드 된 데이터 그램 소켓을 작성합니다.

주소가 null 의 경우는, 바인드되어 있지 않은 소켓을 작성합니다.

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

파라미터:
bindaddr - 바인드 하는 로컬 소켓 주소. 바인드되어 있지 않은 소켓의 경우는 null
예외:
SocketException - 소켓을 열 수가 없었던 경우, 또는 지정된 로컬 포트에 소켓을 바인드 할 수 없었던 경우
SecurityException - 시큐리티 매니저가 존재해, 그 checkListen 메소드가 이 조작을 허가하지 않는 경우
도입된 버젼:
1.4
관련 항목:
SecurityManager.checkListen(int)

DatagramSocket

public DatagramSocket(int port)
               throws SocketException 
데이터 그램 소켓을 구축해, 로컬 호스트 머신상의 지정된 포트에 바인드 합니다. 소켓은 와일드 카드 주소 (커넬에 의해 선택된 임의의 IP 주소)에 바인드 됩니다.

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

파라미터:
port - 사용하는 포트
예외:
SocketException - 소켓을 열 수가 없었던 경우, 또는 지정된 로컬 포트에 소켓을 바인드 할 수 없었던 경우
SecurityException - 시큐리티 매니저가 존재해, 그 checkListen 메소드가 이 조작을 허가하지 않는 경우
관련 항목:
SecurityManager.checkListen(int)

DatagramSocket

public DatagramSocket(int port,
                      InetAddress  laddr)
               throws SocketException 
지정된 로컬 주소에 바인드 된 데이터 그램 소켓을 작성합니다. 로컬 포트는, 0 ~ 65535 의 범위에서 지정합니다. IP 주소가 0.0. 0.0 의 경우, 소켓은 와일드 카드 주소 (커넬에 의해 선택된 임의의 IP 주소)에 바인드 됩니다.

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

파라미터:
port - 사용하는 로컬 포트
laddr - 바인드처의 로컬 주소
예외:
SocketException - 소켓을 열 수가 없었던 경우, 또는 지정된 로컬 포트에 소켓을 바인드 할 수 없었던 경우
SecurityException - 시큐리티 매니저가 존재해, 그 checkListen 메소드가 이 조작을 허가하지 않는 경우
도입된 버젼:
JDK1. 1
관련 항목:
SecurityManager.checkListen(int)
메소드의 상세

bind

public void bind(SocketAddress  addr)
          throws SocketException 
이 DatagramSocket 를 특정의 주소 및 포트에 바인드 합니다.

주소가 null 의 경우는, 시스템에 의해 일시적인 포트와 유효한 로컬 주소가 선택되어 소켓이 바인드 됩니다.

파라미터:
addr - 바인드처의 주소 및 포트
예외:
SocketException - 바인드시에 에러가 발생했을 경우, 또는 소켓이 벌써 바인드 되고 있는 경우
SecurityException - 시큐리티 매니저가 존재해, 그 checkListen 메소드가 이 조작을 허가하지 않는 경우
IllegalArgumentException - addr 가 이 소켓으로 지원되어 있지 않은 SocketAddress 서브 클래스인 경우
도입된 버젼:
1.4

connect

public void connect(InetAddress  address,
                    int port)
소켓을 이 소켓의 원격 주소에 접속합니다. 소켓이 원격 주소에 접속되면(자), 그 주소와의 사이에 밖에 패킷을 송수신 할 수 없게 됩니다. 디폴트에서는, 데이터 그램 소켓은 접속되지 않습니다.

소켓을 접속하는 원격 접속처가 존재하지 않는가 도달 불가능의 경우, 및 그 주소에 대한 ICMP 전송처 도달 불능 패킷을 수신했을 경우는, 이후의 송신 또는 수신 호출로 PortUnreachableException 가 throw 되는 일이 있습니다. 예외가 throw 된다고 하는 보증이 있는 것은 아닙니다.

지정된 호스트 및 포트와의 데이터 그램의 송수신을 행하기 위한 호출측의 액세스권은, 접속시에 확인됩니다. 소켓이 접속되었을 때, 송수신에서는 패킷의 수신 및 송신에 대한 시큐리티 체크를실시하지 않습니다. 다만, 패킷과 소켓의 주소 및 포트가 일치할지 어떨지의 확인은 실시합니다. 송신의 처리에서는, 패킷의 주소가 설정되어 있는 경우에, 패킷의 주소와 소켓의 주소가 일치하지 않을 때는, IllegalArgumentException 가 throw 됩니다. 멀티 캐스트 주소에 접속되고 있는 소켓은, 송신 패킷인 만큼 사용할 수 있습니다.

파라미터:
address - 소켓이 사용하는 원격 주소
port - 소켓이 사용하는 원격 포트
예외:
IllegalArgumentException - 주소가 null 인 경우, 또는 포트가 범위외의 경우
SecurityException - 지정된 주소 및 포트와의 데이터 그램의 송수신이, 호출 측에 허가되어 있지 않은 경우
관련 항목:
disconnect() , send(java.net.DatagramPacket) , receive(java.net.DatagramPacket)

connect

public void connect(SocketAddress  addr)
             throws SocketException 
이 소켓을 원격 소켓 주소 (IP 주소 + 포트 번호)에 접속합니다.

파라미터:
addr - 원격 주소
예외:
SocketException - 접속에 실패했을 경우
IllegalArgumentException - addr 가 null 인 경우, 또는 addr 가 이 소켓으로 지원되어 있지 않은 SocketAddress 서브 클래스인 경우
도입된 버젼:
1.4
관련 항목:
connect(java.net.InetAddress, int)

disconnect

public void disconnect()
소켓을 절단 합니다. 소켓이 접속되어 있지 않은 경우는, 아무것도 실시하지 않습니다.

관련 항목:
connect(java.net.InetAddress, int)

isBound

public boolean isBound()
소켓의 바인딩 상태를 돌려줍니다.

반환값:
소켓이 정상적으로 주소에 바인드 되고 있는 경우는 true
도입된 버젼:
1.4

isConnected

public boolean isConnected()
소켓의 접속 상태를 돌려줍니다.

반환값:
소켓이 서버에 정상적으로 접속되고 있는 경우는 true
도입된 버젼:
1.4

getInetAddress

public InetAddress  getInetAddress()
이 소켓의 접속처의 주소를 돌려줍니다. 소켓이 접속되어 있지 않은 경우는 null 를 돌려줍니다.

반환값:
소켓이 접속되고 있는 주소

getPort

public int getPort()
이 소켓을 위한 포트를 돌려줍니다. 소켓이 접속되어 있지 않은 경우는 -1 을 돌려줍니다.

반환값:
이 소켓이 접속되고 있는 포트

getRemoteSocketAddress

public SocketAddress  getRemoteSocketAddress()
이 소켓이 접속되고 있는 단 점의 주소인가, 소켓이 접속되어 있지 않은 경우는 null 를 돌려줍니다.

반환값:
이 소켓의 원격단점을 나타내는 SocketAddress. 소켓이 아직 접속되어 있지 않은 경우는 null
도입된 버젼:
1.4
관련 항목:
getInetAddress() , getPort() , connect(SocketAddress)

getLocalSocketAddress

public SocketAddress  getLocalSocketAddress()
이 소켓이 바인드 되고 있는 단 점의 주소를 돌려줍니다. 소켓이 바인드되어 있지 않은 경우는 null 를 돌려줍니다.

반환값:
이 소켓의 로컬단점을 나타내는 SocketAddress. 소켓이 아직 바인드되어 있지 않은 경우는 null
도입된 버젼:
1.4
관련 항목:
getLocalAddress() , getLocalPort() , bind(SocketAddress)

send

public void send(DatagramPacket  p)
          throws IOException 
이 소켓으로부터 데이터 그램 패킷을 송신합니다. DatagramPacket 에는, 송신하는 데이터, 데이터의 길이, 원격 호스트의 IP 주소, 및 원격 호스트상의 포트 번호등의 정보가 포함되고 있습니다.

시큐리티 매니저가 존재해, 소켓이 현재 원격 주소에 접속되어 있지 않은 경우, 이 메소드는 최초로 몇개의 시큐리티 체크를 실시합니다. 우선,p.getAddress(). isMulticastAddress() 가 true 인 경우, 이 메소드는 p.getAddress() 를 인수로서 시큐리티 매니저의 checkMulticast 메소드를 호출합니다. 상기의 식의 결과가 false 인 경우, 이 메소드는 대신에 p.getAddress(). getHostAddress()p.getPort() 를 인수로서 시큐리티 매니저의 checkConnect 메소드를 호출합니다. 어느 쪽의 시큐리티 매니저 메소드의 호출에서도 조작이 허가되지 않는 경우는, SecurityException 가 throw 됩니다.

파라미터:
p - 송신되는 DatagramPacket
예외:
IOException - 입출력 에러가 발생했을 경우
SecurityException - 시큐리티 매니저가 존재해, 그 checkMulticast 메소드 또는 checkConnect 메소드가 송신을 허가하지 않는 경우
PortUnreachableException - 현재 도달 불가능한 접속 먼저 소켓이 접속되는 경우에 throw 되는 일이 있다. 예외의 throw가 보증되는 것은 아니다
IllegalBlockingModeException - 소켓에 관련한 채널이 존재해, 그 채널이 비블록 모드의 경우
관련 항목:
DatagramPacket , SecurityManager.checkMulticast(InetAddress) , SecurityManager.checkConnect(java.lang.String, int)

receive

public void receive(DatagramPacket  p)
             throws IOException 
이 소켓으로부터의 데이터 그램 패킷을 수신합니다. 이 메소드가 복귀하면(자),DatagramPacket 의 버퍼에는 수신한 데이터가 포함됩니다. 데이터 그램 패킷에는, 송신자의 IP 주소와 송신자의 머신의 포트 번호도 포함되고 있습니다.

이 메소드는 데이터 그램이 수신될 때까지 블록 됩니다. 데이터 그램 패킷 객체의 length 필드에는, 수신되는 메세지의 길이의 정보가 포함되고 있습니다. 메세지가 패킷보다 긴 경우, 메세지는 절약할 수 있습니다.

시큐리티 매니저가 존재하는 경우, 시큐리티 매니저의 checkAccept 메소드가 패킷의 수신을 허가하지 않을 때는, 패킷의 수신은 행해지지 않습니다.

파라미터:
p - 수신한 데이터를 보존하는 DatagramPacket
예외:
IOException - 입출력 에러가 발생했을 경우
SocketTimeoutException - setSoTimeout 가 이전에 불려 가, 타임 아웃이 지났을 경우
PortUnreachableException - 현재 도달 불가능한 접속 먼저 소켓이 접속되는 경우에 throw 되는 일이 있다. 예외의 throw가 보증되는 것은 아니다
IllegalBlockingModeException - 소켓에 관련한 채널이 존재해, 그 채널이 비블록 모드의 경우
관련 항목:
DatagramPacket , DatagramSocket

getLocalAddress

public InetAddress  getLocalAddress()
소켓의 바인드처의 로컬 주소를 가져옵니다.

시큐리티 매니저가 존재하는 경우는, 우선 시큐리티 매니저의 checkConnect 메소드가 호스트 주소 및 -1 을 인수로서 불려 가 조작이 허가될지 어떨지가 확인됩니다.

반환값:
소켓의 바인드처의 로컬 주소. 소켓이 바인드 되지 않는가, 또는 시큐리티 매니저의 checkConnect 메소드가 이 조작을 허가하지 않는 경우는, 임의의 로컬 주소를 나타내는 InetAddress
도입된 버젼:
1.1
관련 항목:
SecurityManager.checkConnect(java.lang.String, int)

getLocalPort

public int getLocalPort()
이 소켓의 바인드처가 되는, 로컬 호스트상의 포트 번호를 돌려줍니다.

반환값:
이 소켓의 바인드처가 되는, 로컬 호스트상의 포트 번호

setSoTimeout

public void setSoTimeout(int timeout)
                  throws SocketException 
지정된 대기 시간 (밀리 세컨드 단위)을 사용해, SO_TIMEOUT 를 유효 또는 무효로 합니다. 이 옵션에 제로 이외의 대기 시간을 설정했을 경우, 이 DatagramSocket 에 대해서 receive()를 호출하면(자), 설정한 시간만 블록 됩니다. 대기 시간이 경과하면(자), DatagramSocket 는 유효한 그대로로 java.net.SocketTimeoutException 가 발생합니다. 이 옵션은, 블록 조작에 들어가기 전에 유효하게 해 둘필요가 있습니다. 대기 시간에는 0 보다 큰 값을 지정합니다. 대기 시간에 제로를 지정하면(자), 대기 시간은 무한이라고 해석됩니다.

파라미터:
timeout - 밀리 세컨드로 나타내지는, 지정된 대기 시간
예외:
SocketException - 기본이 되는 프로토콜로 UDP 에러등의 에러가 발생했을 경우
도입된 버젼:
JDK1. 1
관련 항목:
getSoTimeout()

getSoTimeout

public int getSoTimeout()
                 throws SocketException 
SO_TIMEOUT 의 설정을 가져옵니다. 이 옵션이 무효 (대기 시간이 무한)의 경우는, 0 을 돌려줍니다.

반환값:
SO_TIMEOUT 의 설정
예외:
SocketException - 기본이 되는 프로토콜로 UDP 에러등의 에러가 발생했을 경우
도입된 버젼:
JDK1. 1
관련 항목:
setSoTimeout(int)

setSendBufferSize

public void setSendBufferSize(int size)
                       throws SocketException 
SO_SNDBUF 옵션을, 이 DatagramSocket 로 지정된 값으로 설정합니다. SO_SNDBUF 옵션은, 사용하는 네트워크 입출력 버퍼의 사이즈를 설정하는 힌트로서 네트워크 구현이 사용합니다. 또, 네트워크 구현은, 이 소켓으로 송신할 수 있는 패킷의 최대 사이즈를 판정하기 위해서도 SO_SNDBUF 설정을 사용합니다.

SO_SNDBUF 는 힌트이므로, 어플리케이션으로 버퍼의 사이즈를 조사할 필요가 있는 경우는,getSendBufferSize() 를 호출하도록 해 주세요.

버퍼 사이즈를 크게 하면(자), 송신 속도가 높은 경우에 네트워크 구현에 의해 복수의 송신 패킷을 큐에 넣는 것이 가능하게 됩니다.

주:send(DatagramPacket) 를 사용해 SO_SNDBUF 의 설정보다 큰 DatagramPacket 를 송신하는 경우, 패킷이 송신될까 파기될까는 구현에 따라서 다릅니다.

파라미터:
size - 송신 버퍼용으로서 설정하는 사이즈. 0 보다 큰 값을 지정할 필요가 있다
예외:
SocketException - 기본이 되는 프로토콜로 UDP 에러등의 에러가 발생했을 경우
IllegalArgumentException - 치가 0 또는 0 보다 작은 값인 경우
관련 항목:
getSendBufferSize()

getSendBufferSize

public int getSendBufferSize()
                      throws SocketException 
DatagramSocket 로 사용되는 SO_SNDBUF 옵션의 값을 가져옵니다. 이것은, 이 DatagramSocket 로 출력용으로서 플랫폼이 사용하는 버퍼의 사이즈입니다.

반환값:
DatagramSocket 의 SO_SNDBUF 옵션의 값
예외:
SocketException - 기본이 되는 프로토콜로 UDP 에러등의 에러가 발생했을 경우
관련 항목:
setSendBufferSize(int)

setReceiveBufferSize

public void setReceiveBufferSize(int size)
                          throws SocketException 
SO_RCVBUF 옵션을, 이 DatagramSocket 로 지정된 값으로 설정합니다. SO_RCVBUF 옵션은, 사용하는 네트워크 입출력 버퍼의 사이즈를 설정하는 힌트로서 네트워크 구현이 사용합니다. 또, 네트워크 구현은, 이 소켓으로 수신할 수 있는 패킷의 최대 사이즈를 판정하기 위해서도 SO_RCVBUF 설정을 사용합니다.

SO_RCVBUF 는 힌트이므로, 어플리케이션으로 버퍼의 사이즈 설정을 조사할 필요가 있는 경우는,getReceiveBufferSize() 를 호출하도록 해 주세요.

SO_RCVBUF 의 값을 크게 하면(자),receive(DatagramPacket) 를 사용한 수신보다 빠르게 패킷이 도달하는 경우에, 네트워크 구현에 의한 복수의 패킷의 버퍼링이 가능하게 되는 경우가 있습니다.

주:SO_RCVBUF 보다 큰 패킷을 수신할 수 있을지 어떨지는 구현에 따라서 다릅니다.

파라미터:
size - 수신 버퍼용으로서 설정하는 사이즈. 0 보다 큰 값을 지정할 필요가 있다
예외:
SocketException - 기본이 되는 프로토콜로 UDP 에러등의 에러가 발생했을 경우
IllegalArgumentException - 치가 0 또는 0 보다 작은 값인 경우
관련 항목:
getReceiveBufferSize()

getReceiveBufferSize

public int getReceiveBufferSize()
                         throws SocketException 
DatagramSocket 로 사용되는 SO_RCVBUF 옵션의 값을 가져옵니다. 이것은, 이 DatagramSocket 로 입력용으로서 플랫폼이 사용하는 버퍼의 사이즈입니다.

반환값:
DatagramSocket 의 SO_RCVBUF 옵션의 값
예외:
SocketException - 기본이 되는 프로토콜로 UDP 에러등의 에러가 발생했을 경우
관련 항목:
setReceiveBufferSize(int)

setReuseAddress

public void setReuseAddress(boolean on)
                     throws SocketException 
SO_REUSEADDR 소켓 옵션을 유효 또는 무효로 합니다.

UDP 소켓의 경우, 복수의 소켓을 같은 소켓 주소에 바인드 하는 것이 필요하게 되는 일이 있습니다. 멀티 캐스트 패킷을 수신하기 위해서는 일반적으로 이와 같이 합니다 (MulticastSocket 를 참조). bind(SocketAddress) 를 사용해 소켓을 바인드 하기 전에 SO_REUSEADDR 소켓 옵션이 유효하게 되어 있으면,SO_REUSEADDR 소켓 옵션을 사용해 복수의 소켓을 동일한 소켓 주소에 바인드 할 수가 있습니다.

주:이 기능은, 기존의 모든 플랫폼에서 지원되고 있는 것은 아닙니다. 따라서, 이 옵션이 무시될지 어떨지는 구현에 따라서 다릅니다. 다만, 이 기능이 지원되어 있지 않은 경우,getReuseAddress() 는 항상 false 를 돌려줍니다.

DatagramSocket 가 작성되면(자),SO_REUSEADDR 의 초기설정은 무효가 됩니다.

소켓이 바인드 되었다 (isBound() 를 참조) 나중에 SO_REUSEADDR 를 유효 또는 무효로 하는 경우의 동작은 정의되고 있지 않습니다.

파라미터:
on - 유효하게 할까 무효로 하는지를 지정
예외:
SocketException - SO_RESUEADDR 소켓 옵션을 유효 또는 무효로 할 경우에 에러가 발생하는 경우, 또는 소켓이 닫고 있는 경우
도입된 버젼:
1.4
관련 항목:
getReuseAddress() , bind(SocketAddress) , isBound() , isClosed()

getReuseAddress

public boolean getReuseAddress()
                        throws SocketException 
SO_REUSEADDR 가 유효한가 어떤가를 조사합니다.

반환값:
SO_REUSEADDR 가 유효한가 어떤가를 나타내는 boolean
예외:
SocketException - 기본이 되는 프로토콜로 UDP 에러등의 에러가 발생했을 경우
도입된 버젼:
1.4
관련 항목:
setReuseAddress(boolean)

setBroadcast

public void setBroadcast(boolean on)
                  throws SocketException 
SO_BROADCAST 를 유효 또는 무효로 합니다.

파라미터:
on - 브로드캐스트를 온으로 할지 어떨지를 지정
예외:
SocketException - 기본이 되는 프로토콜로 UDP 에러등의 에러가 발생했을 경우
도입된 버젼:
1.4
관련 항목:
getBroadcast()

getBroadcast

public boolean getBroadcast()
                     throws SocketException 
SO_BROADCAST 가 유효한가 어떤가를 조사합니다.

반환값:
SO_BROADCAST 가 유효한가 어떤가를 나타내는 boolean
예외:
SocketException - 기본이 되는 프로토콜로 UDP 에러등의 에러가 발생했을 경우
도입된 버젼:
1.4
관련 항목:
setBroadcast(boolean)

setTrafficClass

public void setTrafficClass(int tc)
                     throws SocketException 
이 DatagramSocket 로부터 송신되는 데이터 그램의 IP 데이터 그램 헤더의 트래픽 클래스 또는 서비스형 octet 를 설정합니다. 사용하는 네트워크 구현이 이 값을 무시하는 일이 있으므로, 어플리케이션에서는 이 값을 힌트라고 생각해 주세요.

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

주:

IP (Internet Protocol) Version 4 의 경우, RFC 1349 로 설명되고 있도록(듯이), 이 값은 우선도의 높은 octet 와 TOS 필드로 구성됩니다. TOS 필드는, 다음과 같이 비트 단위의 논리합에 의해 작성되는 비트 세트입니다.

최하정도 비트는, MBZ (0 이 아니면 안된다) 비트에 대응하므로, 항상 무시됩니다.

우선 필드에 비트를 설정하면(자), 조작이 허가되지 않는 것을 나타내는 SocketException 가 되는 일이 있습니다.

IP (Internet Protocol) Version 6 의 경우,tc 는 IP 헤더의 sin6_flowinfo 필드에 포함되는 값입니다.

파라미터:
tc - 비트 세트의 int
예외:
SocketException - 트래픽 클래스 또는 서비스형을 설정할 경우에 에러가 발생했을 경우
도입된 버젼:
1.4
관련 항목:
getTrafficClass()

getTrafficClass

public int getTrafficClass()
                    throws SocketException 
이 DatagramSocket 로부터 송신되는 패킷의 IP 데이터 그램 헤더의 트래픽 클래스 또는 서비스형을 가져옵니다.

사용하는 네트워크 구현이,setTrafficClass(int) 를 사용해 설정된 트래픽 클래스 또는 서비스형을 무시하는 일이 있으므로, 이 DatagramSocket 로 setTrafficClass(int) 메소드를 사용해 이전으로 설정된 값과는 다른 값이 이 메소드로부터 반환되는 일이 있습니다.

반환값:
벌써 설정되어 있는 트래픽 클래스 또는 서비스형
예외:
SocketException - 트래픽 클래스 또는 서비스형의 값을 취득할 경우에 에러가 발생했을 경우
도입된 버젼:
1.4
관련 항목:
setTrafficClass(int)

close

public void close()
이 데이터 그램 소켓을 닫습니다.

현재 이 소켓의 receive(java.net.DatagramPacket) 로 블록 떠날 수 있어 모든 thread가 SocketException 를 throw 합니다.

이 소켓에 관련하는 채널이 존재하는 경우는, 그 채널도 닫혀집니다.


isClosed

public boolean isClosed()
소켓이 닫았는지의 여부를 돌려줍니다.

반환값:
소켓이 닫았을 경우는 true
도입된 버젼:
1.4

getChannel

public DatagramChannel  getChannel()
이 데이터 그램 소켓에 관련하는 고유 DatagramChannel 객체를 돌려줍니다 (존재하는 경우).

채널 자체가 DatagramChannel.open 메소드를 사용해 작성되었을 경우에만, 데이터 그램 소켓에 채널이 존재합니다.

반환값:
이 데이터 그램 소켓에 관련하는 데이터 그램 채널. 이 소켓이 채널용으로 작성되지 않았던 경우는 null
도입된 버젼:
1.4

setDatagramSocketImplFactory

public static void setDatagramSocketImplFactory(DatagramSocketImplFactory  fac)
                                         throws IOException 
어플리케이션의 데이터 그램 소켓 구현 팩토리를 설정합니다. 팩토리를 설정할 수 있는 것은 1 회 뿐입니다.

어플리케이션으로 새로운 데이터 그램 소켓을 작성하면(자), 소켓 구현 팩토리의 createDatagramSocketImpl 메소드가 불려 가 실제의 데이터 그램 소켓 구현이 작성됩니다.

이 메소드에 null 를 건네주어도, 팩토리가 벌써 설정되어 있지 않은 한, 그것은 무조작이 됩니다.

시큐리티 매니저가 존재하는 경우, 이 메소드는 최초로 시큐리티 매니저의 checkSetFactory 메소드를 호출하는 것으로, 이 조작이 허가되고 있는 것을 확인합니다. 이 결과, SecurityException 가 throw 되는 일이 있습니다.

파라미터:
fac - 목적의 팩토리
예외:
IOException - 데이터 그램 소켓 팩토리의 설정중에 입출력 에러가 발생했을 경우
SocketException - 팩토리가 벌써 정의되고 있는 경우
SecurityException - 시큐리티 매니저가 존재해, 그 checkSetFactory 메소드가 이 조작을 허가하지 않는 경우
도입된 버젼:
1.3
관련 항목:
DatagramSocketImplFactory.createDatagramSocketImpl() , SecurityManager.checkSetFactory()

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 도 참조해 주세요.