【游戏服务端开服 二 】 一对多的请求
1 这类似架构可以简单满足 C/S 模型
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 * @author rodking 12 * @des 不用等待可以可以同时处理多个客户端请求, 13 * (但是如果请求过,多线程会成为系统瓶颈) 14 * (问答模式,单通道通信) 阻塞通信 15 */ 16 public class MultiThreadServer { 17 18 private ServerSocket server; 19 private Socket socket = null; 20 21 public void serverStart() { 22 try { 23 server = new ServerSocket(9000); 24 // 循环监听socket连接 25 while (true) { 26 // 启动一个服务端 27 System.out.println("[ S ]: game server start port 9000."); 28 // 监听一个客户端连接 29 socket = server.accept(); 30 31 // 多线程处理客户端连接 32 MultiThread clientServer = new MultiThread(socket); 33 new Thread(clientServer).start(); 34 } 35 36 } catch (IOException e) { 37 e.printStackTrace(); 38 } 39 } 40 41 class MultiThread implements Runnable { 42 private BufferedReader is = null; 43 private PrintWriter os = null; 44 private String line; 45 private Socket socket; 46 47 public MultiThread(Socket socket) { 48 this.socket = socket; 49 } 50 51 @Override 52 public void run() { 53 System.out.println("[ S ]: one client in server"); 54 try { 55 this.is = new BufferedReader(new InputStreamReader(socket.getInputStream())); 56 this.os = new PrintWriter(socket.getOutputStream()); 57 line = is.readLine(); 58 // TODO Auto-generated method stub 59 while (!line.equals("bye")) { 60 61 System.out.println("Server:" + line); 62 System.out.println("Client:" + line); 63 64 // TODO 这里可以做协议派发 (封装 os) 65 os.println("[ received ] " + line); 66 os.flush(); 67 68 line = is.readLine(); 69 } 70 71 System.out.println("[ S ]: game server close."); 72 73 os.close(); 74 is.close(); 75 socket.close(); 76 } catch (Exception e) { 77 e.printStackTrace(); 78 } 79 } 80 } 81 82 public static void main(String[] args) { 83 new MultiThreadServer().serverStart(); 84 } 85 }