其他分享
首页 > 其他分享> > nio

nio

作者:互联网

package com.luban.nio;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.Set;

public class NioServer {

private ServerSocketChannel serverSocketChannel;
private Selector selector;
private long timeOut=2000;

public NioServer(){
try {
serverSocketChannel=ServerSocketChannel.open();
serverSocketChannel.configureBlocking(false);
serverSocketChannel.bind(new InetSocketAddress(9090));
selector=Selector.open();
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
} catch (IOException e) {
System.exit(1);
}
}


public void start(){
try {
while (true){
selector.select(timeOut);
Set<SelectionKey> selectionKeys = selector.selectedKeys();
Iterator<SelectionKey> keyIterator = selectionKeys.iterator();
while (keyIterator.hasNext()){
SelectionKey selectionKey = keyIterator.next();
if(selectionKey.isValid()){
if(selectionKey.isAcceptable()){
ServerSocketChannel serverSocketChannel = (ServerSocketChannel) selectionKey.channel();
SocketChannel socketChannel = serverSocketChannel.accept();
socketChannel.configureBlocking(false);
socketChannel.register(selector,SelectionKey.OP_READ);
}
if(selectionKey.isReadable()){
SocketChannel socketChannel = (SocketChannel) selectionKey.channel();
ByteBuffer buffer=ByteBuffer.allocate(1024);
socketChannel.read(buffer);
System.out.println(new String(buffer.array()));
ByteBuffer buffer1=ByteBuffer.wrap(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()).getBytes());
socketChannel.write(buffer1);
}
}
keyIterator.remove();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
new NioServer().start();
}




}


package com.luban.nio;

import com.sun.org.apache.regexp.internal.RE;

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 NioClient {

private SocketChannel socketChannel;
private Selector selector;
private long timeOut=2000;

public NioClient(){
try {
socketChannel=SocketChannel.open();
socketChannel.configureBlocking(false);
selector=Selector.open();
if(socketChannel.connect(new InetSocketAddress("127.0.0.1",9090))){
socketChannel.register(selector, SelectionKey.OP_READ);
}else{
socketChannel.register(selector, SelectionKey.OP_CONNECT);
}
} catch (IOException e) {
e.printStackTrace();
}
}



public void start(){
try {
while (true){
selector.select(timeOut);
Set<SelectionKey> selectionKeys = selector.selectedKeys();
Iterator<SelectionKey> keyIterator = selectionKeys.iterator();
while (keyIterator.hasNext()){
SelectionKey selectionKey = keyIterator.next();
if(selectionKey.isValid()){
if(selectionKey.isConnectable()){
SocketChannel socketChannel = (SocketChannel) selectionKey.channel();
if(socketChannel.finishConnect()){
socketChannel.register(selector,SelectionKey.OP_READ);
ByteBuffer byteBuffer=ByteBuffer.allocate(1024);
byteBuffer.put("你好".getBytes());
byteBuffer.flip();
socketChannel.write(byteBuffer);
}else{
System.err.println("可以尝试重试");
}
}
if(selectionKey.isReadable()){
SocketChannel socketChannel = (SocketChannel) selectionKey.channel();
ByteBuffer buffer=ByteBuffer.allocate(1024);
socketChannel.read(buffer);
System.out.println(new String(buffer.array()));
}
}
keyIterator.remove();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
new NioClient().start();
}
}

标签:java,nio,selector,ByteBuffer,import,selectionKey,socketChannel
来源: https://www.cnblogs.com/mfk11/p/16251979.html