Java 學習多線程程序,通常要經歷的幾個階段 java
1.單線程能夠處理一對一的請求 多線程
1 package rodking.server; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.io.PrintWriter; 7 import java.net.ServerSocket; 8 import java.net.Socket; 9 10 11 /** 12 * @author rodking 13 * @des 單線程能夠處理一對一的請求,當若是有要處理多個客戶端鏈接時不適用 14 * (相似一種排隊機制) 15 * (問答模式,單通道通訊) 阻塞通訊 16 */ 17 public class OneThreadServer { 18 private ServerSocket server; 19 private Socket socket = null; 20 21 public void serverStart() 22 { 23 BufferedReader is = null; 24 PrintWriter os = null; 25 try { 26 // 啓動一個服務端 27 server = new ServerSocket(9000); 28 System.out.println("[ S ]: game server start port 9000."); 29 // 監聽一個客戶端鏈接 30 socket = server.accept(); 31 String line; 32 // 獲取客戶端的,讀寫流 33 is = new BufferedReader(new InputStreamReader(socket.getInputStream())); 34 os = new PrintWriter(socket.getOutputStream()); 35 line = is.readLine(); 36 37 System.out.println("[ S ]: one client in server"); 38 // 單線程處理讀取 39 while (!line.equals("bye")) { 40 41 System.out.println("Server:" + line); 42 System.out.println("Client:" + line); 43 44 // TODO 這裏能夠作協議派發 (封裝 os) 45 os.println("[ received ] "+ line); 46 os.flush(); 47 48 line = is.readLine(); 49 } 50 51 System.out.println("[ S ]: game server close."); 52 53 os.close(); 54 is.close(); 55 socket.close(); 56 server.close(); 57 58 } catch (IOException e) { 59 e.printStackTrace(); 60 } 61 } 62 63 public static void main(String[] args) { 64 OneThreadServer server = new OneThreadServer(); 65 server.serverStart(); 66 } 67 }