如何使用SocketChannel连接到远程网络服务器

时间:2018-01-23 12:32:06

标签: socketchannel

我正在尝试通过Java NIO socketChannel获取Web服务器发送的响应。 SocketChannel的读取调用在非阻塞时不会返回任何内容

    clientSocket.configureBlocking(false);

指定true时,表示阻止模式,然后返回响应。有人说我们应该在启用非阻塞模式时使用Selector。但我没有找到实现这个的方法。

仅供参考,以下是我正在尝试的代码段。

public static void main(String[] args) throws IOException, InterruptedException
{
      URL u = new URL("http://www.google.com");

      InetSocketAddress addr = new InetSocketAddress("www.google.com", 80);
      SocketChannel clientSocket = SocketChannel.open(addr);
      clientSocket.configureBlocking(false);

      byte[] message = new String("GET " + u.getFile() + " HTTP/1.0\r\n").getBytes();
      ByteBuffer writeBuff = ByteBuffer.wrap(message);
      clientSocket.write(writeBuff);      

      ByteBuffer  readBuff = MappedByteBuffer.allocate(1500);
      clientSocket.read(readBuff);

      while(clientSocket.read(readBuff) > 0)
      {
            System.out.println(new String(readBuff.array()).trim());
      }

      clientSocket.close();
}

提前致谢。

1 个答案:

答案 0 :(得分:0)

在非阻塞模式下,应使用循环访问delete(viper.Get("backends.setibe.servers").(map[string]interface{}), "server2") read(),直到缓冲区没有剩余字节为止。