Java NIO의 ServerSocketChannel은 표준 IO의 ServerSocket과 마찬가지로 새로 들어오는 TCP 연결을 모니터링할 수 있는 채널입니다. ServerSocketChannel 클래스는 java.nio.channels 패키지에 있습니다.
ServerSocketChannel.open() 메서드를 호출하여 ServerSocketChannel을 엽니다.
ServerSocketChannel.close() 메서드를 호출하여 ServerSocketChannel을 닫습니다.
ServerSocketChannel.accept ( ) 메소드가 청취합니다. 새로 들어오는 연결을 위해. accept() 메서드가 반환되면 새로 들어오는 연결이 포함된 SocketChannel을 반환합니다. 따라서 accept() 메서드는 새 연결이 도착할 때까지 차단됩니다.
일반적으로 하나의 연결을 듣고 while 루프에서 accept() 메서드를 호출하는 것이 아닙니다.
물론 while 루프에서 true 외에 다른 종료 기준을 사용할 수도 있습니다.
ServerSocketChannel은 비차단 모드로 설정할 수 있습니다. 비차단 모드에서는 accept() 메서드가 즉시 반환됩니다. 새로 들어오는 연결이 없으면 반환 값은 null이 됩니다. 따라서 반환된 SocketChannel이 null인지 확인해야 합니다. 예:
/** * socket server channel */@Testpublic void text2() throws IOException { ServerSocketChannel channel = ServerSocketChannel.open(); //新建channelchannel.socket().bind(new InetSocketAddress(9999)); //监听端口channel.configureBlocking(true); //设置阻塞while (true) { SocketChannel accept = channel.accept(); //设置为阻塞,则此方法阻塞,直到有连接//如果设置为非阻塞,需要在这里判断 accept == null?ByteBuffer byteBuffer = ByteBuffer.allocate(1024); accept.read(byteBuffer); byteBuffer.flip(); //反转while (byteBuffer.hasRemaining()) { //判断System.err.println((char)byteBuffer.get()); //输出 } } }
SocketChannel은 TCP 네트워크 소켓에 연결된 채널입니다. SocketChannel은 다음 2가지 방법으로 생성할 수 있습니다.
SocketChannel을 열고 인터넷의 서버에 연결합니다.
ServerSocketChannel에 새 연결이 도착하면 SocketChannel이 생성됩니다. E 소켓 채널 열기
SocketChannel을 사용하여 소켓 채널을 호출할 때.close() 소켓 채널 닫기:
먼저 버퍼를 할당합니다. SocketChannel에서 읽은 데이터는 이 버퍼에 배치됩니다.
Write to SocketChannel
SocketChannel에 데이터를 쓰는 작업은 Buffer를 매개변수로 사용하는 SocketChannel.write() 메서드를 사용합니다.
SocketChannel.write() 메서드는 while 루프에서 호출됩니다. Write() 메서드는 SocketChannel에 쓸 수 있는 바이트 수를 보장할 수 없습니다. 따라서 버퍼에 쓸 바이트가 없을 때까지 write()를 반복적으로 호출합니다.
SocketChannel을 비차단 모드로 설정할 수 있습니다. 설정 후 비동기 모드에서 connect(), read() 및 write()를 호출할 수 있습니다.
connect()
비차단 모드에서는 내용이 작성되기 전에 write() 메서드가 반환될 수 있습니다. 따라서 루프에서 write()를 호출해야 합니다. 이전에도 예시가 있었으므로 여기서는 자세히 다루지 않겠습니다.
비차단 모드 및 선택기
/** * socket channel */@Testpublic void test3() throws IOException { SocketChannel channel = SocketChannel.open(); //新建服务端channel.connect(new InetSocketAddress("127.0.0.1",9999)); //连接服务端地址ByteBuffer byteBuffer = ByteBuffer.allocate(1024); //缓冲区byteBuffer.put("123".getBytes()); byteBuffer.flip(); //反转while (byteBuffer.hasRemaining()) { //判断 channel.write(byteBuffer); } }
위 내용은 JAVA-7NIO지소켓/서버소켓 채널의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!