复习 AIO 写的小 Demo
涉及到两个核心类:1. AsynchronousServerSocketChannel 2. AsynchronousSocketChannel
服务端
public class SimpleAIOServer
{
static final int PORT = 30000;
public static void main(String[] args)
throws Exception
{
try(
// ①创建AsynchronousServerSocketChannel对象。
AsynchronousServerSocketChannel serverChannel =
AsynchronousServerSocketChannel.open())
{
// ②指定在指定地址、端口监听。
serverChannel.bind(new InetSocketAddress(PORT));
while (true)
{
// ③采用循环接受来自客户端的连接
Future<AsynchronousSocketChannel> future
= serverChannel.accept();
// 获取连接完成后返回的AsynchronousSocketChannel
AsynchronousSocketChannel socketChannel = future.get();
// 执行输出。
socketChannel.write(ByteBuffer.wrap("欢迎你来自AIO的世界!"
.getBytes("UTF-8"))).get();
}
}
}
}
客户端
public class SimpleAIOClient
{
static final int PORT = 30000;
public static void main(String[] args)
throws Exception
{
// 用于读取数据的ByteBuffer。
ByteBuffer buff = ByteBuffer.allocate(1024);
Charset utf = Charset.forName("utf-8");
try(
// ①创建AsynchronousSocketChannel对象
AsynchronousSocketChannel clientChannel
= AsynchronousSocketChannel.open())
{
// ②连接远程服务器
clientChannel.connect(new InetSocketAddress("127.0.0.1", PORT)).get(); // ④
buff.clear();
// ③从clientChannel中读取数据
clientChannel.read(buff).get(); // ⑤
buff.flip();
// 将buff中内容转换为字符串
String content = utf.decode(buff).toString();
System.out.println("服务器信息:" + content);
}
}
}
网友评论