java基礎入門-建立能夠多client鏈接的ServerSocket
阿新 • • 發佈:2017-07-13
線程池 今天 asn puts str java.net run auto lock
ThreadedEchoHandler類主要實現的功能跟上一篇幾乎相同。都是接受client發過來的數據,然後復制一下打印出來,可是這裏面繼承了Runnable,能夠支持多線程
TestSocket依舊是測試類,這裏跟上一篇文章有差別的地方就在while循環裏面,每一個client鏈接過來,他都會開啟一個獨立線程來服務
承接上一篇文章,今天談論一下能夠多client鏈接的ServerSocket。
這裏面註意涉及到的技術點是:
1.ServerSocket
2.多線程
這次我們分成兩個類來實現,先上代碼:
package com.test.socket; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; public class ThreadedEchoHandler implements Runnable { private Socket socket = null; public ThreadedEchoHandler(Socket s) { this.socket = s; } @Override public void run() { InputStream inputStream; try { inputStream = socket.getInputStream(); OutputStream outputStream = socket.getOutputStream(); Scanner scanner = new Scanner(inputStream); PrintWriter printWriter = new PrintWriter(outputStream, true); printWriter.println("welcome to testServer"); boolean done = false; while (!done && scanner.hasNextLine()) { String line = scanner.nextLine(); printWriter.println("Echo:" + line); if (line.trim().equals("bye")) { done = true; } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
package com.test.socket; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class TestSocket { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(8189); while (true) { Socket socket = serverSocket.accept(); ThreadedEchoHandler handler = new ThreadedEchoHandler(socket); Thread thread = new Thread(handler); thread.start(); } } }
TestSocket依舊是測試類,這裏跟上一篇文章有差別的地方就在while循環裏面,每一個client鏈接過來,他都會開啟一個獨立線程來服務
擴展一下,這裏的測試類僅僅是用來測試用的,假設考慮到性能的問題,這裏通常會採取線程池,並且還須要有檢測鏈接是否還在的檢測類,不然隨著client鏈接的添加,內存直接爆掉。
並且這兩個類還欠缺了一些東西,譬如client如何退出?檢測鏈接?半關閉?等等,這些後面待續
java基礎入門-建立能夠多client鏈接的ServerSocket