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(); } } }
秦水坡-杜撰