| private ServerSocket server; |
| |
| private List<PrintWriter> allOut = new ArrayList<PrintWriter>(); |
| |
| |
| private synchronized void addOut(PrintWriter out) { |
| allOut.add(out); |
| } |
| |
| |
| private synchronized void removeOut(PrintWriter out) { |
| allOut.remove(out); |
| } |
| |
| |
| private synchronized void sendMessage(String msg) { |
| for (PrintWriter out : allOut) { |
| out.println(msg); |
| } |
| |
| } |
| |
| |
| |
| |
| |
| |
| public Server() throws IOException { |
| try { |
| server = new ServerSocket(8088); |
| } catch (IOException e) { |
| e.printStackTrace(); |
| throw e; |
| } |
| } |
| |
| public void start() throws IOException { |
| while (true) { |
| try { |
| Socket socket = server.accept(); |
| |
| |
| |
| ClientHandler hander = new ClientHandler(socket); |
| Thread thread = new Thread(hander); |
| |
| thread.start(); |
| } catch (IOException e) { |
| e.printStackTrace(); |
| throw e; |
| } |
| } |
| } |
| |
| public static void main(String[] args) { |
| Server server = null; |
| try { |
| server = new Server(); |
| server.start(); |
| } catch (IOException e) { |
| System.out.println("服务器启动失败"); |
| } |
| } |
| |
| |
| |
| |
| |
| |
| |
| |
| class ClientHandler implements Runnable { |
| private Socket socket; |
| |
| public ClientHandler(Socket socket) { |
| this.socket = socket; |
| } |
| |
| @Override |
| public void run() { |
| PrintWriter writer = null; |
| try { |
| |
| writer = new PrintWriter(new OutputStreamWriter( |
| socket.getOutputStream(), "utf-8"), true); |
| addOut(writer); |
| |
| BufferedReader reader = new BufferedReader( |
| new InputStreamReader(socket.getInputStream(), "utf-8")); |
| String msg = null; |
| |
| while ((msg = reader.readLine()) != null) { |
| |
| sendMessage(msg); |
| } |
| } catch (IOException e) { |
| e.printStackTrace(); |
| } finally { |
| |
| |
| removeOut(writer); |
| } |
| } |
| } |
| |
| private Socket socket; |
| |
| public Client() throws IOException { |
| try { |
| socket = new Socket("localhost", 8088); |
| } catch (IOException e) { |
| e.printStackTrace(); |
| throw e; |
| } |
| } |
| |
| |
| public void start() { |
| |
| ServerHandler handler = new ServerHandler(); |
| Thread thread = new Thread(handler); |
| |
| thread.start(); |
| |
| |
| |
| Scanner sca = new Scanner(System.in); |
| try { |
| PrintWriter writer = new PrintWriter(new OutputStreamWriter( |
| socket.getOutputStream(), "utf-8"), true); |
| String msg = null; |
| while (true) { |
| msg = sca.nextLine(); |
| writer.println(msg); |
| } |
| } catch (IOException e) { |
| e.printStackTrace(); |
| } |
| } |
| |
| public static void main(String[] args) { |
| Client c = null; |
| try { |
| c = new Client(); |
| c.start(); |
| } catch (IOException e) { |
| System.out.println("连接失败"); |
| } |
| } |
| |
| |
| class ServerHandler implements Runnable { |
| |
| @Override |
| public void run() { |
| try { |
| BufferedReader reader = new BufferedReader( |
| new InputStreamReader(socket.getInputStream(), "utf-8")); |
| String msg = null; |
| while ((msg = reader.readLine()) != null) { |
| System.out.println(msg); |
| } |
| } catch (IOException e) { |
| e.printStackTrace(); |
| } |
| } |
| } |
感谢分享,赞一个