java服務端 客戶端(非阻塞 多線程)

ye34 10年前發布 | 2K 次閱讀 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();
            }
        }
    }

}

}</pre>

 本文由用戶 ye34 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!