天天看點

Java 網絡教程: ServerSocket

用java.net.serversocket實作java服務通過tcp/ip監聽用戶端連接配接,你也可以用java nio 來代替java網絡标準api,這時候需要用到 serversocketchannel。

以下是一個建立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.close();

要關閉服務的時候需要關掉 serversocket連接配接。通過執行如下代碼:

serversocket.close();