更新時間:2022-07-29 來源:黑馬程序員 瀏覽量:
在開發TCP程序時,首先需要創建服務器端程序。JDK的java.net包中提供了一個ServerSocket婁,該類的實例對象可以實現一個服務器端的程序。通過查閱API文檔可知,ServerSocket類提供了多個構造方法,接下來就對ServerSocket的構造方法進行詳細講解。
(1) ServerSocket()
使用該構造方法在創建ServerSocket對象時并沒有指定端口號,因此該對象不監聽任何端口,不能直接使用,使用時還需要調用bind(SocketAddress
endpoint)方法將其綁定到指定的端口號上。
(2)ServerSocket(int port)
使用該構造方法在創建ServerSocket對象時,可以將其綁定到指定的端口號上。如果port參數值為0,此時系統就會分配一個未被其他程序占用的端口號。由于客戶端需要根據指定的端口號來訪問服務器端程序,因此端口號隨機分配的情況并不常用,通常都會給服務器端指定一個端口號
(3)ServerSocket(int port,int backlog)
該構造方法就是在第2個構造方法的基礎上,增加了一個backlog參數。該參數用于指定在服務器忙時,可以與之保持連接請求的等待客戶端數量,如果沒有指定這個參數,默認為50。
(4)ServerSocket(int port, int backlog, InetAddress bindAddr)
該構造方法就是在第3個構造方法的基礎上,指定了相關的IP地址,這種情況適用于計算機上有多塊網卡和多個IP的情況,使用時可以明確規定ServerSocket在哪塊網卡或IP地址上等待客戶端的連接請求。顯然,對于一般只有一塊網卡的情況,就不用專門指定該參數。
在以上介紹的構造方法中,第2個構造方法是最常使用的。了解了如何通過ServerSocket的構造方法創建對象,接下來學習ServerSocket的常用方法,如下表所示。
ServerSocket對象負責監聽某臺客戶端計算機的端口號,在創建ServerSocket對象后,需要繼續調用該對象的accept()方法,接收來自客戶端的請求。當執行了accept()方法之后,服務器端程序會發生阻塞,直到客戶端發出連接請求,accept()方法才會返回一個Scoket對象用于和客戶端實現通信,程序才能繼續向下執行。