nio/mina(一) nio基本通信

服务端:

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

猜你喜欢

转载自zzc1684.iteye.com/blog/2268748
今日推荐