更新時(shí)間:2022-07-29 來(lái)源:黑馬程序員 瀏覽量:
在開(kāi)發(fā)TCP程序時(shí),首先需要?jiǎng)?chuàng)建服務(wù)器端程序。JDK的java.net包中提供了一個(gè)ServerSocket婁,該類的實(shí)例對(duì)象可以實(shí)現(xiàn)一個(gè)服務(wù)器端的程序。通過(guò)查閱API文檔可知,ServerSocket類提供了多個(gè)構(gòu)造方法,接下來(lái)就對(duì)ServerSocket的構(gòu)造方法進(jìn)行詳細(xì)講解。
(1) ServerSocket()
使用該構(gòu)造方法在創(chuàng)建ServerSocket對(duì)象時(shí)并沒(méi)有指定端口號(hào),因此該對(duì)象不監(jiān)聽(tīng)任何端口,不能直接使用,使用時(shí)還需要調(diào)用bind(SocketAddress
endpoint)方法將其綁定到指定的端口號(hào)上。
(2)ServerSocket(int port)
使用該構(gòu)造方法在創(chuàng)建ServerSocket對(duì)象時(shí),可以將其綁定到指定的端口號(hào)上。如果port參數(shù)值為0,此時(shí)系統(tǒng)就會(huì)分配一個(gè)未被其他程序占用的端口號(hào)。由于客戶端需要根據(jù)指定的端口號(hào)來(lái)訪問(wèn)服務(wù)器端程序,因此端口號(hào)隨機(jī)分配的情況并不常用,通常都會(huì)給服務(wù)器端指定一個(gè)端口號(hào)
(3)ServerSocket(int port,int backlog)
該構(gòu)造方法就是在第2個(gè)構(gòu)造方法的基礎(chǔ)上,增加了一個(gè)backlog參數(shù)。該參數(shù)用于指定在服務(wù)器忙時(shí),可以與之保持連接請(qǐng)求的等待客戶端數(shù)量,如果沒(méi)有指定這個(gè)參數(shù),默認(rèn)為50。
(4)ServerSocket(int port, int backlog, InetAddress bindAddr)
該構(gòu)造方法就是在第3個(gè)構(gòu)造方法的基礎(chǔ)上,指定了相關(guān)的IP地址,這種情況適用于計(jì)算機(jī)上有多塊網(wǎng)卡和多個(gè)IP的情況,使用時(shí)可以明確規(guī)定ServerSocket在哪塊網(wǎng)卡或IP地址上等待客戶端的連接請(qǐng)求。顯然,對(duì)于一般只有一塊網(wǎng)卡的情況,就不用專門指定該參數(shù)。
在以上介紹的構(gòu)造方法中,第2個(gè)構(gòu)造方法是最常使用的。了解了如何通過(guò)ServerSocket的構(gòu)造方法創(chuàng)建對(duì)象,接下來(lái)學(xué)習(xí)ServerSocket的常用方法,如下表所示。
ServerSocket對(duì)象負(fù)責(zé)監(jiān)聽(tīng)某臺(tái)客戶端計(jì)算機(jī)的端口號(hào),在創(chuàng)建ServerSocket對(duì)象后,需要繼續(xù)調(diào)用該對(duì)象的accept()方法,接收來(lái)自客戶端的請(qǐng)求。當(dāng)執(zhí)行了accept()方法之后,服務(wù)器端程序會(huì)發(fā)生阻塞,直到客戶端發(fā)出連接請(qǐng)求,accept()方法才會(huì)返回一個(gè)Scoket對(duì)象用于和客戶端實(shí)現(xiàn)通信,程序才能繼續(xù)向下執(zhí)行。
Java技能培訓(xùn):JDBC處理事務(wù)的步驟
2022-07-29java知識(shí)培訓(xùn):子類重寫父類時(shí)的訪問(wèn)權(quán)限
2022-07-28Java中4種不同級(jí)別的訪問(wèn)控制符
2022-07-28計(jì)算機(jī)網(wǎng)絡(luò)的功能有哪些?
2022-07-27MapReduce分布式計(jì)算框架:MapReduce運(yùn)行模式是什么?
2022-07-27MySQL數(shù)據(jù)庫(kù)存儲(chǔ)引擎【InnoDB/MyISAM/MEMORY 】
2022-07-25