package com.yarin.android.Examples_08_05; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Server { //�������˿� private static final int SERVERPORT = 54321; //�ͻ������� private static List<Socket> mClientList = new ArrayList<Socket>(); //�̳߳� private ExecutorService mExecutorService; //ServerSocket���� private ServerSocket mServerSocket; //���������� public static void main(String[] args) { new Server(); } public Server() { try { //���÷������˿� mServerSocket = new ServerSocket(SERVERPORT); //����һ���̳߳� mExecutorService = Executors.newCachedThreadPool(); System.out.println("start..."); //������ʱ����ͻ������ӵ�Socket���� Socket client = null; while (true) { //���տͻ����Ӳ���ӵ�list�� client = mServerSocket.accept(); mClientList.add(client); //����һ���ͻ����߳� mExecutorService.execute(new ThreadServer(client)); } } catch (IOException e) { e.printStackTrace(); } } //ÿ���ͻ��˵�������һ���߳� static class ThreadServer implements Runnable { private Socket mSocket; private BufferedReader mBufferedReader; private PrintWriter mPrintWriter; private String mStrMSG; public ThreadServer(Socket socket) throws IOException { this.mSocket = socket; mBufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); mStrMSG = "user:"+this.mSocket.getInetAddress()+" come total:" + mClientList.size(); sendMessage(); } public void run() { try { while ((mStrMSG = mBufferedReader.readLine()) != null) { if (mStrMSG.trim().equals("exit")) { //��һ���ͻ����˳�ʱ mClientList.remove(mSocket); mBufferedReader.close(); mPrintWriter.close(); mStrMSG = "user:"+this.mSocket.getInetAddress()+" exit total:" + mClientList.size(); mSocket.close(); sendMessage(); break; } else { mStrMSG = mSocket.getInetAddress() + ":" + mStrMSG; sendMessage(); } } } catch (IOException e) { e.printStackTrace(); } } //������Ϣ�����пͻ��� private void sendMessage() throws IOException { System.out.println(mStrMSG); for (Socket client : mClientList) { mPrintWriter = new PrintWriter(client.getOutputStream(), true); mPrintWriter.println(mStrMSG); } } } }