使用ServletSocket創建TCP服務器端
從圖中看上去TCP通信的兩個通信實體之間並沒有服務器端客戶端之分但那是兩個通信實體已經建立虛擬鏈路之後的示意圖在兩個通信實體沒有建立虛擬鏈路之前必須有一個通信實體先做出主動姿態主動接收來自其他通信實體的連接請求
Java中能接受其他通信實體連接請求的類是ServerSocketServerSocket對象用於監聽來自客戶端的Socket連接如果沒有連接它將一直處於等待狀態ServerSocket包含一個監聽來自客戶端連接請求的方法
Socket accept()如果接收到一個客戶端Socket的連接請求該方法將返回一個與客戶端Socket對應的Socket(如圖所示每個TCP連接有兩個Socket)否則該方法將一直處於等待狀態線程也被阻塞
為了創建ServerSocket對象ServerSocket類提供了如下幾個構造器
ServerSocket(int port)用指定的端口port來創建一個ServerSocket該端口應該是有一個有效的端口整數值~
ServerSocket(int portint backlog)增加一個用來改變連接隊列長度的參數backlog
ServerSocket(int portint backlogInetAddress localAddr)在機器存在多個 IP地址的情況下允許通過localAddr這個參數來指定將ServerSocket綁定到指定的IP地址
當ServerSocket使用完畢應使用ServerSocket的close()方法來關閉該ServerSocket通常情況下服務器不應該只接受一個客戶端請求而應該不斷地接受來自客戶端的所有請求所以Java程序通常會通過循環不斷地調用ServerSocket的accept()方法如下代碼片段所示
//創建一個ServerSocket用於監聽客戶端Socket的連接請求
ServerSocket ss = new ServerSocket()
//采用循環不斷接受來自客戶端的請求
while (true)
{
//每當接受到客戶端Socket的請求服務器端也對應產生一個Socket
Socket s = ssaccept()
//下面就可以使用Socket進行通信了
…
}
上面程序中創建ServerSocket沒有指定IP地址則該ServerSocket將會綁定到本機默認的IP地址程序中使用作為該ServerSocket的端口號通常推薦使用以上的端口主要是為了避免與其他應用程序的通用端口沖突
返回目錄瘋狂Java講義
編輯推薦
Java程序性能優化讓你的Java程序更快更穩定
新手學Java 編程
Java程序設計培訓視頻教程
From:http://tw.wingwit.com/Article/program/Java/hx/201311/27266.html