javaNIO学习笔记二

    xiaoxiao2021-03-25  68

     

    传统IO加线程池

    加了线程池的服务端可以连接多个客户端

    第一步

    输入命令cmd 打开控制台,输入 telnet  127.0.0.1 10101连接上服务端。

    按ctrl+] 打开回显,输入send hello发送消息1

    第二步

     

    输入命令cmd 打开控制台,输入 telnet  127.0.0.1 10101连接上服务端。

    按ctrl+] 打开回显,输入send hello2发送消息2

    第三步

    这时,发现服务端没有阻塞,可以接收到两个消息。

     

     

     

     

    package OIO; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 传统socket服务端 * @author -琴兽- * */ public class OioServer { //telnet 127.0.0.1 10101 //@SuppressWarnings("resource") public static void main1(String[] args) throws Exception { ExecutorService newCachedThreadPool = Executors.newCachedThreadPool(); //创建socket服务,监听10101端口 ServerSocket server=new ServerSocket(10101); System.out.println("服务器启动!"); while(true){ //获取一个套接字(阻塞) final Socket socket = server.accept(); System.out.println("来个一个新客户端!"); newCachedThreadPool.execute(new Runnable() { @Override public void run() { //业务处理 handler(socket); } }); } } /** * 读取数据 * @param socket * @throws Exception */ public static void handler(Socket socket){ try { byte[] bytes = new byte[1024]; InputStream inputStream = socket.getInputStream(); while(true){ //读取数据(阻塞) int read = inputStream.read(bytes); if(read != -1){ System.out.println(new String(bytes, 0, read)); }else{ break; } } } catch (Exception e) { e.printStackTrace(); }finally{ try { System.out.println("socket关闭"); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }

     

     

    1.telnet命令,(ps 要开启 windows功能)

     

     

     

    2.输入ctrl+]

     

    3.从客户端发送命令到服务端send hello1

     

    4. 重复123操作,即可完成上图

     

     

     

    转载请注明原文地址: https://ju.6miu.com/read-32279.html

    最新回复(0)