Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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 = 2466;
- //客戶端連接
- 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);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment