Java 網路教程: ServerSocket
原文連結 作者:Jakob Jenkov 譯者:homesick
用java.net.ServerSocket實現java服務通過TCP/IP監聽客戶端連線,你也可以用Java NIO 來代替java網路標準API,這時候需要用到 ServerSocketChannel。
建立一個 ServerSocket連線
以下是一個建立ServerSocket類來監聽9000埠的一個簡單的程式碼
ServerSocket serverSocket = new ServerSocket(9000);
監聽請求的連線
要獲取請求的連線需要用ServerSocket.accept()方法。該方法返回一個Socket類,該類具有普通java Socket類的所有特性。程式碼如下:
ServerSocket serverSocket = new ServerSocket(9000); boolean isStopped = false;while(!isStopped){ Socket clientSocket = serverSocket.accept(); //do something with clientSocket}
對每個呼叫了accept()方法的類都只獲得一個請求的連線。
另外,請求的連線也只能在執行緒執行的server中呼叫了accept()方法之後才能夠接受請求。執行緒執行在server中其它所有的方法上的時候都不能接受客戶端的連線請求。所以”接受”請求的執行緒通常都會把Socket的請求連線放入一個工作執行緒池中,然後再和客戶端連線。更多關於多執行緒服務端設計的文件請參考 java多執行緒服務
關閉客戶端Socket
客戶端請求執行完畢,並且不會再有該客戶端的其它請求傳送過來的時候,就需要關閉Socket連線,這和關閉一個普通的客戶端Socket連線一樣。如下程式碼來執行關閉:
socket.close();
關閉服務端Sockets
要關閉服務的時候需要關掉 ServerSocket連線。通過執行如下程式碼:
serverSocket.close();