title: Problem with Java selector/SocketChannel
body: <p>I'm having a problem with a multiplayer game. Right now, I'm just trying to get the server to send the current level to the client. The server is definitely sending the data, but it never gets to the client application.</p>
  
  <p>Client code: </p>
  
  <pre><code>    public void run() {
      while(true)
      {
          try {
              sel.select();
              Set readyKeys = sel.selectedKeys();
              Iterator itr = readyKeys.iterator();
              while(itr.hasNext())
              {
                  SelectionKey key = (SelectionKey) itr.next();
                  itr.remove();
                  SocketChannel ch = (SocketChannel) key.channel();
                  if(key.isReadable())
                  {
                      inputbuf.clear();
                      long bytesRead = ch.read(inputbuf);
                      inputbuf.flip();
                      byte[] test = inputbuf.array();
                      {
                          for(int i=0; i &lt; inputbuf.remaining(); i++)
                          {
                             System.out.print(test[i]+" ");
                          }
                      }
                      byte cmd = 0;
                      cmd = inputbuf.get();
                      switch(cmd)
                      {
                          case 1:
                             //do something
                          case 2:
                             //do something else
                          break;
                      }
                  }
                  else if(key.isConnectable())
                  {
                      sc.finishConnect();
                      sc.register(sel, SelectionKey.OP_READ);
                  }
              }
          } catch (IOException ex) {
              Buildsim.error("Error handling input from server", ex);
          }
      }
  }
  </code></pre>
  
  <p>Server code:</p>
  
  <pre><code>public RemotePlayer(SocketChannel s)
  {
      sc = s;
      try {
          sel = Selector.open();
          sc.configureBlocking(false);
          sc.register(sel, SelectionKey.OP_WRITE);
          socket = sc.socket();
          ip = socket.getInetAddress().toString();
          System.out.println("New connection from "+ip);
          inputbuf = ByteBuffer.allocate(1048576);
          outputbuf = ByteBuffer.allocate(1048576);
          inputbuf.clear();
          outputbuf.clear();
      }
      catch(Exception e)
      {
          Buildsim.error("Connection error: ", e);
      }
      sendLevel();
  }
  public void sendObject(GameObject obj)
  {
       //Sends a packet of the object, then does the same for the object's children
  }
  public void sendLevel()
  {
      try {
          outputbuf.put((byte) 0x01);
          outputbuf.flip();
          sc.write(outputbuf);
          sendObject(Buildsim.w.parts.get(0)); //root object
      }
      catch(IOException e)
      {
          Buildsim.error("Error sending level to "+ip, e);
      }
  }
  </code></pre>
  
  <p>The only thing that gets to the client is the byte 0x01 (signals a level change).</p>
  
  <p>Thanks in advance.</p>