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