SocketChannel을 사용하는 경우 부분 쓰기 및 읽기를 처리하기 위해 읽기 및 쓰기 버퍼를 유지해야합니다.NIO DatagramChannel을 사용하면 부분적으로 읽기/쓰기 된 패킷을 처리해야합니까?
DatagramChannel을 사용할 때 필요하지 않을 수도 있다는 잔소리에 대한 의구심이 있지만 정보가 부족합니다.
이야기가 무엇인가요?
대기중인 모든 데이터 그램을 읽을 때까지 null을 되 찾을 때까지 (비 차단) 수신 (ByteBuffer)을 반복적으로 호출해야합니까?
비 차단 모드로 전송할 때 send (ByteBuffer, SocketAddress)를 사용하여 전체 버퍼를 전송하거나 완전히 거부하거나 부분적으로 기록 된 버퍼를 유지해야합니까?
그래도 글을 쓸 수 없습니까? 나가는 버퍼가 꽉 차서 부분적인 쓰기가있을 것인가, 아니면 전부 아니면 아무것도 아닌 일이 될 것인가? – Nuoji
그것은 또한 모두 또는 아무것도 아닙니다. 데이터 그램보다 큰 것을 작성하려고하면 어떤 일이 일어날 지 확신하지 못합니다 (예외?), 확실히 보내지지 않을 것입니다. 단 하나의 UDP 데이터 그램에 대해 거의 64k가 있음에 유의하십시오. –
다른 커플 노트 : 데이터 그램이 다른 쪽 끝에 전달된다는 보장은 없지만 대개 전달됩니다. 또한 Windows는 네트워크의 MTU를 초과하는 브로드 캐스트 UDP 데이터 그램을 보낼 수있는 것 같지 않으므로주의하십시오. –