java Socketchannel始终为空
我正在尝试向SMTP服务器发送EHLO命令。连接成功,但我似乎无法从中读取任何数据:
ByteBuffer byteBuffer = null;
try {
socketChannel = SocketChannel.open();
socketChannel.connect(new InetSocketAddress("host", 25));
socketChannel.configureBlocking(true);
byteBuffer = ByteBuffer.allocateDirect(4 * 1024);
} catch (Exception e) {
e.printStackTrace();
}
try {
byteBuffer.clear();
socketChannel.write(byteBuffer.put(SMTP_EHLO.getBytes()));
byteBuffer.flip();
socketChannel.read(byteBuffer);
byteBuffer.get(subStringBytes);
String ss = new String(subStringBytes);
System.out.println(byteBuffer);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
print语句的输出总是\u000(null)
# 1 楼答案
您可以
put
将SMTP\u EHLO写入缓冲区,但必须flip()
在写入缓冲区之前。否则,将不向套接字通道写入任何内容。从SocketChannel
Javadoc:从
Buffer#remaining()
开始:因此,在
byteBuffer.put(...)
之后,当前位置==限制