鴻蒙OS ServerSocket

2022-06-13 16:06 更新

ServerSocket

java.lang.Object

|---java.net.ServerSocket

public class ServerSocket
extends Object
implements Closeable

此類(lèi)實(shí)現(xiàn)服務(wù)器套接字。 服務(wù)器套接字等待通過(guò)網(wǎng)絡(luò)進(jìn)入的請(qǐng)求。 它根據(jù)該請(qǐng)求執(zhí)行一些操作,然后可能將結(jié)果返回給請(qǐng)求者。

服務(wù)器套接字的實(shí)際工作由 SocketImpl 類(lèi)的實(shí)例執(zhí)行。 應(yīng)用程序可以更改創(chuàng)建套接字實(shí)現(xiàn)的套接字工廠,以將其自身配置為創(chuàng)建適合本地防火墻的套接字。

構(gòu)造函數(shù)摘要

構(gòu)造函數(shù) 描述
ServerSocket() 創(chuàng)建一個(gè)未綁定的服務(wù)器套接字。
ServerSocket(int port) 創(chuàng)建一個(gè)綁定到指定端口的服務(wù)器套接字。
ServerSocket(int port, int backlog) 創(chuàng)建一個(gè)服務(wù)器套接字并將其綁定到指定的本地端口號(hào),并具有指定的 backlog。
ServerSocket(int port, int backlog, InetAddress bindAddr) 創(chuàng)建具有指定端口、偵聽(tīng)積壓和要綁定的本地 IP 地址的服務(wù)器。

方法總結(jié)

修飾符和類(lèi)型 方法 描述
Socket accept() 偵聽(tīng)要與此套接字建立的連接并接受它。
void bind(SocketAddress endpoint) 將 ServerSocket 綁定到特定地址(IP 地址和端口號(hào))。
void bind(SocketAddress endpoint, int backlog) 將 ServerSocket 綁定到特定地址(IP 地址和端口號(hào))。
void close() 關(guān)閉此套接字。
ServerSocketChannel getChannel() 返回與此套接字關(guān)聯(lián)的唯一 ServerSocketChannel 對(duì)象(如果有)。
InetAddress getInetAddress() 返回此服務(wù)器套接字的本地地址。
int getLocalPort() 返回此套接字正在偵聽(tīng)的端口號(hào)。
SocketAddress getLocalSocketAddress() 返回此套接字綁定到的端點(diǎn)的地址。
int getReceiveBufferSize() 獲取此 ServerSocket 的 SocketOptions#SO_RCVBUF 選項(xiàng)的值,即用于從該 ServerSocket 接受的套接字的建議緩沖區(qū)大小。
boolean getReuseAddress() 測(cè)試 SocketOptions#SO_REUSEADDR 是否啟用。
int getSoTimeout() 檢索 SocketOptions#SO_TIMEOUT 的設(shè)置。
protected void implAccept(Socket s) ServerSocket 的子類(lèi)使用此方法覆蓋 accept() 以返回它們自己的套接字子類(lèi)。
boolean isBound() 返回 ServerSocket 的綁定狀態(tài)。
boolean isClosed() 返回 ServerSocket 的關(guān)閉狀態(tài)。
void setPerformancePreferences(int connectionTime, int latency, int bandwidth) 設(shè)置此 ServerSocket 的性能首選項(xiàng)。
void setReceiveBufferSize(int size) 為從此 ServerSocket 接受的套接字設(shè)置 SocketOptions#SO_RCVBUF 選項(xiàng)的默認(rèn)建議值。
void setReuseAddress(boolean on) 啟用/禁用 SocketOptions#SO_REUSEADDR 套接字選項(xiàng)。
static void setSocketFactory(SocketImplFactory fac) 為應(yīng)用程序設(shè)置服務(wù)器套接字實(shí)現(xiàn)工廠。
void setSoTimeout(int timeout) 使用指定的超時(shí)啟用/禁用 SocketOptions#SO_TIMEOUT,以毫秒為單位。
String toString() 以 String 形式返回此套接字的實(shí)現(xiàn)地址和實(shí)現(xiàn)端口。
從類(lèi) java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

構(gòu)造函數(shù)詳細(xì)信息

ServerSocket

public ServerSocket() throws IOException

創(chuàng)建一個(gè)未綁定的服務(wù)器套接字。

Throws:

Throw名稱(chēng) Throw描述
IOException 打開(kāi)套接字時(shí)出現(xiàn) IO 錯(cuò)誤。

ServerSocket

public ServerSocket(int port) throws IOException

創(chuàng)建一個(gè)綁定到指定端口的服務(wù)器套接字。 端口號(hào) 0 表示端口號(hào)是自動(dòng)分配的,通常來(lái)自臨時(shí)端口范圍。 然后可以通過(guò)調(diào)用 getLocalPort 檢索此端口號(hào)。

傳入連接指示(連接請(qǐng)求)的最大隊(duì)列長(zhǎng)度設(shè)置為 50。如果在隊(duì)列已滿(mǎn)時(shí)連接指示到達(dá),則拒絕連接。

如果應(yīng)用程序指定了服務(wù)器套接字工廠,則調(diào)用該工廠的 createSocketImpl 方法來(lái)創(chuàng)建實(shí)際的套接字實(shí)現(xiàn)。 否則會(huì)創(chuàng)建一個(gè)“普通”套接字。

如果有安全管理器,則調(diào)用其 checkListen 方法,并將端口參數(shù)作為其參數(shù),以確保允許該操作。 這可能會(huì)導(dǎo)致 SecurityException。

參數(shù):

參數(shù)名稱(chēng) 參數(shù)描述
port 端口號(hào),或 0 使用自動(dòng)分配的端口號(hào)。

Throws:

Throw名稱(chēng) Throw描述
IOException 如果在打開(kāi)套接字時(shí)發(fā)生 I/O 錯(cuò)誤。
SecurityException 如果安全管理器存在并且其 checkListen 方法不允許該操作。
IllegalArgumentException 如果端口參數(shù)超出指定的有效端口值范圍,即介于 0 和 65535 之間(包括 0 和 65535)。

ServerSocket

public ServerSocket(int port, int backlog) throws IOException

創(chuàng)建一個(gè)服務(wù)器套接字并將其綁定到指定的本地端口號(hào),并具有指定的 backlog。端口號(hào) 0 表示端口號(hào)是自動(dòng)分配的,通常來(lái)自臨時(shí)端口范圍。然后可以通過(guò)調(diào)用 getLocalPort 檢索此端口號(hào)。

傳入連接指示(連接請(qǐng)求)的最大隊(duì)列長(zhǎng)度設(shè)置為 backlog 參數(shù)。如果隊(duì)列滿(mǎn)時(shí)有連接指示到達(dá),則拒絕連接。

如果應(yīng)用程序指定了服務(wù)器套接字工廠,則調(diào)用該工廠的 createSocketImpl 方法來(lái)創(chuàng)建實(shí)際的套接字實(shí)現(xiàn)。否則會(huì)創(chuàng)建一個(gè)“普通”套接字。

如果有安全管理器,則調(diào)用其 checkListen 方法,并將端口參數(shù)作為其參數(shù),以確保允許該操作。這可能會(huì)導(dǎo)致 SecurityException。 backlog 參數(shù)是套接字上請(qǐng)求的最大掛起連接數(shù)。它的確切語(yǔ)義是特定于實(shí)現(xiàn)的。特別地,實(shí)現(xiàn)可以強(qiáng)加最大長(zhǎng)度或者可以選擇完全忽略參數(shù)。提供的值應(yīng)大于 0。如果小于或等于 0,則將使用特定于實(shí)現(xiàn)的默認(rèn)值。

參數(shù):

參數(shù)名稱(chēng) 參數(shù)描述
port 端口號(hào),或 0 使用自動(dòng)分配的端口號(hào)。
backlog 請(qǐng)求的傳入連接隊(duì)列的最大長(zhǎng)度。

Throws:

Throw名稱(chēng) Throw描述
IOException 如果在打開(kāi)套接字時(shí)發(fā)生 I/O 錯(cuò)誤。
SecurityException 如果安全管理器存在并且其 checkListen 方法不允許該操作。
IllegalArgumentException 如果端口參數(shù)超出指定的有效端口值范圍,即介于 0 和 65535 之間(包括 0 和 65535)。

ServerSocket

public ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException

創(chuàng)建具有指定端口、偵聽(tīng)積壓和要綁定的本地 IP 地址的服務(wù)器。 bindAddr 參數(shù)可用于多宿主主機(jī)上的 ServerSocket,它只接受對(duì)其地址之一的連接請(qǐng)求。如果 bindAddr 為空,它將默認(rèn)接受任何/所有本地地址上的連接。端口必須介于 0 和 65535 之間(包括 0 和 65535)。端口號(hào) 0 表示端口號(hào)是自動(dòng)分配的,通常來(lái)自臨時(shí)端口范圍。然后可以通過(guò)調(diào)用 getLocalPort 檢索此端口號(hào)。

如果有安全管理器,則此方法調(diào)用其 checkListen 方法,并將端口參數(shù)作為其參數(shù),以確保允許該操作。這可能會(huì)導(dǎo)致 SecurityException。 backlog 參數(shù)是套接字上請(qǐng)求的最大掛起連接數(shù)。它的確切語(yǔ)義是特定于實(shí)現(xiàn)的。特別地,實(shí)現(xiàn)可以強(qiáng)加最大長(zhǎng)度或者可以選擇完全忽略參數(shù)。提供的值應(yīng)大于 0。如果小于或等于 0,則將使用特定于實(shí)現(xiàn)的默認(rèn)值。

參數(shù):

參數(shù)名稱(chēng) 參數(shù)描述
port 端口號(hào),或 0 使用自動(dòng)分配的端口號(hào)。
backlog 請(qǐng)求的傳入連接隊(duì)列的最大長(zhǎng)度。
bindAddr 服務(wù)器將綁定到的本地 InetAddress

Throws:

Throw名稱(chēng) Throw描述
SecurityException 如果安全管理器存在并且其 checkListen 方法不允許該操作。
IOException 如果在打開(kāi)套接字時(shí)發(fā)生 I/O 錯(cuò)誤。
IllegalArgumentException 如果端口參數(shù)超出指定的有效端口值范圍,即介于 0 和 65535 之間(包括 0 和 65535)。

方法詳情

bind

public void bind(SocketAddress endpoint) throws IOException

將 ServerSocket 綁定到特定地址(IP 地址和端口號(hào))。

如果地址為空,那么系統(tǒng)將選擇一個(gè)臨時(shí)端口和一個(gè)有效的本地地址來(lái)綁定套接字。

參數(shù):

參數(shù)名稱(chēng) 參數(shù)描述
endpoint 要綁定的 IP 地址和端口號(hào)。

Throws:

Throw名稱(chēng) Throw描述
IOException 如果綁定操作失敗,或者套接字已經(jīng)綁定。
SecurityException 如果存在 SecurityManager 并且其 checkListen 方法不允許該操作。
IllegalArgumentException 如果端點(diǎn)是此套接字不支持的 SocketAddress 子類(lèi)

bind

public void bind(SocketAddress endpoint, int backlog) throws IOException

將 ServerSocket 綁定到特定地址(IP 地址和端口號(hào))。

如果地址為空,那么系統(tǒng)將選擇一個(gè)臨時(shí)端口和一個(gè)有效的本地地址來(lái)綁定套接字。

backlog 參數(shù)是套接字上請(qǐng)求的最大掛起連接數(shù)。 它的確切語(yǔ)義是特定于實(shí)現(xiàn)的。 特別地,實(shí)現(xiàn)可以強(qiáng)加最大長(zhǎng)度或者可以選擇完全忽略參數(shù)。 提供的值應(yīng)大于 0。如果小于或等于 0,則將使用特定于實(shí)現(xiàn)的默認(rèn)值。

參數(shù):

參數(shù)名稱(chēng) 參數(shù)描述
endpoint 要綁定的 IP 地址和端口號(hào)。
backlog 請(qǐng)求的傳入連接隊(duì)列的最大長(zhǎng)度。

Throws:

Throw名稱(chēng) Throw描述
IOException 如果綁定操作失敗,或者套接字已經(jīng)綁定。
SecurityException 如果存在 SecurityManager 并且其 checkListen 方法不允許該操作。
IllegalArgumentException 如果端點(diǎn)是此套接字不支持的 SocketAddress 子類(lèi)

getInetAddress

public InetAddress getInetAddress()

返回此服務(wù)器套接字的本地地址。

如果socket在關(guān)閉之前就綁定了,那么這個(gè)方法會(huì)在socket關(guān)閉后繼續(xù)返回本地地址。

如果設(shè)置了安全管理器,則使用本地地址和 -1 作為其參數(shù)調(diào)用其 checkConnect 方法,以查看是否允許該操作。 如果不允許該操作,則返回 InetAddress#getLoopbackAddress 地址。

返回:

此套接字綁定到的地址,如果安全管理器拒絕,則返回環(huán)回地址,如果套接字未綁定,則返回 null。

getLocalPort

public int getLocalPort()

返回此套接字正在偵聽(tīng)的端口號(hào)。

如果套接字在關(guān)閉之前已綁定,則此方法將在套接字關(guān)閉后繼續(xù)返回端口號(hào)。

返回:

此套接字正在偵聽(tīng)的端口號(hào),如果尚未綁定套接字,則為 -1。

getLocalSocketAddress

public SocketAddress getLocalSocketAddress()

返回此套接字綁定到的端點(diǎn)的地址。

如果套接字在關(guān)閉之前已綁定,則該方法將在套接字關(guān)閉后繼續(xù)返回端點(diǎn)的地址。

如果設(shè)置了安全管理器,則使用本地地址和 -1 作為其參數(shù)調(diào)用其 checkConnect 方法,以查看是否允許該操作。 如果不允許該操作,則返回代表 InetAddress#getLoopbackAddress 地址和套接字綁定的本地端口的 SocketAddress。

返回:

表示此套接字的本地端點(diǎn)的 SocketAddress,如果安全管理器拒絕,則表示環(huán)回地址的 SocketAddress,如果尚未綁定套接字,則返回 null。

accept

public Socket accept() throws IOException

偵聽(tīng)要與此套接字建立的連接并接受它。 該方法阻塞,直到建立連接。

創(chuàng)建一個(gè)新的 Socket s,如果有安全管理器,則使用 s.getInetAddress().getHostAddress() 和 s.getPort() 作為其參數(shù)調(diào)用安全管理器的 checkAccept 方法,以確保允許操作。 這可能會(huì)導(dǎo)致 SecurityException。

返回:

新的 Socket

Throws:

Throw名稱(chēng) Throw描述
IOException 如果在等待連接時(shí)發(fā)生 I/O 錯(cuò)誤。
SecurityException 如果存在安全管理器并且其 checkAccept 方法不允許該操作。
SocketTimeoutException 如果先前使用 setSoTimeout 設(shè)置了超時(shí)并且已達(dá)到超時(shí)。
IllegalBlockingModeException 如果此套接字有關(guān)聯(lián)的通道,則通道處于非阻塞模式,并且沒(méi)有準(zhǔn)備好接受的連接

implAccept

protected final void implAccept(Socket s) throws IOException

ServerSocket 的子類(lèi)使用此方法覆蓋 accept() 以返回它們自己的套接字子類(lèi)。 所以 FooServerSocket 通常會(huì)給這個(gè)方法一個(gè)空的 FooSocket。 從 implAccept 返回時(shí),F(xiàn)ooSocket 將連接到客戶(hù)端。

參數(shù):

參數(shù)名稱(chēng) 參數(shù)描述
s 套接字

Throws:

Throw名稱(chēng) Throw描述
IllegalBlockingModeException 如果此套接字具有關(guān)聯(lián)的通道,并且該通道處于非阻塞模式
IOException 如果在等待連接時(shí)發(fā)生 I/O 錯(cuò)誤。

close

public void close() throws IOException

關(guān)閉此套接字。 當(dāng)前在 accept() 中阻塞的任何線程都會(huì)拋出 SocketException。

如果此套接字具有關(guān)聯(lián)的通道,則該通道也將關(guān)閉。

指定者:

在接口 AutoCloseable 中關(guān)閉

指定者:

在接口Closeable中關(guān)閉

Throws:

Throw名稱(chēng) Throw描述
IOException 如果關(guān)閉套接字時(shí)發(fā)生 I/O 錯(cuò)誤。

getChannel

public ServerSocketChannel getChannel()

返回與此套接字關(guān)聯(lián)的唯一 ServerSocketChannel 對(duì)象(如果有)。

當(dāng)且僅當(dāng)通道本身是通過(guò) ServerSocketChannel.open 方法創(chuàng)建時(shí),服務(wù)器套接字才會(huì)有通道。

返回:

與此套接字關(guān)聯(lián)的服務(wù)器套接字通道,如果此套接字不是為通道創(chuàng)建的,則為 null

isBound

public boolean isBound()

返回 ServerSocket 的綁定狀態(tài)。

返回:

如果 ServerSocket 成功綁定到地址,則為 true

isClosed

public boolean isClosed()

返回 ServerSocket 的關(guān)閉狀態(tài)。

返回:

如果套接字已關(guān)閉,則為 true

setSoTimeout

public void setSoTimeout(int timeout) throws SocketException

使用指定的超時(shí)啟用/禁用 SocketOptions#SO_TIMEOUT,以毫秒為單位。 將此選項(xiàng)設(shè)置為非零超時(shí),對(duì)此 ServerSocket 的 accept() 調(diào)用將僅阻塞此時(shí)間量。 如果超時(shí)到期,則會(huì)引發(fā) java.net.SocketTimeoutException,盡管 ServerSocket 仍然有效。 必須在進(jìn)入阻塞操作之前啟用該選項(xiàng)才能生效。 超時(shí)必須 > 0。超時(shí)為零被解釋為無(wú)限超時(shí)。

參數(shù):

參數(shù)名稱(chēng) 參數(shù)描述
timeout 指定的超時(shí)時(shí)間,以毫秒為單位

Throws:

Throw名稱(chēng) Throw描述
SocketException 如果底層協(xié)議有錯(cuò)誤,例如 TCP 錯(cuò)誤。

getSoTimeout

public int getSoTimeout() throws IOException

檢索 SocketOptions#SO_TIMEOUT 的設(shè)置。 返回 0 表示該選項(xiàng)被禁用(即無(wú)限超時(shí))。

返回:

SocketOptions#SO_TIMEOUT 值

Throws:

Throw名稱(chēng) Throw描述
IOException 如果發(fā)生 I/O 錯(cuò)誤

setReuseAddress

public void setReuseAddress(boolean on) throws SocketException

啟用/禁用 SocketOptions#SO_REUSEADDR 套接字選項(xiàng)。

當(dāng) TCP 連接關(guān)閉時(shí),連接可能會(huì)在連接關(guān)閉后的一段時(shí)間內(nèi)保持超時(shí)狀態(tài)(通常稱(chēng)為 TIME_WAIT 狀態(tài)或 2MSL 等待狀態(tài))。 對(duì)于使用眾所周知的套接字地址或端口的應(yīng)用程序,如果存在涉及套接字地址或端口的處于超時(shí)狀態(tài)的連接,則可能無(wú)法將套接字綁定到所需的 SocketAddress。

在使用 bind(java.net.SocketAddress) 綁定套接字之前啟用 SocketOptions#SO_REUSEADDR 允許綁定套接字,即使先前的連接處于超時(shí)狀態(tài)。

創(chuàng)建 ServerSocket 時(shí),未定義 SocketOptions#SO_REUSEADDR 的初始設(shè)置。 應(yīng)用程序可以使用 getReuseAddress() 來(lái)確定 SocketOptions#SO_REUSEADDR 的初始設(shè)置。

未定義套接字綁定后啟用或禁用 SocketOptions#SO_REUSEADDR 時(shí)的行為。

參數(shù):

參數(shù)名稱(chēng) 參數(shù)描述
on 是否啟用或禁用套接字選項(xiàng)

Throws:

Throw名稱(chēng) Throw描述
SocketException 如果啟用或禁用 SocketOptions#SO_REUSEADDR 套接字選項(xiàng)發(fā)生錯(cuò)誤,或者套接字已關(guān)閉。

getReuseAddress

public boolean getReuseAddress() throws SocketException

測(cè)試 SocketOptions#SO_REUSEADDR 是否啟用。

返回:

一個(gè)布爾值,指示是否啟用 SocketOptions#SO_REUSEADDR。

Throws:

Throw名稱(chēng) Throw描述
SocketException 如果底層協(xié)議有錯(cuò)誤,例如 TCP 錯(cuò)誤。

toString

public String toString()

以 String 形式返回此套接字的實(shí)現(xiàn)地址和實(shí)現(xiàn)端口。

如果設(shè)置了安全管理器,則使用本地地址和 -1 作為其參數(shù)調(diào)用其 checkConnect 方法,以查看是否允許該操作。 如果不允許該操作,則返回一個(gè)表示 InetAddress#getLoopbackAddress 地址的 InetAddress 作為實(shí)現(xiàn)地址。

覆蓋:

類(lèi) Object 中的 toString

返回:

此套接字的字符串表示形式。

setSocketFactory

public static void setSocketFactory(SocketImplFactory fac) throws IOException

為應(yīng)用程序設(shè)置服務(wù)器套接字實(shí)現(xiàn)工廠。 工廠只能指定一次。

當(dāng)應(yīng)用程序創(chuàng)建新的服務(wù)器套接字時(shí),會(huì)調(diào)用套接字實(shí)現(xiàn)工廠的 createSocketImpl 方法來(lái)創(chuàng)建實(shí)際的套接字實(shí)現(xiàn)。

除非已經(jīng)設(shè)置了工廠,否則將 null 傳遞給方法是無(wú)操作的。

如果有安全管理器,該方法首先調(diào)用安全管理器的 checkSetFactory 方法,確保操作被允許。 這可能會(huì)導(dǎo)致 SecurityException。

參數(shù):

參數(shù)名稱(chēng) 參數(shù)描述
fac 想要的工廠。

Throws:

Throw名稱(chēng) Throw描述
IOException 如果設(shè)置套接字工廠時(shí)發(fā)生 I/O 錯(cuò)誤。
SocketException 如果工廠已經(jīng)定義。
SecurityException 如果存在安全管理器并且其 checkSetFactory 方法不允許該操作。

setReceiveBufferSize

public void setReceiveBufferSize(int size) throws SocketException

為從此 ServerSocket 接受的套接字設(shè)置 SocketOptions#SO_RCVBUF 選項(xiàng)的默認(rèn)建議值。在接受的套接字中實(shí)際設(shè)置的值必須在接受()返回套接字后通過(guò)調(diào)用Socket#getReceiveBufferSize()來(lái)確定。

SocketOptions#SO_RCVBUF 的值既用于設(shè)置內(nèi)部套接字接收緩沖區(qū)的大小,也用于設(shè)置通告給遠(yuǎn)程對(duì)等方的 TCP 接收窗口的大小。

隨后可以通過(guò)調(diào)用 Socket#setReceiveBufferSize(int) 來(lái)更改該值。但是,如果應(yīng)用程序希望允許大于 64K 字節(jié)的接收窗口(如 RFC1323 所定義),則必須在 ServerSocket 中設(shè)置建議的值,然后才能將其綁定到本地地址。這意味著,必須使用無(wú)參數(shù)構(gòu)造函數(shù)創(chuàng)建 ServerSocket,然后必須調(diào)用 setReceiveBufferSize(),最后通過(guò)調(diào)用 bind() 將 ServerSocket 綁定到地址。

不這樣做不會(huì)導(dǎo)致錯(cuò)誤,并且緩沖區(qū)大小可能會(huì)設(shè)置為請(qǐng)求的值,但從該 ServerSocket 接受的套接字中的 TCP 接收窗口將不大于 64K 字節(jié)。

參數(shù):

參數(shù)名稱(chēng) 參數(shù)描述
size 設(shè)置接收緩沖區(qū)大小的大小。 該值必須大于 0。

Throws:

Throw名稱(chēng) Throw描述
SocketException 如果底層協(xié)議有錯(cuò)誤,例如 TCP 錯(cuò)誤。
IllegalArgumentException 如果值為 0 或?yàn)樨?fù)數(shù)。

getReceiveBufferSize

public int getReceiveBufferSize() throws SocketException

獲取此 ServerSocket 的 SocketOptions#SO_RCVBUF 選項(xiàng)的值,即用于從該 ServerSocket 接受的套接字的建議緩沖區(qū)大小。

注意,在接受的套接字中實(shí)際設(shè)置的值是通過(guò)調(diào)用 Socket#getReceiveBufferSize() 確定的。

返回:

此 Socket 的 SocketOptions#SO_RCVBUF 選項(xiàng)的值。

Throws:

Throw名稱(chēng) Throw描述
SocketException 如果底層協(xié)議有錯(cuò)誤,例如 TCP 錯(cuò)誤。

setPerformancePreferences

public void setPerformancePreferences(int connectionTime, int latency, int bandwidth)

設(shè)置此 ServerSocket 的性能首選項(xiàng)。

套接字默認(rèn)使用 TCP/IP 協(xié)議。一些實(shí)現(xiàn)可能會(huì)提供與 TCP/IP 具有不同性能特征的替代協(xié)議。此方法允許應(yīng)用程序表達(dá)自己的偏好,即當(dāng)實(shí)現(xiàn)從可用協(xié)議中進(jìn)行選擇時(shí)應(yīng)如何進(jìn)行這些權(quán)衡。

性能偏好由三個(gè)整數(shù)描述,其值表示短連接時(shí)間、低延遲和高帶寬的相對(duì)重要性。整數(shù)的絕對(duì)值無(wú)關(guān)緊要;為了選擇一個(gè)協(xié)議,這些值被簡(jiǎn)單地比較,較大的值表示更強(qiáng)的偏好。例如,如果應(yīng)用程序更喜歡短連接時(shí)間而不是低延遲和高帶寬,那么它可以使用值 (1, 0, 0) 調(diào)用此方法。如果應(yīng)用程序更喜歡高帶寬而不是低延遲,以及低延遲而不是短連接時(shí)間,那么它可以使用值 (0, 1, 2) 調(diào)用此方法。

綁定此套接字后調(diào)用此方法將無(wú)效。這意味著為了使用此功能,需要使用無(wú)參數(shù)構(gòu)造函數(shù)創(chuàng)建套接字。

參數(shù):

參數(shù)名稱(chēng) 參數(shù)描述
connectionTime 表示短連接時(shí)間的相對(duì)重要性的 int
latency 一個(gè)表示低延遲相對(duì)重要性的 int
bandwidth 表示高帶寬相對(duì)重要性的 int
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)