服务端:
Server.java
package com.nafio.nio1;
import java.io.IOException;
import java.net.*;
import java.nio.*;
import java.nio.channels.*;
import java.util.*;
public class Server
{
ServerSocketChannel ssc;
public void start()
{
try
{
Selector selector = Selector.open();
ServerSocketChannel ssc = ServerSocketChannel.open();
ssc.configureBlocking(false);
ServerSocket ss = ssc.socket();
InetSocketAddress address = new InetSocketAddress(9988);
ss.bind(address);
ssc.register(selector, SelectionKey.OP_ACCEPT);
System.out.println("服务器_端口注册完毕!");
while (true)
{
System.out.println("服务端_主循环--------->");
selector.select();//nafio info 这里每次是阻塞的
//System.out.println("测试select阻塞");
Set<SelectionKey> selectionKeys = selector.selectedKeys();
Iterator<SelectionKey> iter = selectionKeys.iterator();
ByteBuffer echoBuffer = ByteBuffer.allocate(20);
SocketChannel sc;
while (iter.hasNext())
{
System.out.println("服务器_测试iteretor包含数量");
SelectionKey key = iter.next();
if ((key.readyOps() & SelectionKey.OP_ACCEPT) == SelectionKey.OP_ACCEPT)
{
ServerSocketChannel subssc = (ServerSocketChannel) key
.channel();
sc = subssc.accept();
sc.configureBlocking(false);
sc.register(selector, SelectionKey.OP_READ);
iter.remove();
System.out.println("服务器_有新连接:" + sc);
}
else if ((key.readyOps() & SelectionKey.OP_READ) == SelectionKey.OP_READ)
{
sc = (SocketChannel) key.channel();
while (true)
{
echoBuffer.clear();
int a;
try
{
a = sc.read(echoBuffer);
}
catch (Exception e)
{
e.printStackTrace();
break;
}
if (a == -1)
break;
if (a > 0)
{
byte[] b = echoBuffer.array();
System.out.println("服务器_接收数据<--- " + new String(b));
echoBuffer.flip();
sc.write(echoBuffer);
System.out.println("服务器_返回数据---> " + new String(b));
}
}
sc.close();
System.out.println("服务器_连接结束");
System.out.println("=============================");
iter.remove();
}
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
Server server = new Server();
server.start();
}
}
客户端
Client.java
package com.nafio.nio1;
import java.io.IOException;
import java.net.*;
import java.nio.*;
import java.nio.channels.*;
public class Client
{
public void start()
{
try
{
//SocketAddress address = new InetSocketAddress("localhost",55555);
SocketAddress address = new InetSocketAddress("localhost",9988);
SocketChannel client=SocketChannel.open(address);
client.configureBlocking(false);
String a="一二三四五六七八九十";
ByteBuffer buffer=ByteBuffer.allocate(20);//by nafio 20_byte 10_中文
buffer.put(a.getBytes());
buffer.clear();
int d=client.write(buffer);
System.out.println("客户端_发送数据---> "+new String(buffer.array()));
while(true)
{
buffer.flip();
int i=client.read(buffer);
if(i>0)
{
byte[] b=buffer.array();
System.out.println("客户端_接收数据---> "+new String(b));
client.close();
System.out.println("客户端_连接关闭!");
break;
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
Client client = new Client();
client.start();
}
}