- 浏览: 261458 次
- 性别:
- 来自: 天津
文章分类
- 全部博客 (183)
- oracle (4)
- informix (1)
- web开发 (6)
- java (49)
- hibernate (1)
- hadoop (1)
- spring (23)
- 非技术 (8)
- ibatis2 (5)
- Linux (6)
- tomcat (14)
- nginx (7)
- dubbo (3)
- myibatis (7)
- webservice 开发 (2)
- mysql (2)
- svn (2)
- redis (7)
- 分布式技术 (17)
- zookeeper (2)
- kafka (2)
- velocity (1)
- maven (7)
- js (1)
- freemarker (1)
- Thymeleaf (3)
- 代码审计 (1)
- ibatis3 (1)
- rabbitmq (1)
最新评论
1.编写服务端
package com.boce.nio.server;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.nio.charset.Charset;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.springframework.util.StringUtils;
public class ServerNio implements Runnable {
//选择器
private Selector selector;
private ServerSocketChannel servChannel;
//设置应答线程池
private ExecutorService exeService = Executors.newFixedThreadPool(ServerConfig.SERVER_WRITE_BOOL);
private boolean stop;
public boolean isStop() {
return stop;
}
public void setStop(boolean stop) {
this.stop = stop;
}
public ServerNio(int port) {
try {
selector = Selector.open();
servChannel = ServerSocketChannel.open();
servChannel.configureBlocking(false);
InetSocketAddress endpoint = new InetSocketAddress(port);
servChannel.socket().bind(endpoint, 1024);
//接收连接继续事件,表示服务器监听到了客户连接,服务器可以接收这个连接了
servChannel.register(selector, SelectionKey.OP_ACCEPT);
} catch (Exception e) {
}
}
@Override
public void run() {
while (!stop) {
try {
System.out.println("---------------start");
selector.select();
Set<SelectionKey> set = selector.selectedKeys();
Iterator<SelectionKey> items = set.iterator();
while (items.hasNext()) {
SelectionKey key = items.next();
items.remove();
try{
handleInput(key);
}catch(Exception ex){
if(null !=key){
key.cancel();
}
if(null != key.channel()){
key.channel().close();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
if (selector != null) {
try {
selector.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void handleInput(final SelectionKey key) throws IOException{
if(key.isValid()){
//处理新信息
if(key.isAcceptable()){
ServerSocketChannel ssc = (ServerSocketChannel)key.channel();
SocketChannel sc = ssc.accept();
if(null !=sc){
sc.configureBlocking(false);
sc.register(selector, SelectionKey.OP_READ);
}
}
//可以读取信息了
if(key.isReadable()){
SocketChannel sc = (SocketChannel)key.channel();
//每次读取请求字节数组
ByteBuffer byteBuffer = ByteBuffer.allocate(ServerConfig.SERVER_PER_READ);
//每次请求信息
byte[] temp = new byte[ServerConfig.SERVER_TOTAL_READ];//
//合并数组的下标
int tempstart =0;
StringBuffer sb = new StringBuffer(256);
int len = -1;
while((len = sc.read(byteBuffer)) >0){
//设置byteBuffer的position 为0,从头开始读取
byteBuffer.flip();
int tLen =byteBuffer.remaining();
byte[] bytes = new byte[tLen];
//数据读入bytes数组
byteBuffer.get(bytes);
int end = tempstart+tLen;
//把bytes复制到temp
System.arraycopy(bytes,0,temp,tempstart,tLen);
tempstart = end;
//清除byteBuffer
byteBuffer.clear();
}
sb.append(new String(temp,"UTF-8"));
System.out.println("read ==>"+sb.toString());
sb.insert(0, "server is back==>");
ServerWriteHandle serverWriteHandle = new ServerWriteHandle(sc, sb.toString());
exeService.execute(serverWriteHandle);
if(len <= 0){
//关闭链端
if(null != key && key.isValid()){
key.cancel();
}
// if(null !=sc && sc.isOpen()){
// sc.close();
// }
}
}
}//isValid
}
private void writeMsg(SocketChannel sc,final String msg) throws IOException{
//模拟后台执行
try {
Random dom = new Random();
int time = dom.nextInt(300);
Thread.sleep(time);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(!StringUtils.isEmpty(msg)){
byte[] bMsg = msg.getBytes(Charset.forName("UTF-8"));
ByteBuffer byteBuffer = ByteBuffer.allocate(bMsg.length);
byteBuffer.put(bMsg);
byteBuffer.flip();
sc.write(byteBuffer);
}
}
}
package com.boce.nio.server;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
import java.nio.charset.Charset;
import java.util.Random;
import org.springframework.util.StringUtils;
/**
* 发送应答信息
* @author gjp
*
*/
public class ServerWriteHandle implements Runnable{
private SocketChannel sc;
private String msg ;
public ServerWriteHandle(SocketChannel sc, String msg) {
super();
this.sc = sc;
this.msg = msg;
}
@Override
public void run() {
try {
Random dom = new Random();
int time = dom.nextInt(30);
Thread.sleep(time);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(!StringUtils.isEmpty(msg)){
byte[] bMsg = msg.getBytes(Charset.forName("UTF-8"));
ByteBuffer byteBuffer = ByteBuffer.allocate(bMsg.length);
byteBuffer.put(bMsg);
byteBuffer.flip();
try {
sc.write(byteBuffer);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
sc.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
package com.boce.nio.server;
/**
* nio server端通用参数
* @author gjp
*
*/
public class ServerConfig {
//写线程池数量
public static final int SERVER_WRITE_BOOL = 300;
//每次读取字节数
public static final int SERVER_PER_READ = 256;
//一次请求读取总字节数(byte)
public static final int SERVER_TOTAL_READ = 1024;
}
编写启动程序:
package com.boce.nio.server;
import java.util.concurrent.Executors;
public class ServerStart {
public static void main(String[] args) {
ServerNio serverNio = new ServerNio(9999);
Executors.newFixedThreadPool(1).execute(serverNio);
}
}
2.编写客户端:
package com.boce.nio.server;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Set;
public class ClientNio implements Runnable {
private String host;
private int port;
private Selector selector;
private SocketChannel socketChannel;
private volatile boolean stop;
private int step;
public ClientNio(String host, int port,int step) {
try {
this.host = host == null ? "127.0.0.1" : host;
this.port = port;
this.selector = Selector.open();
this.socketChannel = SocketChannel.open();
this.socketChannel.configureBlocking(false);
this.step = step;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run() {
try {
doConnect();
} catch (Exception e) {
e.printStackTrace();
System.exit(0);
}
while (!stop) {
try {
System.out.println("---------------start");
selector.select();
Set<SelectionKey> set = selector.selectedKeys();
Iterator<SelectionKey> items = set.iterator();
SelectionKey key = null;
while (items.hasNext()) {
key = items.next();
items.remove();
try {
handleInput(key);
} catch (Exception ex) {
if (null != key) {
key.cancel();
}
if (null != key.channel()) {
key.channel().close();
}
}
}
} catch (Exception e) {
e.printStackTrace();
System.exit(0);
}
}
if (selector != null) {
try {
selector.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void handleInput(SelectionKey key) throws IOException {
if (key.isValid()) {
SocketChannel sc = (SocketChannel) key.channel();
//如果已经连接
if(key.isConnectable()){
if(sc.finishConnect()){
sc.register(selector, SelectionKey.OP_READ);
System.out.println("----------------handleInput***************doWrite");
doWrite(sc);
}else{
System.out.println("连接失败");
System.exit(1);
}
}
if (key.isReadable()) {
// SocketChannel sc = (SocketChannel) key.channel();
ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
int readLen = sc.read(byteBuffer);
if (readLen > 0) {
byteBuffer.flip();
byte[] bytes = new byte[byteBuffer.remaining()];
byteBuffer.get(bytes);
String body = new String(bytes, "UTF-8");
System.out.println("read sever back msg :: " + body);
stop = true;
// 关闭链端(如果不关闭,客户端最大连接数16286,之后开始报异常)
if(null !=key){
key.cancel();
}
if(null !=sc){
sc.close();
}
} else if (readLen < 0) {
// 关闭链端
if(null !=key){
key.cancel();
}
if(null !=sc){
sc.close();
}
} else {
System.out.println("读取数据 为0");
;// 读取数据为0;忽略
}
}
} // isValid
}
private void doConnect() throws IOException {
// 如果注册成功,注册到多路选择器,发送信息,读取信息
boolean isConn = socketChannel.connect(new InetSocketAddress(host, port));
if (isConn) {
socketChannel.register(selector, SelectionKey.OP_READ);
System.out.println("doconnect .....");
doWrite(socketChannel);
} else {
socketChannel.register(selector, SelectionKey.OP_CONNECT);
}
}
private void doWrite(SocketChannel sc) throws IOException {
String send ="requst time 请求===写入客户端信息内容************************************==========================="+step;
System.out.println("发送信息:"+send);
byte[] msg = send.getBytes("UTF-8");
ByteBuffer byteBuffer = ByteBuffer.allocate(msg.length);
byteBuffer.put(msg);
String position1 ="position"+ byteBuffer.position()+";capacity="+byteBuffer.capacity()+
";limit="+byteBuffer.limit()+";mark"+byteBuffer.mark()+
";remain"+byteBuffer.hasRemaining();
System.out.println(position1);
byteBuffer.flip();
String position2 = byteBuffer.position()+";capacity="+byteBuffer.capacity()+
";limit="+byteBuffer.limit()+";mark"+byteBuffer.mark()+
";remain"+byteBuffer.hasRemaining();
System.out.println(position2);
sc.write(byteBuffer);
if (!byteBuffer.hasRemaining()) {
System.out.println(" send order 2 success");
}
}
}
客户端启动程序:
package com.boce.nio.server;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
public class ClientStart {
public static void main(String[] args) {
String host="127.0.0.1";
int port =9999;
AtomicInteger ac = new AtomicInteger(0);
ExecutorService exe = Executors.newFixedThreadPool(100);
for(int i=0;i<1;i++){
ClientNio client = new ClientNio(host, port,ac.getAndIncrement());
exe.execute(client);
}
exe.shutdown();
}
}
测试发送记录条数:
package com.boce.nio.server;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.nio.charset.Charset;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.springframework.util.StringUtils;
public class ServerNio implements Runnable {
//选择器
private Selector selector;
private ServerSocketChannel servChannel;
//设置应答线程池
private ExecutorService exeService = Executors.newFixedThreadPool(ServerConfig.SERVER_WRITE_BOOL);
private boolean stop;
public boolean isStop() {
return stop;
}
public void setStop(boolean stop) {
this.stop = stop;
}
public ServerNio(int port) {
try {
selector = Selector.open();
servChannel = ServerSocketChannel.open();
servChannel.configureBlocking(false);
InetSocketAddress endpoint = new InetSocketAddress(port);
servChannel.socket().bind(endpoint, 1024);
//接收连接继续事件,表示服务器监听到了客户连接,服务器可以接收这个连接了
servChannel.register(selector, SelectionKey.OP_ACCEPT);
} catch (Exception e) {
}
}
@Override
public void run() {
while (!stop) {
try {
System.out.println("---------------start");
selector.select();
Set<SelectionKey> set = selector.selectedKeys();
Iterator<SelectionKey> items = set.iterator();
while (items.hasNext()) {
SelectionKey key = items.next();
items.remove();
try{
handleInput(key);
}catch(Exception ex){
if(null !=key){
key.cancel();
}
if(null != key.channel()){
key.channel().close();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
if (selector != null) {
try {
selector.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void handleInput(final SelectionKey key) throws IOException{
if(key.isValid()){
//处理新信息
if(key.isAcceptable()){
ServerSocketChannel ssc = (ServerSocketChannel)key.channel();
SocketChannel sc = ssc.accept();
if(null !=sc){
sc.configureBlocking(false);
sc.register(selector, SelectionKey.OP_READ);
}
}
//可以读取信息了
if(key.isReadable()){
SocketChannel sc = (SocketChannel)key.channel();
//每次读取请求字节数组
ByteBuffer byteBuffer = ByteBuffer.allocate(ServerConfig.SERVER_PER_READ);
//每次请求信息
byte[] temp = new byte[ServerConfig.SERVER_TOTAL_READ];//
//合并数组的下标
int tempstart =0;
StringBuffer sb = new StringBuffer(256);
int len = -1;
while((len = sc.read(byteBuffer)) >0){
//设置byteBuffer的position 为0,从头开始读取
byteBuffer.flip();
int tLen =byteBuffer.remaining();
byte[] bytes = new byte[tLen];
//数据读入bytes数组
byteBuffer.get(bytes);
int end = tempstart+tLen;
//把bytes复制到temp
System.arraycopy(bytes,0,temp,tempstart,tLen);
tempstart = end;
//清除byteBuffer
byteBuffer.clear();
}
sb.append(new String(temp,"UTF-8"));
System.out.println("read ==>"+sb.toString());
sb.insert(0, "server is back==>");
ServerWriteHandle serverWriteHandle = new ServerWriteHandle(sc, sb.toString());
exeService.execute(serverWriteHandle);
if(len <= 0){
//关闭链端
if(null != key && key.isValid()){
key.cancel();
}
// if(null !=sc && sc.isOpen()){
// sc.close();
// }
}
}
}//isValid
}
private void writeMsg(SocketChannel sc,final String msg) throws IOException{
//模拟后台执行
try {
Random dom = new Random();
int time = dom.nextInt(300);
Thread.sleep(time);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(!StringUtils.isEmpty(msg)){
byte[] bMsg = msg.getBytes(Charset.forName("UTF-8"));
ByteBuffer byteBuffer = ByteBuffer.allocate(bMsg.length);
byteBuffer.put(bMsg);
byteBuffer.flip();
sc.write(byteBuffer);
}
}
}
package com.boce.nio.server;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
import java.nio.charset.Charset;
import java.util.Random;
import org.springframework.util.StringUtils;
/**
* 发送应答信息
* @author gjp
*
*/
public class ServerWriteHandle implements Runnable{
private SocketChannel sc;
private String msg ;
public ServerWriteHandle(SocketChannel sc, String msg) {
super();
this.sc = sc;
this.msg = msg;
}
@Override
public void run() {
try {
Random dom = new Random();
int time = dom.nextInt(30);
Thread.sleep(time);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(!StringUtils.isEmpty(msg)){
byte[] bMsg = msg.getBytes(Charset.forName("UTF-8"));
ByteBuffer byteBuffer = ByteBuffer.allocate(bMsg.length);
byteBuffer.put(bMsg);
byteBuffer.flip();
try {
sc.write(byteBuffer);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
sc.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
package com.boce.nio.server;
/**
* nio server端通用参数
* @author gjp
*
*/
public class ServerConfig {
//写线程池数量
public static final int SERVER_WRITE_BOOL = 300;
//每次读取字节数
public static final int SERVER_PER_READ = 256;
//一次请求读取总字节数(byte)
public static final int SERVER_TOTAL_READ = 1024;
}
编写启动程序:
package com.boce.nio.server;
import java.util.concurrent.Executors;
public class ServerStart {
public static void main(String[] args) {
ServerNio serverNio = new ServerNio(9999);
Executors.newFixedThreadPool(1).execute(serverNio);
}
}
2.编写客户端:
package com.boce.nio.server;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Set;
public class ClientNio implements Runnable {
private String host;
private int port;
private Selector selector;
private SocketChannel socketChannel;
private volatile boolean stop;
private int step;
public ClientNio(String host, int port,int step) {
try {
this.host = host == null ? "127.0.0.1" : host;
this.port = port;
this.selector = Selector.open();
this.socketChannel = SocketChannel.open();
this.socketChannel.configureBlocking(false);
this.step = step;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run() {
try {
doConnect();
} catch (Exception e) {
e.printStackTrace();
System.exit(0);
}
while (!stop) {
try {
System.out.println("---------------start");
selector.select();
Set<SelectionKey> set = selector.selectedKeys();
Iterator<SelectionKey> items = set.iterator();
SelectionKey key = null;
while (items.hasNext()) {
key = items.next();
items.remove();
try {
handleInput(key);
} catch (Exception ex) {
if (null != key) {
key.cancel();
}
if (null != key.channel()) {
key.channel().close();
}
}
}
} catch (Exception e) {
e.printStackTrace();
System.exit(0);
}
}
if (selector != null) {
try {
selector.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void handleInput(SelectionKey key) throws IOException {
if (key.isValid()) {
SocketChannel sc = (SocketChannel) key.channel();
//如果已经连接
if(key.isConnectable()){
if(sc.finishConnect()){
sc.register(selector, SelectionKey.OP_READ);
System.out.println("----------------handleInput***************doWrite");
doWrite(sc);
}else{
System.out.println("连接失败");
System.exit(1);
}
}
if (key.isReadable()) {
// SocketChannel sc = (SocketChannel) key.channel();
ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
int readLen = sc.read(byteBuffer);
if (readLen > 0) {
byteBuffer.flip();
byte[] bytes = new byte[byteBuffer.remaining()];
byteBuffer.get(bytes);
String body = new String(bytes, "UTF-8");
System.out.println("read sever back msg :: " + body);
stop = true;
// 关闭链端(如果不关闭,客户端最大连接数16286,之后开始报异常)
if(null !=key){
key.cancel();
}
if(null !=sc){
sc.close();
}
} else if (readLen < 0) {
// 关闭链端
if(null !=key){
key.cancel();
}
if(null !=sc){
sc.close();
}
} else {
System.out.println("读取数据 为0");
;// 读取数据为0;忽略
}
}
} // isValid
}
private void doConnect() throws IOException {
// 如果注册成功,注册到多路选择器,发送信息,读取信息
boolean isConn = socketChannel.connect(new InetSocketAddress(host, port));
if (isConn) {
socketChannel.register(selector, SelectionKey.OP_READ);
System.out.println("doconnect .....");
doWrite(socketChannel);
} else {
socketChannel.register(selector, SelectionKey.OP_CONNECT);
}
}
private void doWrite(SocketChannel sc) throws IOException {
String send ="requst time 请求===写入客户端信息内容************************************==========================="+step;
System.out.println("发送信息:"+send);
byte[] msg = send.getBytes("UTF-8");
ByteBuffer byteBuffer = ByteBuffer.allocate(msg.length);
byteBuffer.put(msg);
String position1 ="position"+ byteBuffer.position()+";capacity="+byteBuffer.capacity()+
";limit="+byteBuffer.limit()+";mark"+byteBuffer.mark()+
";remain"+byteBuffer.hasRemaining();
System.out.println(position1);
byteBuffer.flip();
String position2 = byteBuffer.position()+";capacity="+byteBuffer.capacity()+
";limit="+byteBuffer.limit()+";mark"+byteBuffer.mark()+
";remain"+byteBuffer.hasRemaining();
System.out.println(position2);
sc.write(byteBuffer);
if (!byteBuffer.hasRemaining()) {
System.out.println(" send order 2 success");
}
}
}
客户端启动程序:
package com.boce.nio.server;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
public class ClientStart {
public static void main(String[] args) {
String host="127.0.0.1";
int port =9999;
AtomicInteger ac = new AtomicInteger(0);
ExecutorService exe = Executors.newFixedThreadPool(100);
for(int i=0;i<1;i++){
ClientNio client = new ClientNio(host, port,ac.getAndIncrement());
exe.execute(client);
}
exe.shutdown();
}
}
测试发送记录条数:
发表评论
-
aop实现通用缓存,并且防止缓存击穿
2019-09-16 15:10 698实现代码在附件中 1.自定义注解文件 package sgn ... -
统计多线程下程序运行总时间
2019-05-15 16:55 1027package com.gpcsoft.hct.epp.egp ... -
通过模板的方式解决缓存被击穿的问题
2019-04-15 11:35 3741. package gjp.tools; import c ... -
Rsa 加解密算法
2019-03-18 10:27 324package gjp.tools; /** * @Aut ... -
httpClient 使用http协议上传文件
2018-10-09 15:58 3055<dependency> <grou ... -
httpClient 使用HTTPS 协议上传文件
2018-09-30 14:50 2356<dependency> <group ... -
防止 XML外部实体注入
2018-09-18 17:03 7068方式一 DocumentBuilderFactory dbf ... -
httpClient 的https 调用
2018-06-20 21:07 733package com.gpcsoft.xjmodule.ut ... -
猎狗方式调用接口
2017-09-27 08:36 598package boce.hit.dog; import j ... -
netty 实现长连接
2017-08-24 09:52 12561.server 端信息 package com.boce.n ... -
netty 开发入门
2017-08-22 14:30 6351.准备jar <properties> & ... -
jwt 生成token 和解析token
2017-06-06 16:45 5862<jjwt.version>0.6.0</j ... -
实现Java高并发隔离 模拟
2017-05-08 10:34 473package org; import java.util. ... -
java 命令
2017-04-20 16:42 351java 命令: java -Djava.ext.dirs ... -
nio 通讯
2017-04-01 15:41 487nio 服务端: package nio.study.se ... -
HashMap 便利时不按照输入顺序输出
2017-03-27 17:11 1899使用:hashmap传输数据时,便利map中的数据时,发现 ... -
使用Lock,对不同商品加锁
2017-03-13 10:52 1211package com.boce.gbkutf; ... -
json 转泛型的集合类
2017-03-07 16:21 1175package com.boce.test; ... -
httpclient4.5 使用post方式提交请求
2017-03-03 11:00 1955private RequestConfig req ... -
GBK与UTF-8 字符串互转
2017-02-24 11:17 2140package com.cloud.tools; i ...
相关推荐
NIO编程实现实例,
NULL 博文链接:https://shift-alt-ctrl.iteye.com/blog/1840554
java nio 编程一个实例子.服务端程序
Java高并发编程代码(Netty NIO 实例)
一个很经典的基于NIO的java服务端与客户端实例
主要讲解Java Socket编程中NIO TCP的实例,希望能给大家做一个参考。
NIO用于高性能Socket编程由来已久,网络也有较为丰富的原理和源代码。我这里主要介绍几点经验总结: 1.Selector.select()在筛选就绪的SelectionKey的时候,采用的是阻塞模式。同时只要在就绪的SelectionKey列表中有...
Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了如何才能充分利用新的 I/O ...
主要讲解Java Socket编程中NIO UDP的实例,希望能给大家做一个参考。
主要介绍了Java NIO实例UDP发送接收数据代码分享,分享了客户端和服务端完整代码,小编觉得还是挺不错的,共需要的朋友参考。
您将通过实例学会如何使用这些工具来解决现实工作中常常遇到的I/O问题,并了解这些新特性如何对响应速率、可伸缩性和可靠性产生直接影响。 NIO API是对1.3版I/O特性的补充而非取代,因此,何时使用新的API,何时老的...
教程展示了5个在Java编程的一些常见场景里使用NIO和NIO.2包的简单示例,需要的朋友可以参考下
二、java NIO,AIO编程视频教程 1、java NIO,AIO编程_01.flv 2、java NIO,AIO编程_02.flv 3、java NIO,AIO编程_03.flv 4、java NIO,AIO编程_04.flv 5、java NIO,AIO编程_05.flv 三、Java语言基础教程-Java NIO...
本篇文章主要介绍了Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码),具有一定的参考价值,感兴趣的小伙伴们可以参考一下
java网络编程-孙卫琴 书籍源代码 (17个章节项目) 很好的基本入门网络编程实例 包含 io nio关联接口 rmi接口类 详解和实战
mina简单示例,Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信...Mina 提供了事件驱动、异步(Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持)操作的编程模型。
42_NIO网络编程实例剖析 43_NIO网络编程深度解析 44_NIO网络客户端编写详解 45_深入探索Java字符集编解码 46_字符集编解码全方位解析 47_Netty服务器与客户端编码模式回顾及源码分析准备 48_Netty与NIO系统总结及NIO...
39_NIO中Scattering与Gathering深度解析 40_Selector源码深入分析 41_NIO网络访问模式分析 42_NIO网络编程实例剖析 43_NIO网络编程深度解析 44_NIO网络客户端编写详解 45_深入探索Java字符集编解码 46_字符集编解码...
javanio.zip 23.NIO非阻塞通信(Socket/UDP实例、简单聊天系统) javarmi.zip 24.RMI编程(HelloWorld例、计算器实例) javacorba.zip 25.Corba编程(HelloWorld例、计算器实例) 第6部分(4个程序包) java...
javanio.zip 23.NIO非阻塞通信(Socket/UDP实例、简单聊天系统) javarmi.zip 24.RMI编程(HelloWorld例、计算器实例) javacorba.zip 25.Corba编程(HelloWorld例、计算器实例) 第6部分(4个程序包) java...