Java新AIO/NIO2:AsynchronousServerSocketChannel和AsynchronousSocketChannel简单服务器-客户端
用AsynchronousServerSocketChannel和AsynchronousSocketChannel实现一个最简单的服务器-客户端程序。服务器用AsynchronousServerSocketChannel实现,客户端用AsynchronousSocketChannel实现。服务器绑定本地端口80,等待客户端连接。服务器与客户端建立连接后服务器发给客户端字符串“zhangphil”,然后服务器关闭Socket连接,客户端接收数据后也关闭Socket连接。
服务器端:

import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousServerSocketChannel;
import java.nio.channels.AsynchronousSocketChannel;
import java.util.concurrent.Future;

public class Server {
public static void main(String[] args) {
try {
Server server = new Server();
} catch (Exception e) {
e.printStackTrace();
}
}

public Server() throws Exception {
AsynchronousServerSocketChannel serverSocketChannel = AsynchronousServerSocketChannel.open();
InetSocketAddress inetSocketAddress www.myzx157.com= new InetSocketAddress("localhost", 80);
serverSocketChannel.bind(inetSocketAddress);

Future<AsynchronousSocketChannel> accept;

while (true) {
// accept()不会阻塞。
accept = serverSocketChannel.accept();

System.out.println("=================");
System.out.println("服务器等待连接...");
AsynchronousSocketChannel www.yongshiyule178.com socketChannel = accept.get();// get()方法将阻塞。

System.out.println("服务器接受连接");
System.out.println("服务器与" + www.yongshi123.cn socketChannel.getRemoteAddress() + "建立连接");

ByteBuffer buffer = ByteBuffer.wrap("zhangphil".getBytes());
Future<Integer> write=socketChannel.write(buffer);

while(!write.isDone()) {
Thread.sleep(10);
}

System.out.println("服务器发送数据完毕.");
socketChannel.close();

客户端:

import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousSocketChannel;
import java.util.concurrent.Future;

public class Client {
public static void main(String[] args) {
AsynchronousSocketChannel socketChannel = null;
try {
socketChannel = AsynchronousSocketChannel.open(www.huayi157.com);
InetSocketAddress inetSocketAddress www.myzx1.com= new InetSocketAddress("localhost", 80);
Future<Void> connect =www.mhylpt.com socketChannel.connect(inetSocketAddress);

while (!connect.isDone()) {
Thread.sleep(10);
}

System.out.println("建立连接" + socketChannel.getRemoteAddress());

ByteBuffer buffer = ByteBuffer.allocate(1024);
Future<Integer> read = socketChannel.read(buffer);

while (!read.isDone()) {
Thread.sleep(10);
}

System.out.println("接收服务器数据:" + new String(buffer.array(), 0, read.get()));
} catch (Exception e) {
e.printStackTrace(www.dfgjpt.com);

先运行服务器端程序,再运行客户端程序。然后服务器端输出:

客户端输出:

建立连接localhost/127.0.0.1:80
接收服务器数据:zhangphil

Java新AIO/NIO2:AsynchronousServerSocketChannel和AsynchronousSocketChannel简单服务器-客户端的更多相关文章

  1. BIO,NIO,AIO(NIO2)的理解

    写在前面,这里所说的IO主要是强调的网络IO 1.BIO(同步并阻塞) 客户端一个请求对应一个线程.客户端上来一个请求(最开始的连接以及后续的IO请求),服务端新建一个线程去处理这个请求,由于线程总数 ...

  2. 主流的单元测试工具之-JAVA新特性-Annotation 写作者:组长 梁伟龙

    1:什么是Annotation?Annotation,即“@xxx”(如@Before,@After,@Test(timeout=xxx),@ignore),这个单词一般是翻译成元数据,是JAVA的一 ...

  3. Java 新特性(2) - JDK6 新特性

    http://freesea.iteye.com/blog/160133 JDK6的新特性之一_Desktop类和SystemTray类 JDK6的新特性之二_使用JAXB2来实现对象与XML之间的映 ...

  4. 主流的单元测试工具之-JAVA新特性-Annotation

    1:什么是Annotation?Annotation,即“@xxx”(如@Before,@After,@Test(timeout=xxx),@ignore),这个单词一般是翻译成元数据,是JAVA的一 ...

  5. 用好Java中的枚举真的没有那么简单

    1.概览 在本文中,我们将看到什么是 Java 枚举,它们解决了哪些问题以及如何在实践中使用 Java 枚举实现一些设计模式. enum关键字在 java5 中引入,表示一种特殊类型的类,其总是继承j ...

  6. JAVA使用POI读取EXCEL文件的简单model

    一.JAVA使用POI读取EXCEL文件的简单model 1.所需要的jar commons-codec-1.10.jarcommons-logging-1.2.jarjunit-4.12.jarlo ...

  7. Java 新IO

       NIO提供全新的底层I/O模型.与最初的java.io包中面向流(stream-oriented)概念不同,NIO采用了面向块的概念(block-oriented).在尽可能的情况下,I/O的操 ...

  8. Hi java新特性

    java新特性 1995.5.23 java语言 1996 jdk1.0 250个类在API 主要用在桌面型应用程序1997 jdk1.1 500 图形用户界面编程1998 jdk1.2 2300 J ...

  9. JAVA Bean和XML之间的相互转换 - XStream简单入门

    JAVA Bean和XML之间的相互转换 - XStream简单入门 背景介绍 XStream的简介 注解简介 应用实例 背景介绍 我们在工作中经常 遇到文件解析为数据或者数据转化为xml文件的情况, ...

随机推荐

  1. JS-JS创建数组的三种方法

    隐式创建 var arr=["Audi","BMW","Volvo"]; 直接实例化 var arr=new Array("Aud ...

  2. SA的一个辣鸡trick

    基础板子 namespace SA{ int x[400010],y[400010],SA[400010],rk[400010],ht[400010],t[400010]; int st[19][40 ...

  3. 【持续更新中···】Linux下的小技巧

    1.Linux回到上级文件的命令: cd ..回到上一级目录(注意:cd 和..中间有空格) cd ~回到home目录 cd -回到某一目录

  4. 当给DataGrid的Itemssoure属性赋值引起TabControl_SelectionChanged事件

    在TabControl的TabItem下布局了DataGrid控件时,当给dg.ItemsSource 赋值时会触发父控件的TabControl_SelectionChanged事件; 类似问题原因可 ...

  5. kvm虚拟化管理平台WebVirtMgr部署-完整记录(1)

    公司机房有一台2U的服务器(64G内存,32核),由于近期新增业务比较多,测试机也要新增,服务器资源十分有限.所以打算在这台2U服务器上部署kvm虚拟化,虚出多台VM出来,以应对新的测试需求.当KVM ...

  6. 浏览器跨域请求之credentials

    -时间起源- 前段时间,需要弄个简单的网站出来,访问远程的api服务. 我是这么做的.首先是在搭建一个nodejs服务来运行前端页面.在我请求登录的时候,能成功返回相应的成功信息.然后,当我再次请求读 ...

  7. Python初始编码-3

    01010100 新11010000 开11010100 一01100000 家11000000 看11000000 看 01010100011101110101011110110A B C01000 ...

  8. oracle数据恢复方法

    https://www.cnblogs.com/hqbhonker/p/3977200.html

  9. 必应词典案例分析——个人博客作业week3

    案例分析 ——必应词典客户端 软件缺陷常常又被叫做Bug,即为计算机软件或程序中存在的某种破坏正常运行能力的问题.错误,或者隐藏的功能缺陷. 缺陷的存在会导致软件产品在某种程度上不能满足用户的需要.I ...

  10. 【个人项目总结】C#四则运算表达式生成程序

    S1&2.个人项目时间估算 PSP表格如下: PSP2.1 Personal Software Process Stages Time(Before) Time(After) Planning ...