java aio聊天_JAVA aio简单使用
使用aio,实现客户端和服务器 对一个数进行轮流累加
//服务器端
public class Server {
private static ExecutorService executorService = Executors.newFixedThreadPool(4);
public static void main(String[] args) {
try {
AsynchronousChannelGroup group=AsynchronousChannelGroup.withThreadPool(executorService);
AsynchronousServerSocketChannel server=AsynchronousServerSocketChannel.open(group);
server.bind(new InetSocketAddress(8881));
server.accept(null, new CompletionHandler() {
@Override
public void completed(AsynchronousSocketChannel client, Object attachment) {
server.accept(null, this);
try {
System.out.println("服务器收到客户端"+client.getRemoteAddress().toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ByteBuffer buffer=ByteBuffer.allocate(1024);
client.read(buffer, buffer, new CompletionHandler() {
@Override
public void completed(Integer index, ByteBuffer buffer) {
try {
buffer.flip();
int i=buffer.getInt(0);
System.out.println(Thread.currentThread().getName()+" 服务器收到客户端消息"+client.getRemoteAddress().toString()+ " "+i);
buffer.putInt(0, i+1);
client.write(buffer).get();//这个是异步的,一定要用get 确保执行结束 才能clear
buffer.clear();
client.read(buffer,buffer,this);
}catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void failed(Throwable exc, ByteBuffer attachment) {
throw new RuntimeException(exc.getMessage());
}
});
}
@Override
public void failed(Throwable exc, Object attachment) {
throw new RuntimeException(exc.getMessage());
}
});
while(true) {
Thread.sleep(2000);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//客户端
public class Client {
public static void main(String[] args) {
try {
AsynchronousSocketChannel client=AsynchronousSocketChannel.open();
client.connect(new InetSocketAddress("127.0.0.1", 8881), null, new CompletionHandler() {
@Override
public void completed(Void result, Object attachment) {
System.out.println("连接服务器成功");
ByteBuffer buffer=ByteBuffer.allocate(1024);
buffer.putInt(0,1);
try {
client.write(buffer).get();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ExecutionException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
buffer.clear();
client.read(buffer, buffer, new CompletionHandler() {
@Override
public void completed(Integer result, ByteBuffer buffer) {
try {
//System.out.println("result="+result+" postition="+buffer.position()+" limit="+buffer.limit());
buffer.flip();
int i=buffer.getInt(0);
System.out.println("客户端收到服务器返回的消息"+client.getRemoteAddress().toString()+" "+i);
buffer.putInt(0, i+1);
Thread.sleep(2000);
client.write(buffer).get();
buffer.clear();
client.read(buffer, buffer, this);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void failed(Throwable exc, ByteBuffer attachment) {
throw new RuntimeException(exc.getMessage());
}
});
}
@Override
public void failed(Throwable exc, Object attachment) {
throw new RuntimeException(exc.getMessage());
}
});
while(true) {
Thread.sleep(2000);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
java aio聊天_JAVA aio简单使用相关推荐
- java gui 日历_Java实现简单日历小程序 Java图形界面小日历开发
今天给大家介绍一下如何用Java swing开发一款简单的小日历,下面我们来看代码: 首先创建一个CalendarBean类,用于基本的日期计算: package other1; import jav ...
- java 日历界面_Java实现简单日历小程序 Java图形界面小日历开发
今天给大家介绍一下如何用java swing开发一款简单的小日历,下面我们来看代码: 首先创建一个calendarbean类,用于基本的日期计算: package other1; import jav ...
- java银行取款_Java写简单的银行取钱系统
按ctrl+a 选中所有的代码删除,再复制下面的代码输入即可 import java.util.Scanner; public class 简单的银行取钱系统 //class的名字可以自己新建和这个一 ...
- java窗口聊天_java聊天窗口的实现
编写一数据报通信程序,实现简单的聊天功能. "聊天内容"和"输入文本"分别为当前聊天的历史信息和当前要传送出去的聊天文本."确定".&quo ...
- java udp聊天_Java UDP实现聊天功能代码
我以前经常写的是基于TCP的网络编程,由于TCP建立连接鼻血要经过三次握手连接,服务器端需要阻塞式等待客户端的连接.而UDP则是可以直接向目的地址的目的端口上发送数据包,由于它只负责发送出去就好,不管 ...
- java 通信 教程_Java实现简单的socket通信教程
今天学习了一下java如何实现socket通信,感觉难点反而是在io上,因为java对socket封装已经很完善了. 今天代码花了整个晚上调试,主要原因是io的flush问题和命令行下如何运行具有pa ...
- java字符生成器_Java实现简单字符生成器代码例子
创建成功的字符串对象,其长度是固定的,内容是不能被修改和编辑.虽然使用"+"可以达到增加新字符或字符串的目的,但"+"会产生一个新的String实例,会在内存中 ...
- java扫雷教程_java实现简单扫雷游戏
本文实例为大家分享了java实现简单扫雷游戏的具体代码,供大家参考,具体内容如下 package com.test.swing; import java.awt.event.ActionEvent; ...
- java泛型特点_java泛型简单总结
Java泛型简单总结 1)基本概念: 泛型(Generic Type或Generics)是 对Java语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看做是使用参数化类型时 ...
最新文章
- Java项目:CRM客户关系管理系统(java+Springboot+maven+mysql)
- Spring定时任务的配置
- 论MORMOT序列的JSON格式
- ubuntu18 常用命令
- 给 ListBox 的 DataTemplate 模板中的 元素设置动画
- 北理计算机教案,北理工版三年级信息技术教案重点.docx
- java初始化配置_java – 初始化没有XML配置的数据库,但使用@Configuration
- 一个好的函数(gcd)求最小公约数
- ie下解决PNG图片不透明问题
- Windows 使用技巧之WinZIP密码破解
- php eclipse aptana,eclipse 下如何安装 Aptana插件
- andorid自动化测试之Monkey(上)
- 蠕虫病毒Synaptics.exe感染日记
- 如何注册腾讯云账号(图文教程)?
- 简单优雅的搭建个人博客
- 【数据结构】使用队列实现循环调度法
- 笔记本计算机没有声音是怎么回事,笔记本电脑声音没了怎么恢复_笔记本怎么没有声音-win7之家...
- Filter-url拦截
- 雨伞16骨好还是24骨好_伞骨什么材质好 晴雨伞骨数越多越好吗
- 戴尔电脑遇到问题,运行SupportAssist.更新后大部分问题可以解决。
热门文章
- 蓝桥杯基础模块6_2:定时器进阶
- 打印矩阵 java_【Java】 剑指offer(29) 顺时针打印矩阵
- TDMA 时分多路复用
- QPSK信号调制之ASCII码
- Apache-DBUtils实现CRUD操作,已封装的API实现jdbc对数据库进行操作
- python中sorted的用法append_Python中高阶函数sorted()用法
- java查看jvm对象个数_jmap-查看 jvm 内存对象信息
- 开源PagerSlidingTabStrip的使用Tab与ViewPager的完美结合
- 洛谷P3857 [TJOI2008]彩灯(线性基)
- [湖南师大集训2018 7 26] hunger 解题报告 (SPFA)