1

如何直接从SocketChannel非阻塞的对象中读取对象?它正在使用Selector. 以下代码已损坏(它抛出一个IllegalBlockingModeException),我不知道如何修复它,除了可能使用ByteBuffer,我宁愿不这样做(至少现在):

public static void main(String[] args) {
  try {
     Selector selector = Selector.open();         
     ServerSocketChannel listener = ServerSocketChannel.open();

     listener.socket().bind(new InetSocketAddress(50001));
     listener.configureBlocking(false);
     listener.register(selector, SelectionKey.OP_ACCEPT);

     while (true) {
        selector.select();
        Iterator<SelectionKey> i = selector.selectedKeys().iterator();

        while (i.hasNext()) { 
           SelectionKey key = i.next();
           i.remove();

           if (key.isReadable()) { 
              SocketChannel channel = (SocketChannel) key.channel();
              ObjectInputStream ois = new ObjectInputStream(channel.socket().getInputStream());
              String message = (String) ois.readObject();
              System.out.println("Server received message: " + message);
           } 
        }

     }

  } catch (IOException | ClassNotFoundException e) {  
     e.printStackTrace();
  }
4

0 回答 0