JavaTM Platform
Standard Ed. 6

java.nio.channels
클래스 DatagramChannel

java.lang.Object 
  상위를 확장 java.nio.channels.spi.AbstractInterruptibleChannel 
      상위를 확장 java.nio.channels.SelectableChannel 
          상위를 확장 java.nio.channels.spi.AbstractSelectableChannel 
              상위를 확장 java.nio.channels.DatagramChannel
모든 구현된 인터페이스:
Closeable , ByteChannel , Channel , GatheringByteChannel , InterruptibleChannel , ReadableByteChannel , ScatteringByteChannel , WritableByteChannel


public abstract class DatagramChannel
extends AbstractSelectableChannel
implements ByteChannel , ScatteringByteChannel , GatheringByteChannel

데이터 그램형 소켓의 선택 가능한 채널입니다.

데이터 그램 채널은, 네트워크 데이터 그램 소켓의 완전한 추상화가 아닙니다. 소켓 옵션의 바인드와 조작은,socket 메소드 호출에 의해 취득한 관련 DatagramSocket 객체를 개입시켜 실시할 필요가 있습니다. 임의의 기존 데이터 그램 소켓의 채널을 작성하거나 데이터 그램 채널에 관련한 데이터 그램 소켓으로 DatagramSocketImpl 객체를 사용하도록(듯이) 지정할 수 없습니다.

데이터 그램 채널은, 이 클래스의 open 메소드를 호출하는 것에 의해 작성할 수 있습니다. 새롭게 작성된 데이터 그램 채널은 오픈입니다만, 접속은 확립되어 있지 않습니다. send 메소드와 receive 메소드는, 데이터 그램 채널을 접속하지 않아도 사용할 수 있습니다. 시큐리티 체크의 오버헤드를 회피하는 목적으로 connect 메소드를 호출하면(자), 데이터 그램 채널이 접속되어 송수신 조작마다 시큐리티 체크를 하지 않고 끝납니다. 소켓 주소를 받아들이지 않는 (돌려주지 않는다) read 메소드와 write 메소드를 사용하는 경우는, 데이터 그램 채널을 접속할 필요가 있습니다.

한 번 접속된 데이터 그램 채널은, 접속이 절단 될까 클로즈 될 때까지 접속된 채로 있습니다. 데이터 그램 채널이 접속되고 있을지 어떨지는,isConnected 메소드 호출에 의해 판단할 수 있습니다.

데이터 그램 채널은, 복수의 병행 thread로 안전하게 사용할 수 있습니다. 데이터 그램 채널은 병행 read 및 기입을 지원합니다. 다만, read를 실시하는 thread도 기입을 실시하는 thread도 특정의 시점에서는 항상 1 개 이하입니다.

도입된 버젼:
1.4

생성자 의 개요
protected DatagramChannel (SelectorProvider  provider)
          이 클래스의 새로운 인스턴스를 초기화합니다.
 
메소드의 개요
abstract  DatagramChannel connect (SocketAddress  remote)
          이 채널의 소켓을 접속합니다.
abstract  DatagramChannel disconnect ()
          이 채널의 소켓의 접속을 절단 합니다.
abstract  boolean isConnected ()
          이 채널의 소켓이 접속되고 있는지 어떤지를 판단합니다.
static DatagramChannel open ()
          데이터 그램 채널을 오픈합니다.
abstract  int read (ByteBuffer  dst)
          이 채널로부터 데이터 그램을 읽어들입니다.
 long read (ByteBuffer [] dsts)
          이 채널로부터 데이터 그램을 읽어들입니다.
abstract  long read (ByteBuffer [] dsts, int offset, int length)
          이 채널로부터 데이터 그램을 읽어들입니다.
abstract  SocketAddress receive (ByteBuffer  dst)
          이 채널로부터 데이터 그램을 수신합니다.
abstract  int send (ByteBuffer  src, SocketAddress  target)
          이 채널로부터 데이터 그램을 송신합니다.
abstract  DatagramSocket socket ()
          이 채널에 관련한 데이터 그램 소켓을 가져옵니다.
 int validOps ()
          이 채널의 지원되고 있는 조작을 식별하는 조작 세트를 돌려줍니다.
abstract  int write (ByteBuffer  src)
          이 채널에 데이터 그램을 기입합니다.
 long write (ByteBuffer [] srcs)
          이 채널에 데이터 그램을 기입합니다.
abstract  long write (ByteBuffer [] srcs, int offset, int length)
          이 채널에 데이터 그램을 기입합니다.
 
클래스 java.nio.channels.spi. AbstractSelectableChannel 로부터 상속된 메소드
blockingLock , configureBlocking , implCloseChannel , implCloseSelectableChannel , implConfigureBlocking , isBlocking , isRegistered , keyFor , provider , register
 
클래스 java.nio.channels. SelectableChannel 로부터 상속된 메소드
register
 
클래스 java.nio.channels.spi. AbstractInterruptibleChannel 로부터 상속된 메소드
begin , close , end , isOpen
 
클래스 java.lang. Object 로부터 상속된 메소드
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
 
인터페이스 java.nio.channels. Channel 로부터 상속된 메소드
close , isOpen
 

생성자 의 상세

DatagramChannel

protected DatagramChannel(SelectorProvider  provider)
이 클래스의 새로운 인스턴스를 초기화합니다.

메소드의 상세

open

public static DatagramChannel  open()
                            throws IOException 
데이터 그램 채널을 오픈합니다.

새로운 채널을 작성하려면 , 시스템 전체의 디폴트인 SelectorProvider 객체의 openDatagramChannel 메소드를 호출합니다. 채널은 접속되지 않습니다.

반환값:
새로운 데이터 그램 채널
예외:
IOException - 입출력 에러가 발생했을 경우

validOps

public final int validOps()
이 채널의 지원되고 있는 조작을 식별하는 조작 세트를 돌려줍니다.

데이터 그램 채널은 read와 기입을 지원하므로, 이 메소드는 (SelectionKey.OP_READ | SelectionKey.OP_WRITE ) 을 돌려줍니다.

정의:
클래스 SelectableChannel 내의 validOps
반환값:
유효한 조작 세트

socket

public abstract DatagramSocket  socket()
이 채널에 관련한 데이터 그램 소켓을 가져옵니다.

반환되는 객체는,DatagramSocket 클래스에서 선언되어 있지 않은 public 메소드는 선언하지 않습니다.

반환값:
이 채널에 관련한 데이터 그램 소켓

isConnected

public abstract boolean isConnected()
이 채널의 소켓이 접속되고 있는지 어떤지를 판단합니다.

반환값:
이 채널이 접속되고 있는 경우에 한해 true

connect

public abstract DatagramChannel  connect(SocketAddress  remote)
                                 throws IOException 
이 채널의 소켓을 접속합니다.

채널의 소켓은, 지정된 원격 「피어」주소 의외로는 데이터 그램을 교환하지 않게 구성되어 있습니다. 접속 후, 지정된 주소 이외의 주소와 데이터 그램이 거래될 것은 없습니다. 데이터 그램 소켓은, 접속을 명시적으로 절단 하는지 클로즈 할 때까지 접속된 채로 있습니다.

이 메소드는,DatagramSocket 클래스의 connect 메소드와 완전히 같은 시큐리티 체크를 실시합니다. 시큐리티 매니저가 인스톨 되고 있는 경우는,checkAccept 메소드가 지정된 원격 주소로부터의 데이터 그램의 수신을 허가해,checkConnect 메소드가 지정된 원격 주소에의 데이터 그램의 송신을 허가하는 것을 확인합니다.

이 메소드는 언제라도 호출할 수가 있습니다. 호출시에 진행중의 read 조작 또는 기입해 조작에는 일절 영향을 미치지 않습니다.

파라미터:
remote - 이 채널의 접속처 원격 주소.
반환값:
이 데이터 그램 채널
예외:
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - 접속 조작의 진행중에, 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - 접속 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
SecurityException - 시큐리티 매니저가 인스톨 되고 있어, 지정된 원격 주소에의 액세스가 허가되어 있지 않은 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

disconnect

public abstract DatagramChannel  disconnect()
                                    throws IOException 
이 채널의 소켓의 접속을 절단 합니다.

채널의 소켓은, 인스톨 되고 있는 시큐리티 매니저로부터 허가되었을 경우에 한해, 모든 원격 주소와 데이터 그램을 교환할 수 있습니다.

이 메소드는 언제라도 호출할 수가 있습니다. 호출시에 진행중의 read 조작 또는 기입해 조작에는 일절 영향을 미치지 않습니다.

이 채널의 소켓이 접속되어 있지 않은 경우, 또는 채널이 클로즈 하고 있는 경우, 이 메소드를 호출해도 무슨 효과도 없습니다.

반환값:
이 데이터 그램 채널
예외:
IOException - 그 외의 입출력 에러가 발생했을 경우

receive

public abstract SocketAddress  receive(ByteBuffer  dst)
                               throws IOException 
이 채널로부터 데이터 그램을 수신합니다.

데이터 그램을 즉시 사용할 수 있는 경우 (이 채널이 블록 모드로 동작하고 있어 데이터 그램 1 개를 사용할 수 있는 경우)는, 데이터 그램이 지정된 byte 버퍼에 카피된 뒤, 소스 주소가 돌려주어집니다. 이 채널이 비블록 모드로 동작하고 있어 데이터 그램을 곧바로 사용할 수 없는 경우는, 즉시 null 가 돌려주어집니다.

데이터 그램은, 일반적으로의 read 조작의 경우와 같게, 지정된 byte 버퍼의 현재 위치에 전송 됩니다. 버퍼내에 남아 있는 바이트수가 데이터 그램의 포함에 필요한 바이트수보다 적은 경우, 완전히 해결되지 않았던 데이터 그램은 통지없이 파기됩니다.

이 메소드는,DatagramSocket 클래스의 receive 메소드와 완전히 같은 시큐리티 체크를 실시합니다. 소켓이 특정의 원격 주소에 접속되지 않고, 시큐리티 매니저가 인스톨 되고 있는 경우, 이 메소드는, 수신된 데이터 그램 마다 소스의 주소와 포트 번호가 시큐리티 매니저의 checkAccept 메소드에 의해 허가되고 있는지 어떤지를 확인합니다. 이 시큐리티 체크의 오버헤드를 회피하려면 , 최초로 connect 메소드를 사용해 소켓을 접속합니다.

이 메소드는 언제라도 호출할 수가 있습니다. 다만, 다른 thread가 이 채널에 대해서 읽어들여 조작을 개시하고 있는 경우, 이 메소드의 호출은 최초의 조작이 끝날 때까지 블록 됩니다.

파라미터:
dst - 데이터 그램의 전송처 버퍼
반환값:
데이터 그램의 소스 주소. 또는, 이 채널이 비블록 모드로 동작하고 있어, 곧바로 사용할 수 있는 데이터 그램이 없는 경우는 null
예외:
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - read 조작의 진행중에, 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - read 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
SecurityException - 시큐리티 매니저가 인스톨 되고 있어, 데이터 그램의 송신측이 데이터 그램의 수신을 허가하고 있지 않는 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

send

public abstract int send(ByteBuffer  src,
                         SocketAddress  target)
                  throws IOException 
이 채널로부터 데이터 그램을 송신합니다.

채널의 동작 모드가 비블록 모드로 기준이 되는 출력 버퍼의 용량이 충분하지 않은 경우나, 동작 모드가 블록 모드로 충분한 용량이 있는 경우, 지정된 버퍼내에 남아 있는 바이트는 단일의 데이터 그램으로서 지정된 타겟 주소에 전송 됩니다.

데이터 그램은, 일반적으로의 write 조작을 실행했을 경우와 같게, byte 버퍼로부터 전송 됩니다.

이 메소드는,DatagramSocket 클래스의 send 메소드와 완전히 같은 시큐리티 체크를 실시합니다. 소켓이 특정의 원격 주소에 접속되지 않고, 시큐리티 매니저가 인스톨 되고 있는 경우, 이 메소드는, 송신된 데이터 그램 마다 소스의 주소와 포트 번호가 시큐리티 매니저의 checkConnect 메소드에 의해 허가되고 있는지 어떤지를 확인합니다. 이 시큐리티 체크의 오버헤드를 회피하려면 , 최초로 connect 메소드를 사용해 소켓을 접속합니다.

이 메소드는 언제라도 호출할 수가 있습니다. 다만, 다른 thread가 이 채널에 대해서 기입해 조작을 개시하고 있는 경우, 이 메소드의 호출은 최초의 조작이 끝날 때까지 블록 됩니다.

파라미터:
src - 송신되는 데이터 그램을 포함한 버퍼
target - 데이터 그램의 송신지 주소
반환값:
송신 바이트수. 이 메소드를 호출했을 때에 소스 버퍼내에 남아 있던 바이트수. 이 채널이 비블록 모드로 동작하고 있어, 기준이 되는 출력 버퍼의 용량이 불충분하기 때문에 데이터 그램이 완전히 해결되지 않는 경우는 제로
예외:
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - read 조작의 진행중에, 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - read 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
SecurityException - 시큐리티 매니저가 인스톨 되고 있어, 지정된 주소에의 데이터 그램의 송신이 허가되어 있지 않은 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

read

public abstract int read(ByteBuffer  dst)
                  throws IOException 
이 채널로부터 데이터 그램을 읽어들입니다.

이 메소드는, 이 채널의 소켓이 접속되고 있는 경우에 한정해 호출할 수가 있어 그 소켓의 피어로부터의 데이터 그램만을 받아들입니다. 지정된 버퍼내에 남아 있는 바이트수부터 데이터 그램의 바이트수 쪽이 많은 경우, 완전히 해결되지 않았던 바이트는 통지 없게 파기됩니다. 그 이외의 경우, 이 메소드는 ReadableByteChannel 인터페이스의 지정대로 동작합니다.

정의:
인터페이스 ReadableByteChannel 내의 read
파라미터:
dst - 바이트의 전송처 버퍼
반환값:
읽힌 문자수. 제로인가, 채널이 스트림의 마지막에 이르고 있는 경우는 -1
예외:
NotYetConnectedException - 이 채널의 소켓이 접속되어 있지 않은 경우
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - read 조작의 진행중에, 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - read 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

read

public abstract long read(ByteBuffer [] dsts,
                          int offset,
                          int length)
                   throws IOException 
이 채널로부터 데이터 그램을 읽어들입니다.

이 메소드는, 이 채널의 소켓이 접속되고 있는 경우에 한정해 호출할 수가 있어 그 소켓의 피어로부터의 데이터 그램만을 받아들입니다. 지정된 버퍼내에 남아 있는 바이트수부터 데이터 그램의 바이트수 쪽이 많은 경우, 완전히 해결되지 않았던 바이트는 통지 없게 파기됩니다. 그 이외의 경우, 이 메소드는 ScatteringByteChannel 인터페이스의 지정대로 동작합니다.

정의:
인터페이스 ScatteringByteChannel 내의 read
파라미터:
dsts - 바이트의 전송처 버퍼
offset - 최초의 바이트의 전송처가 되는 버퍼 배열내의 오프셋(offset). dsts.length 이하의 부가 아닌 값
length - 액세스 되는 최대 버퍼수. dsts.length - offset 이하의 부가 아닌 값
반환값:
읽힌 문자수. 제로인가, 채널이 스트림의 마지막에 이르고 있는 경우는 -1
예외:
NotYetConnectedException - 이 채널의 소켓이 접속되어 있지 않은 경우
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - read 조작의 진행중에, 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - read 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

read

public final long read(ByteBuffer [] dsts)
                throws IOException 
이 채널로부터 데이터 그램을 읽어들입니다.

이 메소드는, 이 채널의 소켓이 접속되고 있는 경우에 한정해 호출할 수가 있어 그 소켓의 피어로부터의 데이터 그램만을 받아들입니다. 지정된 버퍼내에 남아 있는 바이트수부터 데이터 그램의 바이트수 쪽이 많은 경우, 완전히 해결되지 않았던 바이트는 통지 없게 파기됩니다. 그 이외의 경우, 이 메소드는 ScatteringByteChannel 인터페이스의 지정대로 동작합니다.

정의:
인터페이스 ScatteringByteChannel 내의 read
파라미터:
dsts - 바이트의 전송처 버퍼
반환값:
읽힌 문자수. 제로인가, 채널이 스트림의 마지막에 이르고 있는 경우는 -1
예외:
NotYetConnectedException - 이 채널의 소켓이 접속되어 있지 않은 경우
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - read 조작의 진행중에, 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - read 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

write

public abstract int write(ByteBuffer  src)
                   throws IOException 
이 채널에 데이터 그램을 기입합니다.

이 메소드는, 이 채널의 소켓이 접속되고 있는 경우에 한정해 호출할 수가 있어 그 소켓의 피어에 직접 데이터 그램을 송신합니다. 그 이외의 경우는,WritableByteChannel 인터페이스의 지정대로 동작합니다.

정의:
인터페이스 WritableByteChannel 내의 write
파라미터:
src - 바이트의 취득처 버퍼
반환값:
기입해지는 바이트수. 제로의 경우도 있다
예외:
NotYetConnectedException - 이 채널의 소켓이 접속되어 있지 않은 경우
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - 기입중에 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - 기입중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

write

public abstract long write(ByteBuffer [] srcs,
                           int offset,
                           int length)
                    throws IOException 
이 채널에 데이터 그램을 기입합니다.

이 메소드는, 이 채널의 소켓이 접속되고 있는 경우에 한정해 호출할 수가 있어 그 소켓의 피어에 직접 데이터 그램을 송신합니다. 그 이외의 경우는,GatheringByteChannel 인터페이스의 지정대로 동작합니다.

정의:
인터페이스 GatheringByteChannel 내의 write
파라미터:
srcs - 바이트의 취득처 버퍼
offset - 최초의 바이트의 취득처가 되는 버퍼 배열내의 오프셋(offset). srcs.length 이하의 부가 아닌 값
length - 액세스 되는 최대 버퍼수. srcs.length - offset 이하의 부가 아닌 값
반환값:
송신 바이트수. 이 메소드를 호출했을 때에 소스 버퍼내에 남아 있던 바이트수. 이 채널이 비블록 모드로 동작하고 있어, 기준이 되는 출력 버퍼의 용량이 불충분하기 때문에 데이터 그램이 완전히 해결되지 않는 경우는 제로
예외:
NotYetConnectedException - 이 채널의 소켓이 접속되어 있지 않은 경우
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - 기입중에 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - 기입 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

write

public final long write(ByteBuffer [] srcs)
                 throws IOException 
이 채널에 데이터 그램을 기입합니다.

이 메소드는, 이 채널의 소켓이 접속되고 있는 경우에 한정해 호출할 수가 있어 그 소켓의 피어에 직접 데이터 그램을 송신합니다. 그 이외의 경우는,GatheringByteChannel 인터페이스의 지정대로 동작합니다.

정의:
인터페이스 GatheringByteChannel 내의 write
파라미터:
srcs - 바이트의 취득처 버퍼
반환값:
송신 바이트수. 이 메소드를 호출했을 때에 소스 버퍼내에 남아 있던 바이트수. 이 채널이 비블록 모드로 동작하고 있어, 기준이 되는 출력 버퍼의 용량이 불충분하기 때문에 데이터 그램이 완전히 해결되지 않는 경우는 제로
예외:
NotYetConnectedException - 이 채널의 소켓이 접속되어 있지 않은 경우
ClosedChannelException - 이 채널이 클로즈 하고 있는 경우
AsynchronousCloseException - 기입중에 다른 thread에 의해 이 채널이 클로즈 되었을 경우
ClosedByInterruptException - 기입 조작의 진행중에 다른 thread로부터의 인터럽트가 있었기 때문에 채널이 클로즈 해, 현재의 thread의 인터럽트 상태가 설정되었을 경우
IOException - 그 외의 입출력 에러가 발생했을 경우

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