소켓 옵션은 setOption 메서드를 사용하여 구성됩니다. 비동기 소켓 채널은 다음 옵션을 지원합니다: 이 메서드는 기본 그룹에 바인딩된 비동기 소켓 채널을 반환합니다. 이 메서드는 식을 평가하는 것과 같습니다: 이러한 스트림은 일반 스트림이므로 파일에서 읽고 쓰는 데 사용하는 스트림과 동일한 스트림이므로 사용 사례에 가장 적합한 형식으로 변환할 수 있습니다. 예를 들어 Printstream으로 OutputStream을 래핑하여 println()과 같은 방법으로 텍스트를 쉽게 쓸 수 있습니다. 또 다른 예로, readLine()과 같은 방법으로 텍스트를 쉽게 읽을 수 있도록 InputStreamReader를 통해 BufferedReader로 입력 스트림을 래핑할 수 있습니다. 이것은 자바.nio.channel.AsynchronousSocket채널 후반 90 년대에 나는 유닉스 버클리 소켓과 윈도우 WinSock 코드를 작성하는 내 일을 보냈다 온라인 비디오 게임 회사에서 일하고 있었다의 예였다. 내 임무는 비디오 게임 클라이언트가 게임 서버와 통신할 수 있도록 하는 것이었습니다. Java 소켓 코드를 작성할 기회가 있었을 때 네트워크 프로그래밍에 대한 Java의 간소화되고 간단한 접근 방식에 놀랐습니다. Java는 원래 스마트 장치가 서로 통신할 수 있도록 설계되었기 때문에 데스크톱 및 서버 응용 프로그램에 매우 잘 번역되었기 때문에 놀라운 일이 아닙니다. 그런 다음 반환된 소켓 채널을 전역 인스턴스에 할당합니다. 그런 다음 null이 아니며 작업을 수행하기 전에 열려 있는지 확인합니다.
반환 유형은 비동기 소켓 채널의 인스턴스입니다. 서버 소켓 채널이 여전히 열려 있으면 accept API를 다시 호출하여 동일한 처리기를 다시 사용하는 동안 다른 들어오는 연결을 준비합니다. 비동기 서버 소켓 채널은 이 클래스의 열린 메서드를 호출하여 만들어집니다. 새로 만든 비동기 서버 소켓 채널은 열려 있지만 아직 바인딩되지 않았습니다. 로컬 주소에 바인딩하고 바인딩 메서드를 호출하여 연결을 수신 대기하도록 구성할 수 있습니다. 바인딩되면 accept 메서드가 채널의 소켓에 대한 연결 수락을 시작하는 데 사용됩니다. 언바운드 채널에서 accept 메서드를 호출하려고 하면 NotYetBoundException이 throw됩니다. 일단 바인딩되면 accept API는 채널의 소켓에 대한 연결 수락을 시작하는 데 사용됩니다. 이러한 새 API를 사용하여 서버와 클라이언트를 구축하는 프로세스를 단계별로 진행할 수 있었습니다. 다음 코드 코드 조각에서 채널의 write() 메서드는 비동기 쓰기 작업을 시작합니다.
이렇게 하면 메시지 데이터가 있는 지정된 버퍼에서 이 채널에 바이트 시퀀스를 기록합니다. 스트림 지향 및 연결 네트워크 소켓을 위한 비동기 채널입니다. 이 메서드는 비동기 읽기 작업을 시작 하여 이 채널에서 지정된 버퍼로 바이트 시퀀스를 읽습니다. 처리기 매개 변수는 읽기 작업이 완료되거나 실패할 때 호출되는 완료 처리기입니다. 완료 처리기에 전달된 결과는 채널이 스트림 종료에 도달했기 때문에 바이트를 읽을 수 없는 경우 읽기 바이트 수 또는 -1입니다. 비동기 소켓 작업은 다음 두 개의 소켓 채널 클래스를 사용하여 수행됩니다: 새로 생성된 비동기 서버 소켓 채널이 열려 있지만 아직 바인딩되지 않았기 때문에 로컬 주소에 바인딩하고 선택적으로 포트를 선택해야 합니다. 목록 2 그것은 NIO에 다음 섹션에서 오고 있는 것 의 일부를 예상 하지 않습니다 복잡 하지 않습니다. 여러 동시 요청을 처리할 수 있는 서버를 빌드하기 위해 작성해야 하는 스레딩 코드의 양에 특히 주의하십시오. 자바 NIO는 내가 가장 좋아하는 주제입니다. 지난 2년 동안 NIO와 함께 일해 왔으며 프로덕션 환경에서 이 코드를 자유롭게 사용할 수 있는 독자를 위해 간단한 서버-클라이언트 코드를 공유하고 싶습니다.