【版權(quán)聲明】未經(jīng)博主同意,謝絕轉(zhuǎn)載!(請(qǐng)尊重原創(chuàng),博主保留追究權(quán))
https://blog.csdn.net/m0_69908381/article/details/131608966
出自【進(jìn)步*于辰的博客】
注:
1、IP 類:InetAddress類;
2、套接字 IP 類:InetSocketAddress類;
3、套接字類:Socket類。
1、概述
繼承關(guān)系:
- java.lang.Object
- java.net.ServerSocket
實(shí)現(xiàn)的所有接口
Closeable、AutoCloseable
直接已知子類:
SSLServerSocket
public class ServerSocket extends Object
此類實(shí)現(xiàn)服務(wù)器套接字。服務(wù)器套接字等待請(qǐng)求通過網(wǎng)絡(luò)傳入。它基于該請(qǐng)求執(zhí)行某些操作,然后可能向請(qǐng)求者返回結(jié)果。
服務(wù)器套接字的實(shí)際工作由 SocketImpl 類的實(shí)例執(zhí)行。應(yīng)用程序可以更改創(chuàng)建套接字實(shí)現(xiàn)的套接字工廠來配置它自身,從而創(chuàng)建適合本地防火墻的套接字。
本質(zhì):
此類負(fù)責(zé)服務(wù)器套接字的搭建,其本質(zhì)也是套接字(Socket)。因此,除服務(wù)器搭建的相關(guān)功能之外,如:獲取輸入/輸出流、綁定套接字 IP,都是通過套接字類 來實(shí)現(xiàn)。(見源碼)
從以下版本開始:
JDK1.0
另請(qǐng)參見:
SocketImpl、setSocketFactory(java.net.SocketImplFactory)
、ServerSocketChannel
2、構(gòu)造方法摘要
2.1 null
創(chuàng)建非綁定服務(wù)器套接字。
說明:
先看源碼。
關(guān)于setImpl()
,可參考套接字類的第5.2項(xiàng)。
2.2 int port
創(chuàng)建綁定到特定端口的服務(wù)器套接字。
說明:
先看源碼。
-
指定:
-
連接請(qǐng)求)的最大隊(duì)列長度為
50
;
ip地址為null
。
底層調(diào)用第4項(xiàng)。
2.3 int port, int backlog
利用指定的 backlog 創(chuàng)建服務(wù)器套接字并將其綁定到指定的本地端口號(hào)。
說明:
先看源碼。
-
指定:
-
ip地址為
null
。
底層調(diào)用下1項(xiàng)。
2.4 int port, int backlog, InetAddress bindAddr
使用指定的端口、偵聽 backlog 和要綁定到的本地 IP 地址創(chuàng)建服務(wù)器。
說明:
先看源碼。
關(guān)于setImpl()
,可參考套接字類的第5.2項(xiàng);關(guān)于bind()
,見第3.3項(xiàng)。
示例:
InetAddress ip = InetAddress.getByName("localhost");
ServerSocket server = new ServerSocket(8080, 1, ip);
sout "等待";
Socket client = server.accept();
sout "已連接";
業(yè)務(wù):通過本地 ip,建立在端口8080
上,構(gòu)建Socket
服務(wù)器,可接收1
個(gè)連接請(qǐng)求。
3、方法摘要
3.1 Socket accept()
偵聽并接受到此套接字的連接。
3.2 void bind(SocketAddress endpoint)
將 ServerSocket 綁定到特定地址(IP 地址和端口號(hào))。
說明:
先看源碼。
-
指定:
-
連接請(qǐng)求)的最大隊(duì)列長度為
50
;
底層調(diào)用下1項(xiàng)。
3.3 void bind(SocketAddress endpoint, int backlog)
將 ServerSocket 綁定到特定地址(IP 地址和端口號(hào))。
說明:
先看源碼。
關(guān)于isClosed()
,見第14項(xiàng)。
若!oldImpl && isBound()
為 true 說明:
-
bound = true
,表示“已綁定”; -
oldImpl = false
,表示當(dāng)前套接字實(shí)現(xiàn)類是“新的”(即“可用”)。(可進(jìn)一步證明在套接字類的第5.1項(xiàng)中我對(duì)字段oldImpl
作用的判斷和總結(jié))
endpoint instanceof InetSocketAddress
表示僅支持“套接字 IP”。
關(guān)于isUnresolved()/getAddress()/getPort()
,見套接字 IP 類的第3.7、3.3、3.5項(xiàng);關(guān)于checkListen()
,見SecurityManager類的第4.12項(xiàng);關(guān)于getImpl()
,可參考套接字類的第5.6項(xiàng);關(guān)于bind()
,見套接字類的第3.1項(xiàng)。
進(jìn)入listen()
。(出自實(shí)現(xiàn)類 AbstractPlainSocketImpl)
進(jìn)入socketListen()
。(出自實(shí)現(xiàn)類 PlainSocketImpl)
關(guān)于socketListen()
,暫不知底層調(diào)用了哪里。
3.4 void close()
關(guān)閉此套接字。
3.5 ServerSocketChannel getChannel()
返回與此套接字關(guān)聯(lián)的惟一 ServerSocketChannel 對(duì)象(如果有)。
3.6 InetAddress getInetAddress()
返回此服務(wù)器套接字的本地地址。
3.7 int getLocalPort()
返回此套接字在其上偵聽的端口。
3.8 SocketAddress getLocalSocketAddress()
返回此套接字綁定的端點(diǎn)的地址,如果尚未綁定則返回 null。
3.9 int getReceiveBufferSize()
獲取此 ServerSocket 的 SO_RCVBUF
選項(xiàng)的值,該值是將用于從此 ServerSocket 接受的套接字的建議緩沖區(qū)大小。
3.10 int getReuseAddress()
測(cè)試是否啟用 SO_REUSEADDR
。
3.11 int getSoTimeout()
重新恢復(fù) SO_TIMEOUT
的設(shè)置。
3.12 protected int implAccept(Socket s)
ServerSocket 的子類使用此方法重寫 accept()
以返回它們自己的套接字子類。
3.13 boolean isBound()
返回 ServerSocket 的綁定狀態(tài)。
3.14 boolean isClosed()
返回 ServerSocket 的關(guān)閉狀態(tài)。
3.15 void setPerformancePreferences(int connectionTime, int latency, int bandwidth)
設(shè)置此 ServerSocket 的性能偏好 (performance preferences)。
3.16 void setReceiveBufferSize(int size)
為從此 ServerSocket 接受的套接字的 SO_RCVBUF 選項(xiàng)設(shè)置默認(rèn)建議值。
3.17 void setReuseAddress(boolean on)
啟用/禁用 SO_REUSEADDR
套接字選項(xiàng)。
3.18 static void setSocketFactory(SocketImplFactory fac)
為應(yīng)用程序設(shè)置服務(wù)器套接字實(shí)現(xiàn)工廠。
3.19 void setSoTimeout(int timeout)
啟用/禁用帶有指定超時(shí)值的 SO_TIMEOUT
,以毫秒為單位。
3.20 String toString()
作為 String 返回此套接字的實(shí)現(xiàn)地址和實(shí)現(xiàn)端口。
最后
如果大家需要Java-API文檔,我上傳了《Java-API文檔-包含5/8/11三個(gè)版本》。文章來源:http://www.zghlxwxcb.cn/news/detail-545140.html
本文暫緩更新。文章來源地址http://www.zghlxwxcb.cn/news/detail-545140.html
到了這里,關(guān)于Java-API簡(jiǎn)析_java.net.ServerSocket類(基于 Latest JDK)(淺析源碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!