nio/mina(一) nio基本通信

来源:互联网 发布:常见量化交易算法 编辑:程序博客网 时间:2024/06/01 10:29

服务端:

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();}}


 

原创粉丝点击