Guest User

server

a guest
Apr 19th, 2011
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.77 KB | None | 0 0
  1.  
  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. import java.util.ArrayList;
  10. import java.util.List;
  11. import java.util.concurrent.ExecutorService;
  12. import java.util.concurrent.Executors;
  13.  
  14. public class Server
  15. {
  16. //服務器通訊埠
  17. private static final int SERVERPORT = 2466;
  18. //客戶端連接
  19. private static List<Socket> mClientList = new ArrayList<Socket>();
  20. //線程池
  21. private ExecutorService mExecutorService;
  22. //ServerSocket對像
  23. private ServerSocket mServerSocket;
  24. //開啟服務器
  25. public static void main(String[] args)
  26. {
  27. new Server();
  28. }
  29. public Server()
  30. {
  31. try
  32. {
  33. //設定服務器通訊埠
  34. mServerSocket = new ServerSocket(SERVERPORT);
  35. //建立一個線程池
  36. mExecutorService = Executors.newCachedThreadPool();
  37. System.out.println("start...");
  38. //用來臨時儲存客戶端連接的Socket對像
  39. Socket client = null;
  40. while (true)
  41. {
  42. //接收客戶連接並增加到list中
  43. client = mServerSocket.accept();
  44. mClientList.add(client);
  45. //開啟一個客戶端線程
  46. mExecutorService.execute(new ThreadServer(client));
  47. }
  48. }
  49. catch (IOException e)
  50. {
  51. e.printStackTrace();
  52. }
  53. }
  54. //每個客戶端單獨開啟一個線程
  55. static class ThreadServer implements Runnable
  56. {
  57. private Socket mSocket;
  58. private BufferedReader mBufferedReader;
  59. private PrintWriter mPrintWriter;
  60. private String mStrMSG;
  61.  
  62. public ThreadServer(Socket socket) throws IOException
  63. {
  64. this.mSocket = socket;
  65. mBufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  66. mStrMSG = "user:"+this.mSocket.getInetAddress()+" come total:" + mClientList.size();
  67. sendMessage();
  68. }
  69. public void run()
  70. {
  71. try
  72. {
  73. while ((mStrMSG = mBufferedReader.readLine()) != null)
  74. {
  75. if (mStrMSG.trim().equals("exit"))
  76. {
  77. //當一個客戶端退出時
  78. mClientList.remove(mSocket);
  79. mBufferedReader.close();
  80. mPrintWriter.close();
  81. mStrMSG = "user:"+this.mSocket.getInetAddress()+" exit total:" + mClientList.size();
  82. mSocket.close();
  83. sendMessage();
  84. break;
  85. }
  86. else
  87. {
  88. mStrMSG = mSocket.getInetAddress() + ":" + mStrMSG;
  89. sendMessage();
  90. }
  91. }
  92. }
  93. catch (IOException e)
  94. {
  95. e.printStackTrace();
  96. }
  97. }
  98. //發送訊息給所有客戶端
  99. private void sendMessage() throws IOException
  100. {
  101. System.out.println(mStrMSG);
  102. for (Socket client : mClientList)
  103. {
  104. mPrintWriter = new PrintWriter(client.getOutputStream(), true);
  105. mPrintWriter.println(mStrMSG);
  106. }
  107. }
  108. }
  109. }
Advertisement
Add Comment
Please, Sign In to add comment