socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。socket是一种基于心跳检测的长连接。

NIO 是基于socket 进行整合封装 产生了一个selecter 事件监听处理器

netty 3 是基于NIO进行整合封装将 selecter 封装成线程池管理的多线程任务处理

netty 5 到netty 3 进行了升级包装

基于socket 的链接建立一般分为这么几步

1、创建一个服务类

2、绑定一个端口

3、创建监听事件

4、读取传输流

socket 案例

public static void main(String[] args) {
        // TODO Auto-generated method stub

        try {
            ExecutorService cachedPool = Executors.newCachedThreadPool();
            ServerSocket server = new ServerSocket(10001);
            while(true){
                final Socket socket = server.accept();  // 监听客户端等待链接
                System.out.println("客户端新建链接");
                cachedPool.execute(new Runnable() {  // 因为读取写入流是阻塞的,所以当一个客户端已经链接就会占住该线程,其他客户端就不能处理,所以这里用线程池处理
                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        handle(socket);
                    }
                });
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    public static void handle(Socket socket){
        try{
            InputStream input = socket.getInputStream();
            byte[] b =  new byte[10];
            int len = 0;
            while( (len = input.read(b) )>0){   
                System.out.println(new String(b));
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            System.out.println("客户端关闭链接");
            try {
                socket.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

 

posted on 2017-04-17 10:18  秦水坡  阅读(300)  评论(0编辑  收藏  举报