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