W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
java.lang.Object
|---java.net.ServerSocket
public class ServerSocket
extends Object
implements Closeable
此類實現(xiàn)服務(wù)器套接字。 服務(wù)器套接字等待通過網(wǎng)絡(luò)進(jìn)入的請求。 它根據(jù)該請求執(zhí)行一些操作,然后可能將結(jié)果返回給請求者。
服務(wù)器套接字的實際工作由 SocketImpl 類的實例執(zhí)行。 應(yīng)用程序可以更改創(chuàng)建套接字實現(xiàn)的套接字工廠,以將其自身配置為創(chuàng)建適合本地防火墻的套接字。
構(gòu)造函數(shù) | 描述 |
---|---|
ServerSocket() | 創(chuàng)建一個未綁定的服務(wù)器套接字。 |
ServerSocket(int port) | 創(chuàng)建一個綁定到指定端口的服務(wù)器套接字。 |
ServerSocket(int port, int backlog) | 創(chuàng)建一個服務(wù)器套接字并將其綁定到指定的本地端口號,并具有指定的 backlog。 |
ServerSocket(int port, int backlog, InetAddress bindAddr) | 創(chuàng)建具有指定端口、偵聽積壓和要綁定的本地 IP 地址的服務(wù)器。 |
修飾符和類型 | 方法 | 描述 |
---|---|---|
Socket | accept() | 偵聽要與此套接字建立的連接并接受它。 |
void | bind(SocketAddress endpoint) | 將 ServerSocket 綁定到特定地址(IP 地址和端口號)。 |
void | bind(SocketAddress endpoint, int backlog) | 將 ServerSocket 綁定到特定地址(IP 地址和端口號)。 |
void | close() | 關(guān)閉此套接字。 |
ServerSocketChannel | getChannel() | 返回與此套接字關(guān)聯(lián)的唯一 ServerSocketChannel 對象(如果有)。 |
InetAddress | getInetAddress() | 返回此服務(wù)器套接字的本地地址。 |
int | getLocalPort() | 返回此套接字正在偵聽的端口號。 |
SocketAddress | getLocalSocketAddress() | 返回此套接字綁定到的端點的地址。 |
int | getReceiveBufferSize() | 獲取此 ServerSocket 的 SocketOptions#SO_RCVBUF 選項的值,即用于從該 ServerSocket 接受的套接字的建議緩沖區(qū)大小。 |
boolean | getReuseAddress() | 測試 SocketOptions#SO_REUSEADDR 是否啟用。 |
int | getSoTimeout() | 檢索 SocketOptions#SO_TIMEOUT 的設(shè)置。 |
protected void | implAccept(Socket s) | ServerSocket 的子類使用此方法覆蓋 accept() 以返回它們自己的套接字子類。 |
boolean | isBound() | 返回 ServerSocket 的綁定狀態(tài)。 |
boolean | isClosed() | 返回 ServerSocket 的關(guān)閉狀態(tài)。 |
void | setPerformancePreferences(int connectionTime, int latency, int bandwidth) | 設(shè)置此 ServerSocket 的性能首選項。 |
void | setReceiveBufferSize(int size) | 為從此 ServerSocket 接受的套接字設(shè)置 SocketOptions#SO_RCVBUF 選項的默認(rèn)建議值。 |
void | setReuseAddress(boolean on) | 啟用/禁用 SocketOptions#SO_REUSEADDR 套接字選項。 |
static void | setSocketFactory(SocketImplFactory fac) | 為應(yīng)用程序設(shè)置服務(wù)器套接字實現(xiàn)工廠。 |
void | setSoTimeout(int timeout) | 使用指定的超時啟用/禁用 SocketOptions#SO_TIMEOUT,以毫秒為單位。 |
String | toString() | 以 String 形式返回此套接字的實現(xiàn)地址和實現(xiàn)端口。 |
從類 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
public ServerSocket() throws IOException
創(chuàng)建一個未綁定的服務(wù)器套接字。
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 打開套接字時出現(xiàn) IO 錯誤。 |
public ServerSocket(int port) throws IOException
創(chuàng)建一個綁定到指定端口的服務(wù)器套接字。 端口號 0 表示端口號是自動分配的,通常來自臨時端口范圍。 然后可以通過調(diào)用 getLocalPort 檢索此端口號。
傳入連接指示(連接請求)的最大隊列長度設(shè)置為 50。如果在隊列已滿時連接指示到達(dá),則拒絕連接。
如果應(yīng)用程序指定了服務(wù)器套接字工廠,則調(diào)用該工廠的 createSocketImpl 方法來創(chuàng)建實際的套接字實現(xiàn)。 否則會創(chuàng)建一個“普通”套接字。
如果有安全管理器,則調(diào)用其 checkListen 方法,并將端口參數(shù)作為其參數(shù),以確保允許該操作。 這可能會導(dǎo)致 SecurityException。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
port | 端口號,或 0 使用自動分配的端口號。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在打開套接字時發(fā)生 I/O 錯誤。 |
SecurityException | 如果安全管理器存在并且其 checkListen 方法不允許該操作。 |
IllegalArgumentException | 如果端口參數(shù)超出指定的有效端口值范圍,即介于 0 和 65535 之間(包括 0 和 65535)。 |
public ServerSocket(int port, int backlog) throws IOException
創(chuàng)建一個服務(wù)器套接字并將其綁定到指定的本地端口號,并具有指定的 backlog。端口號 0 表示端口號是自動分配的,通常來自臨時端口范圍。然后可以通過調(diào)用 getLocalPort 檢索此端口號。
傳入連接指示(連接請求)的最大隊列長度設(shè)置為 backlog 參數(shù)。如果隊列滿時有連接指示到達(dá),則拒絕連接。
如果應(yīng)用程序指定了服務(wù)器套接字工廠,則調(diào)用該工廠的 createSocketImpl 方法來創(chuàng)建實際的套接字實現(xiàn)。否則會創(chuàng)建一個“普通”套接字。
如果有安全管理器,則調(diào)用其 checkListen 方法,并將端口參數(shù)作為其參數(shù),以確保允許該操作。這可能會導(dǎo)致 SecurityException。 backlog 參數(shù)是套接字上請求的最大掛起連接數(shù)。它的確切語義是特定于實現(xiàn)的。特別地,實現(xiàn)可以強(qiáng)加最大長度或者可以選擇完全忽略參數(shù)。提供的值應(yīng)大于 0。如果小于或等于 0,則將使用特定于實現(xiàn)的默認(rèn)值。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
port | 端口號,或 0 使用自動分配的端口號。 |
backlog | 請求的傳入連接隊列的最大長度。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在打開套接字時發(fā)生 I/O 錯誤。 |
SecurityException | 如果安全管理器存在并且其 checkListen 方法不允許該操作。 |
IllegalArgumentException | 如果端口參數(shù)超出指定的有效端口值范圍,即介于 0 和 65535 之間(包括 0 和 65535)。 |
public ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException
創(chuàng)建具有指定端口、偵聽積壓和要綁定的本地 IP 地址的服務(wù)器。 bindAddr 參數(shù)可用于多宿主主機(jī)上的 ServerSocket,它只接受對其地址之一的連接請求。如果 bindAddr 為空,它將默認(rèn)接受任何/所有本地地址上的連接。端口必須介于 0 和 65535 之間(包括 0 和 65535)。端口號 0 表示端口號是自動分配的,通常來自臨時端口范圍。然后可以通過調(diào)用 getLocalPort 檢索此端口號。
如果有安全管理器,則此方法調(diào)用其 checkListen 方法,并將端口參數(shù)作為其參數(shù),以確保允許該操作。這可能會導(dǎo)致 SecurityException。 backlog 參數(shù)是套接字上請求的最大掛起連接數(shù)。它的確切語義是特定于實現(xiàn)的。特別地,實現(xiàn)可以強(qiáng)加最大長度或者可以選擇完全忽略參數(shù)。提供的值應(yīng)大于 0。如果小于或等于 0,則將使用特定于實現(xiàn)的默認(rèn)值。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
port | 端口號,或 0 使用自動分配的端口號。 |
backlog | 請求的傳入連接隊列的最大長度。 |
bindAddr | 服務(wù)器將綁定到的本地 InetAddress |
Throws:
Throw名稱 | Throw描述 |
---|---|
SecurityException | 如果安全管理器存在并且其 checkListen 方法不允許該操作。 |
IOException | 如果在打開套接字時發(fā)生 I/O 錯誤。 |
IllegalArgumentException | 如果端口參數(shù)超出指定的有效端口值范圍,即介于 0 和 65535 之間(包括 0 和 65535)。 |
public void bind(SocketAddress endpoint) throws IOException
將 ServerSocket 綁定到特定地址(IP 地址和端口號)。
如果地址為空,那么系統(tǒng)將選擇一個臨時端口和一個有效的本地地址來綁定套接字。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
endpoint | 要綁定的 IP 地址和端口號。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果綁定操作失敗,或者套接字已經(jīng)綁定。 |
SecurityException | 如果存在 SecurityManager 并且其 checkListen 方法不允許該操作。 |
IllegalArgumentException | 如果端點是此套接字不支持的 SocketAddress 子類 |
public void bind(SocketAddress endpoint, int backlog) throws IOException
將 ServerSocket 綁定到特定地址(IP 地址和端口號)。
如果地址為空,那么系統(tǒng)將選擇一個臨時端口和一個有效的本地地址來綁定套接字。
backlog 參數(shù)是套接字上請求的最大掛起連接數(shù)。 它的確切語義是特定于實現(xiàn)的。 特別地,實現(xiàn)可以強(qiáng)加最大長度或者可以選擇完全忽略參數(shù)。 提供的值應(yīng)大于 0。如果小于或等于 0,則將使用特定于實現(xiàn)的默認(rèn)值。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
endpoint | 要綁定的 IP 地址和端口號。 |
backlog | 請求的傳入連接隊列的最大長度。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果綁定操作失敗,或者套接字已經(jīng)綁定。 |
SecurityException | 如果存在 SecurityManager 并且其 checkListen 方法不允許該操作。 |
IllegalArgumentException | 如果端點是此套接字不支持的 SocketAddress 子類 |
public InetAddress getInetAddress()
返回此服務(wù)器套接字的本地地址。
如果socket在關(guān)閉之前就綁定了,那么這個方法會在socket關(guān)閉后繼續(xù)返回本地地址。
如果設(shè)置了安全管理器,則使用本地地址和 -1 作為其參數(shù)調(diào)用其 checkConnect 方法,以查看是否允許該操作。 如果不允許該操作,則返回 InetAddress#getLoopbackAddress 地址。
返回:
此套接字綁定到的地址,如果安全管理器拒絕,則返回環(huán)回地址,如果套接字未綁定,則返回 null。
public int getLocalPort()
返回此套接字正在偵聽的端口號。
如果套接字在關(guān)閉之前已綁定,則此方法將在套接字關(guān)閉后繼續(xù)返回端口號。
返回:
此套接字正在偵聽的端口號,如果尚未綁定套接字,則為 -1。
public SocketAddress getLocalSocketAddress()
返回此套接字綁定到的端點的地址。
如果套接字在關(guān)閉之前已綁定,則該方法將在套接字關(guān)閉后繼續(xù)返回端點的地址。
如果設(shè)置了安全管理器,則使用本地地址和 -1 作為其參數(shù)調(diào)用其 checkConnect 方法,以查看是否允許該操作。 如果不允許該操作,則返回代表 InetAddress#getLoopbackAddress 地址和套接字綁定的本地端口的 SocketAddress。
返回:
表示此套接字的本地端點的 SocketAddress,如果安全管理器拒絕,則表示環(huán)回地址的 SocketAddress,如果尚未綁定套接字,則返回 null。
public Socket accept() throws IOException
偵聽要與此套接字建立的連接并接受它。 該方法阻塞,直到建立連接。
創(chuàng)建一個新的 Socket s,如果有安全管理器,則使用 s.getInetAddress().getHostAddress() 和 s.getPort() 作為其參數(shù)調(diào)用安全管理器的 checkAccept 方法,以確保允許操作。 這可能會導(dǎo)致 SecurityException。
返回:
新的 Socket
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在等待連接時發(fā)生 I/O 錯誤。 |
SecurityException | 如果存在安全管理器并且其 checkAccept 方法不允許該操作。 |
SocketTimeoutException | 如果先前使用 setSoTimeout 設(shè)置了超時并且已達(dá)到超時。 |
IllegalBlockingModeException | 如果此套接字有關(guān)聯(lián)的通道,則通道處于非阻塞模式,并且沒有準(zhǔn)備好接受的連接 |
protected final void implAccept(Socket s) throws IOException
ServerSocket 的子類使用此方法覆蓋 accept() 以返回它們自己的套接字子類。 所以 FooServerSocket 通常會給這個方法一個空的 FooSocket。 從 implAccept 返回時,F(xiàn)ooSocket 將連接到客戶端。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
s | 套接字 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IllegalBlockingModeException | 如果此套接字具有關(guān)聯(lián)的通道,并且該通道處于非阻塞模式 |
IOException | 如果在等待連接時發(fā)生 I/O 錯誤。 |
public void close() throws IOException
關(guān)閉此套接字。 當(dāng)前在 accept() 中阻塞的任何線程都會拋出 SocketException。
如果此套接字具有關(guān)聯(lián)的通道,則該通道也將關(guān)閉。
指定者:
在接口 AutoCloseable 中關(guān)閉
指定者:
在接口Closeable中關(guān)閉
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果關(guān)閉套接字時發(fā)生 I/O 錯誤。 |
public ServerSocketChannel getChannel()
返回與此套接字關(guān)聯(lián)的唯一 ServerSocketChannel 對象(如果有)。
當(dāng)且僅當(dāng)通道本身是通過 ServerSocketChannel.open 方法創(chuàng)建時,服務(wù)器套接字才會有通道。
返回:
與此套接字關(guān)聯(lián)的服務(wù)器套接字通道,如果此套接字不是為通道創(chuàng)建的,則為 null
public boolean isBound()
返回 ServerSocket 的綁定狀態(tài)。
返回:
如果 ServerSocket 成功綁定到地址,則為 true
public boolean isClosed()
返回 ServerSocket 的關(guān)閉狀態(tài)。
返回:
如果套接字已關(guān)閉,則為 true
public void setSoTimeout(int timeout) throws SocketException
使用指定的超時啟用/禁用 SocketOptions#SO_TIMEOUT,以毫秒為單位。 將此選項設(shè)置為非零超時,對此 ServerSocket 的 accept() 調(diào)用將僅阻塞此時間量。 如果超時到期,則會引發(fā) java.net.SocketTimeoutException,盡管 ServerSocket 仍然有效。 必須在進(jìn)入阻塞操作之前啟用該選項才能生效。 超時必須 > 0。超時為零被解釋為無限超時。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
timeout | 指定的超時時間,以毫秒為單位 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 TCP 錯誤。 |
public int getSoTimeout() throws IOException
檢索 SocketOptions#SO_TIMEOUT 的設(shè)置。 返回 0 表示該選項被禁用(即無限超時)。
返回:
SocketOptions#SO_TIMEOUT 值
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果發(fā)生 I/O 錯誤 |
public void setReuseAddress(boolean on) throws SocketException
啟用/禁用 SocketOptions#SO_REUSEADDR 套接字選項。
當(dāng) TCP 連接關(guān)閉時,連接可能會在連接關(guān)閉后的一段時間內(nèi)保持超時狀態(tài)(通常稱為 TIME_WAIT 狀態(tài)或 2MSL 等待狀態(tài))。 對于使用眾所周知的套接字地址或端口的應(yīng)用程序,如果存在涉及套接字地址或端口的處于超時狀態(tài)的連接,則可能無法將套接字綁定到所需的 SocketAddress。
在使用 bind(java.net.SocketAddress) 綁定套接字之前啟用 SocketOptions#SO_REUSEADDR 允許綁定套接字,即使先前的連接處于超時狀態(tài)。
創(chuàng)建 ServerSocket 時,未定義 SocketOptions#SO_REUSEADDR 的初始設(shè)置。 應(yīng)用程序可以使用 getReuseAddress() 來確定 SocketOptions#SO_REUSEADDR 的初始設(shè)置。
未定義套接字綁定后啟用或禁用 SocketOptions#SO_REUSEADDR 時的行為。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
on | 是否啟用或禁用套接字選項 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果啟用或禁用 SocketOptions#SO_REUSEADDR 套接字選項發(fā)生錯誤,或者套接字已關(guān)閉。 |
public boolean getReuseAddress() throws SocketException
測試 SocketOptions#SO_REUSEADDR 是否啟用。
返回:
一個布爾值,指示是否啟用 SocketOptions#SO_REUSEADDR。
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 TCP 錯誤。 |
public String toString()
以 String 形式返回此套接字的實現(xiàn)地址和實現(xiàn)端口。
如果設(shè)置了安全管理器,則使用本地地址和 -1 作為其參數(shù)調(diào)用其 checkConnect 方法,以查看是否允許該操作。 如果不允許該操作,則返回一個表示 InetAddress#getLoopbackAddress 地址的 InetAddress 作為實現(xiàn)地址。
覆蓋:
類 Object 中的 toString
返回:
此套接字的字符串表示形式。
public static void setSocketFactory(SocketImplFactory fac) throws IOException
為應(yīng)用程序設(shè)置服務(wù)器套接字實現(xiàn)工廠。 工廠只能指定一次。
當(dāng)應(yīng)用程序創(chuàng)建新的服務(wù)器套接字時,會調(diào)用套接字實現(xiàn)工廠的 createSocketImpl 方法來創(chuàng)建實際的套接字實現(xiàn)。
除非已經(jīng)設(shè)置了工廠,否則將 null 傳遞給方法是無操作的。
如果有安全管理器,該方法首先調(diào)用安全管理器的 checkSetFactory 方法,確保操作被允許。 這可能會導(dǎo)致 SecurityException。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
fac | 想要的工廠。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果設(shè)置套接字工廠時發(fā)生 I/O 錯誤。 |
SocketException | 如果工廠已經(jīng)定義。 |
SecurityException | 如果存在安全管理器并且其 checkSetFactory 方法不允許該操作。 |
public void setReceiveBufferSize(int size) throws SocketException
為從此 ServerSocket 接受的套接字設(shè)置 SocketOptions#SO_RCVBUF 選項的默認(rèn)建議值。在接受的套接字中實際設(shè)置的值必須在接受()返回套接字后通過調(diào)用Socket#getReceiveBufferSize()來確定。
SocketOptions#SO_RCVBUF 的值既用于設(shè)置內(nèi)部套接字接收緩沖區(qū)的大小,也用于設(shè)置通告給遠(yuǎn)程對等方的 TCP 接收窗口的大小。
隨后可以通過調(diào)用 Socket#setReceiveBufferSize(int) 來更改該值。但是,如果應(yīng)用程序希望允許大于 64K 字節(jié)的接收窗口(如 RFC1323 所定義),則必須在 ServerSocket 中設(shè)置建議的值,然后才能將其綁定到本地地址。這意味著,必須使用無參數(shù)構(gòu)造函數(shù)創(chuàng)建 ServerSocket,然后必須調(diào)用 setReceiveBufferSize(),最后通過調(diào)用 bind() 將 ServerSocket 綁定到地址。
不這樣做不會導(dǎo)致錯誤,并且緩沖區(qū)大小可能會設(shè)置為請求的值,但從該 ServerSocket 接受的套接字中的 TCP 接收窗口將不大于 64K 字節(jié)。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
size | 設(shè)置接收緩沖區(qū)大小的大小。 該值必須大于 0。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 TCP 錯誤。 |
IllegalArgumentException | 如果值為 0 或為負(fù)數(shù)。 |
public int getReceiveBufferSize() throws SocketException
獲取此 ServerSocket 的 SocketOptions#SO_RCVBUF 選項的值,即用于從該 ServerSocket 接受的套接字的建議緩沖區(qū)大小。
注意,在接受的套接字中實際設(shè)置的值是通過調(diào)用 Socket#getReceiveBufferSize() 確定的。
返回:
此 Socket 的 SocketOptions#SO_RCVBUF 選項的值。
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 TCP 錯誤。 |
public void setPerformancePreferences(int connectionTime, int latency, int bandwidth)
設(shè)置此 ServerSocket 的性能首選項。
套接字默認(rèn)使用 TCP/IP 協(xié)議。一些實現(xiàn)可能會提供與 TCP/IP 具有不同性能特征的替代協(xié)議。此方法允許應(yīng)用程序表達(dá)自己的偏好,即當(dāng)實現(xiàn)從可用協(xié)議中進(jìn)行選擇時應(yīng)如何進(jìn)行這些權(quán)衡。
性能偏好由三個整數(shù)描述,其值表示短連接時間、低延遲和高帶寬的相對重要性。整數(shù)的絕對值無關(guān)緊要;為了選擇一個協(xié)議,這些值被簡單地比較,較大的值表示更強(qiáng)的偏好。例如,如果應(yīng)用程序更喜歡短連接時間而不是低延遲和高帶寬,那么它可以使用值 (1, 0, 0) 調(diào)用此方法。如果應(yīng)用程序更喜歡高帶寬而不是低延遲,以及低延遲而不是短連接時間,那么它可以使用值 (0, 1, 2) 調(diào)用此方法。
綁定此套接字后調(diào)用此方法將無效。這意味著為了使用此功能,需要使用無參數(shù)構(gòu)造函數(shù)創(chuàng)建套接字。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
connectionTime | 表示短連接時間的相對重要性的 int |
latency | 一個表示低延遲相對重要性的 int |
bandwidth | 表示高帶寬相對重要性的 int |
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: