1. 程式人生 > >Java 網路教程: ServerSocket

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();