一、建立client端
package com.nio.channel;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
public class Client {
public static void main(String[] args) throws IOException, InterruptedException {
// 创建客户端的通道
SocketChannel sc = SocketChannel.open();
// NIO默认是阻塞的,手动设置为非阻塞
sc.configureBlocking(false);
// 发起连接 - 即使连接失败,也会继续向下执行
sc.connect(new InetSocketAddress("localhost", 8090));
// 如果单独使用channel,需要将它进行手动阻塞
// 判断连接是否建立
// 这个方法底层会判断连接是否建立,如果建立则继续往下执行
// 如果这个连接没有建立,那么在底层会试图再次建立连接
// 如果试图连接多次失败,那么会抛出异常
while (!sc.finishConnect())
;
// 写出数据
sc.write(ByteBuffer.wrap("hello".getBytes()));
Thread.sleep(10);
// 读取数据
ByteBuffer buffer = ByteBuffer.allocate(1024);
sc.read(buffer);
buffer.flip();
System.out.println(new String(buffer.array(), 0, buffer.limit()));
// 关闭
sc.close();
}
}
二、建立Server端
package com.nio