import org.junit.Test;
import javax.naming.ldap.SortKey;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.*;
import java.util.Iterator;
public class test {
@Test
public void client(){
SocketChannel schannel = null;
try {
schannel = SocketChannel.open(new InetSocketAddress("localhost",1300));
schannel.configureBlocking(false);
//创建缓冲区
//ByteBuffer buf = ByteBuffer.allocate(1024);
//buf.put("helloserver".getBytes());
Selector select = Selector.open();
schannel.register(select,SelectionKey.OP_CONNECT);
while(select.select()>0){
//获取监听事件的迭代器
Iterator<SelectionKey> it = select.selectedKeys().iterator();
while(it.hasNext()){
SelectionKey skey = it.next();
it.remove();
if(skey.isConnectable()){
SocketChannel channel = (SocketChannel)skey.channel();
if(channel.isConnectionPending())
channel.finishConnect();
channel.configureBlocking(false);
/*ByteBuffer buf = ByteBuffer.allocate(1024);
buf.put("事件准备就绪".getBytes());
buf.flip();*/
channel.write(ByteBuffer.wrap(new String("你好").getBytes()));
channel.register(select,SelectionKey.OP_READ);
}else if(skey.isReadable()){
SocketChannel sc = (SocketChannel)skey.channel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
buffer.put("准备好接受数据".getBytes());
buffer.flip();
sc.write(buffer);
buffer.clear();
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void server(){
ServerSocketChannel ssc = null;
try {
ssc = ServerSocketChannel.open();
ssc.bind(new InetSocketAddress(1300));
ssc.configureBlocking(false);
Selector selector = Selector.open();
ssc.register(selector,SelectionKey.OP_ACCEPT);
while(true) {
selector.select();
Iterator<SelectionKey> it = selector.selectedKeys().iterator();
while(it.hasNext()){
SelectionKey skey = it.next();
it.remove();
if(skey.isAcceptable()){
ServerSocketChannel serversoketchannel = (ServerSocketChannel) skey.channel();
SocketChannel socketchannel = serversoketchannel.accept();
socketchannel.configureBlocking(false);
socketchannel.register(selector,SelectionKey.OP_READ);
}else if(skey.isReadable()){
SocketChannel sc = (SocketChannel)skey.channel();
sc.configureBlocking(false);
ByteBuffer buf = ByteBuffer.allocate(1024);
sc.read(buf); //此处有异常java.net.SocketException: Connection reset
buf.flip();
byte[] array = buf.array();
System.out.println(new String(array,0,buf.limit()));
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}