`

aio测试

 
阅读更多
由操作系统来做异步
服务端:
package aio;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousServerSocketChannel;
import java.nio.channels.AsynchronousSocketChannel;
import java.nio.channels.CompletionHandler;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

/**
 * 
 * @author zhangshoulei
 */
public class AIOServer {
	public final static int PORT = 9888;
	private AsynchronousServerSocketChannel server;

	public AIOServer() throws IOException {
		server = AsynchronousServerSocketChannel.open().bind(
				new InetSocketAddress(PORT));
	}

	public void startWithFuture() throws InterruptedException,
			ExecutionException, TimeoutException {
		System.out.println("Server listen on " + PORT);
		Future<AsynchronousSocketChannel> future = server.accept();
		AsynchronousSocketChannel socket = future.get();
		ByteBuffer readBuf = ByteBuffer.allocate(1024);
		readBuf.clear();
		socket.read(readBuf).get(100, TimeUnit.SECONDS);
		readBuf.flip();
		System.out.printf("received message:" + new String(readBuf.array()));
		System.out.println(Thread.currentThread().getName());
	}

	public void startWithCompletionHandler() throws InterruptedException,
			ExecutionException, TimeoutException {
		System.out.println("Server listen on " + PORT);
		//注册事件和事件完成后的处理器
		server.accept(null,
				new CompletionHandler<AsynchronousSocketChannel, Object>() {
					final ByteBuffer buffer = ByteBuffer.allocate(1024);

					public void completed(AsynchronousSocketChannel result,
							Object attachment) {
						System.out.println(Thread.currentThread().getName());
						System.out.println("start");
						try {
							buffer.clear();
							result.read(buffer).get(100, TimeUnit.SECONDS);
							buffer.flip();
							System.out.println("received message: "
									+ new String(buffer.array()));
						} catch (InterruptedException | ExecutionException e) {
							System.out.println(e.toString());
						} catch (TimeoutException e) {
							e.printStackTrace();
						} finally {

							try {
								result.close();
								server.accept(null, this);
							} catch (Exception e) {
								System.out.println(e.toString());
							}
						}

						System.out.println("end");
					}

					@Override
					public void failed(Throwable exc, Object attachment) {
						System.out.println("failed: " + exc);
					}
				});
		// 主线程继续自己的行为
		while (true) {
			Thread.sleep(1000);
		}

	}

	public static void main(String args[]) throws Exception {
		new AIOServer().startWithCompletionHandler();
	}
}

客户端:
package aio;

import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousSocketChannel;

public class AIOClient {

	public static void main(String... args) throws Exception {
		AsynchronousSocketChannel client = AsynchronousSocketChannel.open();
		client.connect(new InetSocketAddress("localhost", 9888));
		client.write(ByteBuffer.wrap("test".getBytes())).get();
	}
}
分享到:
评论

相关推荐

    JAVA BIO AIO NIO测试代码

    对java io总结时编写的测试代码,包括BIO,NIO,AIO的实现,Java io操作是编程人员经常使用到的,以前只是使用没有对这三种IO做系统的了解,本文将对这三种IO作详细的介绍并附有测试完整代码

    IEC60730B_CM7_3_0_DOC.zip

    “AIO测试”(IEC60730_B_AIO_test_for_CM4_CM7_rev3_0.pdf)涵盖了模拟信号的读写,确保模拟输入和输出的准确性和一致性。 “电源条件测试”(IEC60730_B_PC_test_for_CM4_CM7_rev3_0.pdf)考虑了设备在不同电压和...

    CISSP AIO4与AIO5的区别

    5. **练习题与模拟测试**:AIO5可能提供更新的模拟试题,这些试题可能基于最新的考试格式和题型,帮助考生适应可能遇到的考试环境。 6. **学习方法和技巧**:随着对学习科学理解的深入,AIO5可能采用了更有效的学习...

    AIO.rar_aio

    根据提供的压缩包文件名称"AIO",我们可以推测这个资源可能包含了AIO库的源代码、编译好的库文件、示例代码、文档甚至可能有测试用例。为了深入了解和使用这个库,我们需要解压文件并按照文档的指导进行操作。如果...

    aio.zip_aio_asynchronous io_linux aio

    "aio.zip_aio_asynchronous_io_linux_aio"这个压缩包文件可能包含了一系列用于测试和理解Linux AIO机制的示例代码或工具。 Linux AIO并非内核原生支持的特性,而是通过libaio库来实现的。libaio提供了一组API,让...

    AIO英文7拆分

    6. 安全评估和测试:介绍如何进行安全审计、漏洞评估和渗透测试。 7. 安全操作:包括事件响应、监控、备份和恢复等操作实践。 8. 法律法规、合规性和道德:涉及信息安全相关的法律、标准、政策和道德规范。 在"英文...

    脱壳工具 Unpacker AIO Tool

    3. **漏洞发现**:在安全测试中,脱壳可以暴露潜在的代码漏洞,帮助修复安全问题。 4. **教育与研究**:在教学或学术研究中,脱壳工具是理解和学习逆向工程、软件保护技术的重要工具。 虽然Unpacker AIO Tool提供了...

    cissp.AIO.7th

    6. 安全评估和测试(Security Assessment and Testing):涵盖评估策略、技术和程序,以及测试、审计和安全控制的有效性。 7. 安全操作(Security Operations):涉及基础架构和资产的保护,以及灾难恢复计划、业务...

    基于AIO的超轻量HTTP服务器实现

    在实际应用中,这样的服务器可以作为学习和测试的工具,也可以作为复杂系统中的基础模块,提供特定的功能支持。通过阅读并理解相关源码,开发者可以深入理解网络编程和AIO的工作原理,提升自己的技能水平。

    CISSP_AIO+V2中文

    6. **安全评估与测试**:对系统的安全性进行评估,通过漏洞扫描和渗透测试等手段发现潜在问题。 7. **密码学**:加密技术及其应用,保护数据安全传输。 8. **软件开发安全**:安全编码实践和软件开发生命周期中的...

    Python库 | aio-pika-5.0.0b3.tar.gz

    `aio-pika`的版本`5.0.0b3`是该库的一个预发布版本,包含了对新特性和改进的早期测试。 **Python开发语言** Python是一种高级、解释型、交互式和面向对象的脚本语言。它以其简洁明了的语法和强大的库支持而闻名,...

    U 盘启动制作工具 AIO Boot 0.9.9.19.zip

    通过 Shimx64.efi(需要测试仪)以 UEFI 模式绕过安全启动。如果您的计算机有“安全启动”部分,请将其打开,然后启动/EFI/Boot/shimx64.efi。 注意:AIO Boot 官方下载的密码为:aioboot,把 AIO Boot 文件夹内的...

    2.联想超融合AIO概览

    - **开发测试**:用于软件开发和测试环节。 - **数字化转型**:帮助企业快速实现数字化转型。 - **分支机构**:满足多地点办公的需求。 #### 六、联想超融合AIO优势 - **更高的虚拟化性能**:结合自有硬件与软件的...

    AIO_LenovoUsbDriver_autorun_1.0.14_internal.rar

    标题"AIO_LenovoUsbDriver_autorun_1.0.14_internal.rar"指出,这是一款联想(Lenovo)的AIO(All-in-One)USB驱动程序,版本号为1.0.14,并且包含自动运行功能。描述中的内容与标题相同,进一步确认了这是一个针对...

    内存厂出水冷? 芝奇上古水神ENKI 360 AIO效能测试

    【Huan】_記憶體廠出水冷__芝奇上古水神ENKI_360_AIO效能測試

    PyPI 官网下载 | aio-odoorpc-base-1.0.6.tar.gz

    可能还会包含`LICENSE`文件,定义了库的授权协议,以及测试代码、示例文件等。 aio-odoorpc-base的核心特性在于其异步特性,利用Python的asyncio库,它可以在处理多个Odoo API请求时实现并发,提高程序的执行效率。...

    Image-rk3399-Android11测试固件-20230224-1844.7z

    AIO-3399J的测试报告 RK3399(AIO-3399J开发板)的Android10 2023/2/16 9:21 Android11/10 【已经确认实现的功能】 0、横屏、永不休眠、ll命令 1、HDMI显示 2、2个USB = 1个USB3.0 + 1个USB2.0 2个鼠标测试。 3、AP...

    PyPI 官网下载 | aio-doh-0.0.4.tar.gz

    标题中的"PyPI 官网下载 | aio-doh-0.0.4.tar.gz"指出这是一个在Python Package Index (PyPI) 上发布的软件包。PyPI是Python开发者发布和...为了更深入地了解aio-doh的功能和用法,应查看其源代码、文档和测试案例。

    Laravel开发-aio

    "Laravel开发-aio" 提到的"AIO-AllPay,ECPay Laravel 5版"似乎是一个针对Laravel 5框架的支付集成解决方案,特别是针对AllPay和ECPay这两个支付接口。在本文中,我们将深入探讨Laravel开发的核心概念、AllPay和...

    文件系统性能测试工具iozone

    可以测试 Read, write, re-read,re-write, read backwards, read strided, fread, fwrite, random read, pread, mmap, aio_read, aio_write 等等不同的模式下的硬盘的性能。 测试的时候请注意,设置的测试文件的...

Global site tag (gtag.js) - Google Analytics