java服务端 客户端(非阻塞 多线程)详解编程语言

public class MultithreadJIoSocketTest { 
    @Test 
    public void testMultithreadJIoSocket() throws Exception { 
        ServerSocket serverSocket = new ServerSocket (10002); 
        Thread thread = new Thread (new Accptor (serverSocket) ); 
        thread.start(); 
 
        Scanner scanner = new Scanner (System.in); 
        scanner.next(); 
    } 
 
    public class Accptor implements Runnable { 
        private ServerSocket serverSocket; 
 
        public Accptor (ServerSocket serverSocket) { 
            this.serverSocket = serverSocket; 
        } 
 
        public void run() { 
            while (true) { 
                Socket socket = null; 
                try { 
                    socket = serverSocket.accept(); 
                    if (socket != null) { 
                        System.out.println ("收到了socket:" + socket.getRemoteSocketAddress().toString() ); 
                        Thread thread = new Thread (new Processor (socket) ); 
                        thread.start(); 
                    } 
                } catch (IOException e) { 
                    e.printStackTrace(); 
                } 
            } 
        } 
    } 
 
    public class Processor implements Runnable { 
        private Socket socket; 
 
        public Processor (Socket socket) { 
            this.socket = socket; 
        } 
 
        @Override 
        public void run() { 
            try { 
                BufferedReader in = new BufferedReader (new InputStreamReader (socket.getInputStream() ) ); 
                String readLine; 
                while (true) { 
                    readLine = in.readLine(); 
                    System.out.println ("收到消息" + readLine); 
                    if ("end".equals (readLine) ) { 
                        break; 
                    } 
                    //客户端断开连接 
                    socket.sendUrgentData (0xFF); 
                    Thread.sleep (5000); 
                } 
            } catch (InterruptedException e) { 
                e.printStackTrace(); 
            } catch (SocketException se) { 
                System.out.println ("客户端断开连接"); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
            finally { 
                try 
                { 
                    socket.close(); 
                } catch (IOException e) { 
                    e.printStackTrace(); 
                } 
            } 
        } 
 
    } 
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/10892.html

(0)
上一篇 2021年7月19日 10:31
下一篇 2021年7月19日 10:31

相关推荐

发表回复

登录后才能评论