我正在尝试通过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();
}
提前致谢。
答案 0 :(得分:0)
在非阻塞模式下,应使用循环访问delete(viper.Get("backends.setibe.servers").(map[string]interface{}), "server2")
和read()
,直到缓冲区没有剩余字节为止。