Hutool Hutool
(opens new window)
🏡首页
📖指南
  • 核心(Hutool-core)
  • 配置文件(Hutool-setting)
  • 日志(Hutool-log)
  • 缓存(Hutool-cache)
  • JSON(Hutool-json)
  • 加密解密(Hutool-crypto)
  • DFA查找(Hutool-dfa)
  • 数据库(Hutool-db)
  • HTTP客户端(Hutool-http)
  • 定时任务(Hutool-cron)
  • 扩展(Hutool-extra)
  • 布隆过滤(Hutool-bloomFilter)
  • 切面(Hutool-aop)
  • 脚本(Hutool-script)
  • Office文档操作(Hutool-poi)
  • 系统调用(Hutool-system)
  • 图形验证码(Hutool-captcha)
  • 网络Socket(Hutool-socket)
  • JWT(Hutool-jwt)
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
(opens new window)
🏡首页
📖指南
  • 核心(Hutool-core)
  • 配置文件(Hutool-setting)
  • 日志(Hutool-log)
  • 缓存(Hutool-cache)
  • JSON(Hutool-json)
  • 加密解密(Hutool-crypto)
  • DFA查找(Hutool-dfa)
  • 数据库(Hutool-db)
  • HTTP客户端(Hutool-http)
  • 定时任务(Hutool-cron)
  • 扩展(Hutool-extra)
  • 布隆过滤(Hutool-bloomFilter)
  • 切面(Hutool-aop)
  • 脚本(Hutool-script)
  • Office文档操作(Hutool-poi)
  • 系统调用(Hutool-system)
  • 图形验证码(Hutool-captcha)
  • 网络Socket(Hutool-socket)
  • JWT(Hutool-jwt)
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
  • 快速入门

  • 核心(Hutool-core)

  • 配置文件(Hutool-setting)

  • 日志(Hutool-log)

  • 缓存(Hutool-cache)

  • JSON(Hutool-json)

  • 加密解密(Hutool-crypto)

  • DFA查找(Hutool-dfa)

  • 数据库(Hutool-db)

  • HTTP客户端(Hutool-http)

  • 定时任务(Hutool-cron)

  • 扩展(Hutool-extra)

  • 布隆过滤(Hutool-bloomFilter)

  • 切面(Hutool-aop)

  • 脚本(Hutool-script)

  • Office文档操作(Hutool-poi)

  • 系统调用(Hutool-system)

  • 图形验证码(Hutool-captcha)

  • 网络Socket(Hutool-socket)

    • 概述
    • AIO封装-AioServer和AioClient
      • 由来
      • 使用
        • 服务端
        • 客户端
    • NIO封装-NioServer和NioClient
  • JWT(Hutool-jwt)

  • 指南
  • 网络Socket(Hutool-socket)
Hutool
2023-03-28
目录

AIO封装-AioServer和AioClient

特别赞助 by:

# 由来

在JDK7+后,提供了异步Socket库——AIO,Hutool对其进行了简单的封装。

# 使用

# 服务端

AioServer aioServer = new AioServer(8899);
aioServer.setIoAction(new SimpleIoAction() {
	
	@Override
	public void accept(AioSession session) {
		StaticLog.debug("【客户端】:{} 连接。", session.getRemoteAddress());
		session.write(BufferUtil.createUtf8("=== Welcome to Hutool socket server. ==="));
	}
	
	@Override
	public void doAction(AioSession session, ByteBuffer data) {
		Console.log(data);
		
		if(false == data.hasRemaining()) {
			StringBuilder response = StrUtil.builder()//
					.append("HTTP/1.1 200 OK\r\n")//
					.append("Date: ").append(DateUtil.formatHttpDate(DateUtil.date())).append("\r\n")//
					.append("Content-Type: text/html; charset=UTF-8\r\n")//
					.append("\r\n")
					.append("Hello Hutool socket");//
			session.writeAndClose(BufferUtil.createUtf8(response));
		}else {
			session.read();
		}
	}
}).start(true);

# 客户端

final AsynchronousChannelGroup GROUP = AsynchronousChannelGroup.withFixedThreadPool(//
		Runtime.getRuntime().availableProcessors(), // 默认线程池大小
		ThreadFactoryBuilder.create().setNamePrefix("Huool-socket-").build()//
);

AsynchronousSocketChannel channel;
try {
	channel = AsynchronousSocketChannel.open(GROUP);
} catch (IOException e) {
	throw new IORuntimeException(e);
}
try {
	channel.connect(new InetSocketAddress("localhost", 8899)).get();
} catch (InterruptedException | ExecutionException e) {
	IoUtil.close(channel);
	throw new SocketRuntimeException(e);
}

AioClient client = new AioClient(channel, new SimpleIoAction() {
	
	@Override
	public void doAction(AioSession session, ByteBuffer data) {
		if(data.hasRemaining()) {
			Console.log(StrUtil.utf8Str(data));
			session.read();
		}
		Console.log("OK");
	}
});

client.write(ByteBuffer.wrap("Hello".getBytes()));
client.read();

client.close();

注意: GROUP维护一个连接池,建议全局单例持有。 见:issues/I56SYG (opens new window)

上次更新: 2025/05/06, 10:48:51
概述
NIO封装-NioServer和NioClient

← 概述 NIO封装-NioServer和NioClient→

Theme by Vdoing | Copyright © 2023-2025 Hutool | MulanPSL-2.0
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×