Java NIOの仕組みを理解しようとしています。特に、SocketChannel はどのように機能しますか。
私は以下のコードを書きました:
import java.io.*;
import java.net.*;
import java.nio.*;
import java.nio.channels.*;
public class Test {
public static void main(String[] args) throws IOException {
SocketChannel socketChannel = SocketChannel.open();
socketChannel.configureBlocking(false);
socketChannel.connect(new InetSocketAddress("google.com", 80));
while (!socketChannel.finishConnect()) {
// wait, or do something else...
}
String newData = "Some String...";
ByteBuffer buf = ByteBuffer.allocate(48);
buf.clear();
buf.put(newData.getBytes());
buf.flip();
while (buf.hasRemaining()) {
System.out.println(socketChannel.write(buf));
}
buf.clear().flip();
int bytesRead;
while ((bytesRead = socketChannel.read(buf)) != -1) {
System.out.println(bytesRead);
}
}
}
- Googleサーバーに接続してみます。
- サーバーにリクエストを送信します。
- サーバーから回答を読み取ります。
ただし、メソッド socketChannel.read(buf) は常に 0 を返し、無限に実行されます。
どこで間違えた??