日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
創(chuàng)新互聯(lián)鴻蒙OS教程:鴻蒙OS Socket

Socket

分宜網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)于2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

java.lang.Object

|---java.net.Socket

public class Socket
extends Object
implements Closeable

此類實(shí)現(xiàn)客戶端套接字(也稱為“套接字”)。 套接字是兩臺(tái)機(jī)器之間通信的端點(diǎn)。

套接字的實(shí)際工作由 SocketImpl 類的實(shí)例執(zhí)行。 應(yīng)用程序通過(guò)更改創(chuàng)建套接字實(shí)現(xiàn)的套接字工廠,可以將自己配置為創(chuàng)建適合本地防火墻的套接字。

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

修飾符構(gòu)造函數(shù)描述
Socket()創(chuàng)建一個(gè)未連接的套接字,系統(tǒng)默認(rèn)類型為 SocketImpl。
Socket(String host, int port)創(chuàng)建一個(gè)流套接字并將其連接到指定主機(jī)上的指定端口號(hào)。
Socket(String host, int port, boolean stream)已棄用。 使用 DatagramSocket 代替 UDP 傳輸。
Socket(String host, int port, InetAddress localAddr, int localPort)創(chuàng)建一個(gè)套接字并將其連接到指定遠(yuǎn)程端口上的指定遠(yuǎn)程主機(jī)。
Socket(InetAddress address, int port)創(chuàng)建一個(gè)流套接字并將其連接到指定 IP 地址的指定端口號(hào)。
Socket(InetAddress host, int port, boolean stream)已棄用。 使用 DatagramSocket 代替 UDP 傳輸。
Socket(InetAddress address, int port, InetAddress localAddr, int localPort)創(chuàng)建一個(gè)套接字并將其連接到指定遠(yuǎn)程端口上的指定遠(yuǎn)程地址。
Socket(Proxy proxy)創(chuàng)建一個(gè)未連接的套接字,指定代理的類型(如果有),無(wú)論任何其他設(shè)置如何,都應(yīng)使用該類型。
protectedSocket(SocketImpl impl)使用用戶指定的 SocketImpl 創(chuàng)建一個(gè)未連接的 Socket。

方法總結(jié)

修飾符和類型方法描述
voidbind(SocketAddress bindpoint)將套接字綁定到本地地址。
voidclose()關(guān)閉此套接字。
voidconnect(SocketAddress endpoint)將此套接字連接到服務(wù)器。
voidconnect(SocketAddress endpoint, int timeout)將此套接字連接到具有指定超時(shí)值的服務(wù)器。
SocketChannelgetChannel()返回與此套接字關(guān)聯(lián)的唯一 SocketChannel 對(duì)象(如果有)。
InetAddressgetInetAddress()返回套接字連接的地址。
InputStreamgetInputStream()返回此套接字的輸入流。
booleangetKeepAlive()測(cè)試是否啟用了 SocketOptions#SO_KEEPALIVE。
InetAddressgetLocalAddress()獲取套接字綁定的本地地址。
intgetLocalPort()返回此套接字綁定到的本地端口號(hào)。
SocketAddressgetLocalSocketAddress()返回此套接字綁定到的端點(diǎn)的地址。
booleangetOOBInline()測(cè)試是否啟用了 SocketOptions#SO_OOBINLINE。
OutputStreamgetOutputStream()返回此套接字的輸出流。
intgetPort()返回此套接字連接到的遠(yuǎn)程端口號(hào)。
intgetReceiveBufferSize()獲取此 Socket 的 SocketOptions#SO_RCVBUF 選項(xiàng)的值,即平臺(tái)用于在此 Socket 上輸入的緩沖區(qū)大小。
SocketAddressgetRemoteSocketAddress()返回此套接字連接到的端點(diǎn)的地址,如果未連接,則返回 null。
booleangetReuseAddress()測(cè)試 SocketOptions#SO_REUSEADDR 是否啟用。
intgetSendBufferSize()獲取此 Socket 的 SocketOptions#SO_SNDBUF 選項(xiàng)的值,即平臺(tái)用于在此 Socket 上輸出的緩沖區(qū)大小。
intgetSoLinger()返回 SocketOptions#SO_LINGER 的設(shè)置。
intgetSoTimeout()返回 SocketOptions#SO_TIMEOUT 的設(shè)置。
booleangetTcpNoDelay()測(cè)試是否啟用了 SocketOptions#TCP_NODELAY。
intgetTrafficClass()獲取從此 Socket 發(fā)送的數(shù)據(jù)包的 IP 標(biāo)頭中的流量類別或服務(wù)類型
booleanisBound()返回套接字的綁定狀態(tài)。
booleanisClosed()返回套接字的關(guān)閉狀態(tài)。
booleanisConnected()返回套接字的連接狀態(tài)。
booleanisInputShutdown()返回套接字連接的讀半部分是否關(guān)閉。
booleanisOutputShutdown()返回套接字連接的寫半部分是否關(guān)閉。
voidsendUrgentData(int data)在套接字上發(fā)送一個(gè)字節(jié)的緊急數(shù)據(jù)。
voidsetKeepAlive(boolean on)啟用/禁用 SocketOptions#SO_KEEPALIVE。
voidsetOOBInline(boolean on)啟用/禁用 SocketOptions#SO_OOBINLINE(接收 TCP 緊急數(shù)據(jù)) 默認(rèn)情況下,禁用此選項(xiàng),并且在套接字上接收到的 TCP 緊急數(shù)據(jù)被靜默丟棄。
voidsetPerformancePreferences(int connectionTime, int latency, int bandwidth)設(shè)置此套接字的性能首選項(xiàng)。
voidsetReceiveBufferSize(int size)將 SocketOptions#SO_RCVBUF 選項(xiàng)設(shè)置為此 Socket 的指定值。
voidsetReuseAddress(boolean on)啟用/禁用 SocketOptions#SO_REUSEADDR 套接字選項(xiàng)。
voidsetSendBufferSize(int size)將 SocketOptions#SO_SNDBUF 選項(xiàng)設(shè)置為此 Socket 的指定值。
static voidsetSocketImplFactory(SocketImplFactory fac)為應(yīng)用程序設(shè)置客戶端套接字實(shí)現(xiàn)工廠。
voidsetSoLinger(boolean on, int linger)使用指定的延遲時(shí)間(以秒為單位)啟用/禁用 SocketOptions#SO_LINGER。
voidsetSoTimeout(int timeout)使用指定的超時(shí)啟用/禁用 SocketOptions#SO_TIMEOUT,以毫秒為單位。
voidsetTcpNoDelay(boolean on)啟用/禁用 SocketOptions#TCP_NODELAY(禁用/啟用 Nagle 算法)。
voidsetTrafficClass(int tc)為從此 Socket 發(fā)送的數(shù)據(jù)包設(shè)置 IP 標(biāo)頭中的流量類別或服務(wù)類型八位字節(jié)。
voidshutdownInput()將此套接字的輸入流放在“流的末尾”。
voidshutdownOutput()禁用此套接字的輸出流。
StringtoString()將此套接字轉(zhuǎn)換為字符串。
從類 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

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

Socket

public Socket()

創(chuàng)建一個(gè)未連接的套接字,系統(tǒng)默認(rèn)類型為 SocketImpl。

Socket

public Socket(Proxy proxy)

創(chuàng)建一個(gè)未連接的套接字,指定代理的類型(如果有),無(wú)論任何其他設(shè)置如何,都應(yīng)使用該類型。

如果存在安全管理器,則調(diào)用其 checkConnect 方法,并使用代理主機(jī)地址和端口號(hào)作為其參數(shù)。 這可能會(huì)導(dǎo)致 SecurityException。

例子:

  • Socket s = new Socket(Proxy.NO_PROXY); 將創(chuàng)建一個(gè)普通套接字,忽略任何其他代理配置。
  • Socket s = new Socket(new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("socks.mydom.com", 1080))); 將創(chuàng)建一個(gè)通過(guò)指定的 SOCKS 代理服務(wù)器連接的套接字。

參數(shù):

參數(shù)名稱參數(shù)描述
proxy指定應(yīng)使用哪種代理的代理對(duì)象。

Throws:

Throw名稱Throw描述
IllegalArgumentException如果代理的類型無(wú)效或?yàn)榭铡?/td>
SecurityException如果存在安全管理器并且拒絕連接到代理的權(quán)限。

Socket

protected Socket(SocketImpl impl) throws SocketException

使用用戶指定的 SocketImpl 創(chuàng)建一個(gè)未連接的 Socket。

參數(shù):

參數(shù)名稱參數(shù)描述
impl子類希望在 Socket 上使用的 SocketImpl 的實(shí)例。

Throws:

Throw名稱Throw描述
SocketException如果底層協(xié)議有錯(cuò)誤,例如 TCP 錯(cuò)誤。
SecurityException如果 impl 不為 null 并且設(shè)置了安全管理器,并且其 checkPermission 方法不允許 NetPermission("setSocketImpl")。

Socket

public Socket(String host, int port) throws IOException, UnknownHostException

創(chuàng)建一個(gè)流套接字并將其連接到指定主機(jī)上的指定端口號(hào)。

如果指定的主機(jī)為空,則相當(dāng)于將地址指定為 InetAddress.getByName(null)。 也就是說(shuō),相當(dāng)于指定了loopback接口的地址。

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

如果存在安全管理器,則調(diào)用其 checkConnect 方法,并使用主機(jī)地址和端口作為其參數(shù)。 這可能會(huì)導(dǎo)致 SecurityException。

參數(shù):

參數(shù)名稱參數(shù)描述
host主機(jī)名,或 null 用于環(huán)回地址。
port端口號(hào)。

Throws:

Throw名稱Throw描述
UnknownHostException如果無(wú)法確定主機(jī)的 IP 地址。
IOException如果在創(chuàng)建套接字時(shí)發(fā)生 I/O 錯(cuò)誤。
SecurityException如果存在安全管理器并且其 checkConnect 方法不允許該操作。
IllegalArgumentException如果端口參數(shù)超出指定的有效端口值范圍,即介于 0 和 65535 之間(包括 0 和 65535)。

Socket

public Socket(InetAddress address, int port) throws IOException

創(chuàng)建一個(gè)流套接字并將其連接到指定 IP 地址的指定端口號(hào)。

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

如果存在安全管理器,則調(diào)用其 checkConnect 方法,并使用主機(jī)地址和端口作為其參數(shù)。 這可能會(huì)導(dǎo)致 SecurityException。

參數(shù):

參數(shù)名稱參數(shù)描述
addressIP 地址。
port端口號(hào)。

Throws:

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

Socket

public Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException

創(chuàng)建一個(gè)套接字并將其連接到指定遠(yuǎn)程端口上的指定遠(yuǎn)程主機(jī)。 Socket 還將 bind() 到提供的本地地址和端口。

如果指定的主機(jī)為空,則相當(dāng)于將地址指定為 InetAddress.getByName(null)。 也就是說(shuō),相當(dāng)于指定了loopback接口的地址。

本地端口號(hào)為零將使系統(tǒng)在綁定操作中選擇一個(gè)空閑端口。

如果存在安全管理器,則調(diào)用其 checkConnect 方法,并使用主機(jī)地址和端口作為其參數(shù)。 這可能會(huì)導(dǎo)致 SecurityException。

參數(shù):

參數(shù)名稱參數(shù)描述
host遠(yuǎn)程主機(jī)的名稱,或 null 為環(huán)回地址。
port遠(yuǎn)程端口
localAddr套接字綁定到的本地地址,或者對(duì)于 anyLocal 地址為 null。
localPort套接字綁定到的本地端口,或者系統(tǒng)選擇的空閑端口為零。

Throws:

Throw名稱Throw描述
IOException如果在創(chuàng)建套接字時(shí)發(fā)生 I/O 錯(cuò)誤。
SecurityException如果安全管理器存在并且它的 checkConnect 方法不允許連接到目標(biāo),或者它的 checkListen 方法不允許綁定到本地端口。
IllegalArgumentException如果 port 參數(shù)或 localPort 參數(shù)超出指定的有效端口值范圍,即 0 到 65535 之間,包括 0 和 65535。

Socket

public Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException

創(chuàng)建一個(gè)套接字并將其連接到指定遠(yuǎn)程端口上的指定遠(yuǎn)程地址。 Socket 還將 bind() 到提供的本地地址和端口。

如果指定的本地地址為空,則相當(dāng)于將該地址指定為 AnyLocal 地址(請(qǐng)參閱 InetAddress.isAnyLocalAddress())。

本地端口號(hào)為零將使系統(tǒng)在綁定操作中選擇一個(gè)空閑端口。

如果存在安全管理器,則調(diào)用其 checkConnect 方法,并使用主機(jī)地址和端口作為其參數(shù)。 這可能會(huì)導(dǎo)致 SecurityException。

參數(shù):

參數(shù)名稱參數(shù)描述
address遠(yuǎn)程地址
port遠(yuǎn)程端口
localAddr套接字綁定到的本地地址,或者對(duì)于 anyLocal 地址為 null。
localPort套接字綁定到的本地端口或系統(tǒng)選擇的空閑端口為零。

Throws:

Throw名稱Throw描述
IOException如果在創(chuàng)建套接字時(shí)發(fā)生 I/O 錯(cuò)誤。
SecurityException如果安全管理器存在并且它的 checkConnect 方法不允許連接到目標(biāo),或者它的 checkListen 方法不允許綁定到本地端口。
IllegalArgumentException如果 port 參數(shù)或 localPort 參數(shù)超出指定的有效端口值范圍,即 0 到 65535 之間,包括 0 和 65535。
NullPointerException如果地址為空。

Socket

@Deprecated public Socket(String host, int port, boolean stream) throws IOException

已棄用。 使用 DatagramSocket 代替 UDP 傳輸。

創(chuàng)建一個(gè)流套接字并將其連接到指定主機(jī)上的指定端口號(hào)。

如果指定的主機(jī)為空,則相當(dāng)于將地址指定為 InetAddress.getByName(null)。 也就是說(shuō),相當(dāng)于指定了loopback接口的地址。

如果流參數(shù)為真,這將創(chuàng)建一個(gè)流套接字。 如果流參數(shù)為假,它會(huì)創(chuàng)建一個(gè)數(shù)據(jù)報(bào)套接字。

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

如果存在安全管理器,則調(diào)用其 checkConnect 方法,并使用主機(jī)地址和端口作為其參數(shù)。 這可能會(huì)導(dǎo)致 SecurityException。

如果使用 UDP 套接字,則與 TCP/IP 相關(guān)的套接字選項(xiàng)將不適用。

參數(shù):

參數(shù)名稱參數(shù)描述
host主機(jī)名,或 null 用于環(huán)回地址。
port端口號(hào)。
stream一個(gè)布爾值,指示這是流套接字還是數(shù)據(jù)報(bào)套接字。

Throws:

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

Socket

@Deprecated public Socket(InetAddress host, int port, boolean stream) throws IOException

已棄用。 使用 DatagramSocket 代替 UDP 傳輸。

創(chuàng)建一個(gè)套接字并將其連接到指定 IP 地址的指定端口號(hào)。

如果流參數(shù)為真,這將創(chuàng)建一個(gè)流套接字。 如果流參數(shù)為假,它會(huì)創(chuàng)建一個(gè)數(shù)據(jù)報(bào)套接字。

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

如果有安全管理器,則調(diào)用其 checkConnect 方法,并使用 host.getHostAddress() 和 port 作為其參數(shù)。 這可能會(huì)導(dǎo)致 SecurityException。

如果使用 UDP 套接字,則 TCP/IP 相關(guān)的套接字選項(xiàng)將不適用。

參數(shù):

參數(shù)名稱參數(shù)描述
hostIP 地址。
port端口號(hào)。
stream如果為true,則創(chuàng)建一個(gè)流套接字; 否則,創(chuàng)建一個(gè)數(shù)據(jù)報(bào)套接字。

Throws:

Throw名稱Throw描述
IOException如果在創(chuàng)建套接字時(shí)發(fā)生 I/O 錯(cuò)誤。
SecurityException如果存在安全管理器并且其 checkConnect 方法不允許該操作。
IllegalArgumentException如果端口參數(shù)超出指定的有效端口值范圍,即介于 0 和 65535 之間(包括 0 和 65535)。
NullPointerException如果主機(jī)為空。

方法詳情

connect

public void connect(SocketAddress endpoint) throws IOException

將此套接字連接到服務(wù)器。

參數(shù):

參數(shù)名稱參數(shù)描述
endpoint套接字地址

Throws:

Throw名稱Throw描述
IOException如果在連接過(guò)程中發(fā)生錯(cuò)誤
IllegalBlockingModeException如果此套接字具有關(guān)聯(lián)的通道,并且該通道處于非阻塞模式
IllegalArgumentException如果端點(diǎn)為 null 或者是此套接字不支持的 SocketAddress 子類

connect

public void connect(SocketAddress endpoint, int timeout) throws IOException

將此套接字連接到具有指定超時(shí)值的服務(wù)器。 超時(shí)為零被解釋為無(wú)限超時(shí)。 然后連接將阻塞,直到建立或發(fā)生錯(cuò)誤。

參數(shù):

參數(shù)名稱參數(shù)描述
endpoint套接字地址
timeout以毫秒為單位使用的超時(shí)值。

Throws:

Throw名稱Throw描述
IOException如果在連接過(guò)程中發(fā)生錯(cuò)誤
SocketTimeoutException如果超時(shí)在連接之前到期
IllegalBlockingModeException如果此套接字具有關(guān)聯(lián)的通道,并且該通道處于非阻塞模式
IllegalArgumentException如果端點(diǎn)為 null 或者是此套接字不支持的 SocketAddress 子類

bind

public void bind(SocketAddress bindpoint) throws IOException

將套接字綁定到本地地址。

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

參數(shù):

參數(shù)名稱參數(shù)描述
bindpoint要綁定到的 SocketAddress

Throws:

Throw名稱Throw描述
IOException如果綁定操作失敗,或者套接字已經(jīng)綁定。
IllegalArgumentException如果 bindpoint 是此套接字不支持的 SocketAddress 子類
SecurityException如果存在安全管理器并且其 checkListen 方法不允許綁定到本地端口。

getInetAddress

public InetAddress getInetAddress()

返回套接字連接的地址。

如果套接字在關(guān)閉之前已連接,則此方法將在套接字關(guān)閉后繼續(xù)返回已連接的地址。

返回:

此套接字連接到的遠(yuǎn)程 IP 地址,如果套接字未連接,則為 null。

getLocalAddress

public InetAddress getLocalAddress()

獲取套接字綁定的本地地址。

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

返回:

套接字綁定的本地地址,如果安全管理器拒絕,則為環(huán)回地址,或者如果套接字已關(guān)閉或尚未綁定,則為通配符地址。

getPort

public int getPort()

返回此套接字連接到的遠(yuǎn)程端口號(hào)。

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

返回:

此套接字連接到的遠(yuǎn)程端口號(hào),如果套接字尚未連接,則為 0。

getLocalPort

public int getLocalPort()

返回此套接字綁定到的本地端口號(hào)。

如果套接字在關(guān)閉之前已經(jīng)綁定,那么該方法將在套接字關(guān)閉后繼續(xù)返回本地端口號(hào)。

返回:

此套接字綁定到的本地端口號(hào),如果尚未綁定套接字,則為 -1。

getRemoteSocketAddress

public SocketAddress getRemoteSocketAddress()

返回此套接字連接到的端點(diǎn)的地址,如果未連接,則返回 null。

如果套接字在關(guān)閉之前已連接,則此方法將在套接字關(guān)閉后繼續(xù)返回已連接的地址。

返回:

表示此套接字的遠(yuǎn)程端點(diǎn)的 SocketAddress,如果尚未連接,則為 null。

getLocalSocketAddress

public SocketAddress getLocalSocketAddress()

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

如果綁定到由 InetSocketAddress 表示的端點(diǎn)的套接字關(guān)閉,則此方法將在套接字關(guān)閉后繼續(xù)返回 InetSocketAddress。 在這種情況下,返回的 InetSocketAddress 的地址是 InetAddress#isAnyLocalAddress 地址,它的端口是它綁定到的本地端口。

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

返回:

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

getChannel

public SocketChannel getChannel()

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

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

返回:

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

getInputStream

public InputStream getInputStream() throws IOException

返回此套接字的輸入流。

如果此套接字具有關(guān)聯(lián)的通道,則生成的輸入流將其所有操作委托給通道。如果通道處于非阻塞模式,則輸入流的讀取操作將拋出 IllegalBlockingModeException。

在異常情況下,底層連接可能會(huì)被遠(yuǎn)程主機(jī)或網(wǎng)絡(luò)軟件中斷(例如 TCP 連接情況下的連接重置)。當(dāng)網(wǎng)絡(luò)軟件檢測(cè)到斷開(kāi)的連接時(shí),以下內(nèi)容適用于返回的輸入流:-

  • 網(wǎng)絡(luò)軟件可能會(huì)丟棄由套接字緩沖的字節(jié)。沒(méi)有被網(wǎng)絡(luò)軟件丟棄的字節(jié)可以使用 read 來(lái)讀取。
  • 如果套接字上沒(méi)有緩沖的字節(jié),或者所有緩沖的字節(jié)都已被讀取消耗,那么所有后續(xù)的讀取調(diào)用都將拋出 IOException。
  • 如果套接字上沒(méi)有緩沖字節(jié),并且套接字沒(méi)有使用 close 關(guān)閉,則 available 將返回 0。

關(guān)閉返回的 InputStream 將關(guān)閉關(guān)聯(lián)的套接字。

返回:

用于從此套接字讀取字節(jié)的輸入流。

Throws:

Throw名稱Throw描述
IOException如果在創(chuàng)建輸入流時(shí)發(fā)生 I/O 錯(cuò)誤、套接字已關(guān)閉、套接字未連接或套接字輸入已使用 shutdownInput() 關(guān)閉

getOutputStream

public OutputStream getOutputStream() throws IOException

返回此套接字的輸出流。

如果此套接字具有關(guān)聯(lián)的通道,則生成的輸出流將其所有操作委托給通道。 如果通道處于非阻塞模式,則輸出流的寫入操作將引發(fā) IllegalBlockingModeException。

關(guān)閉返回的 OutputStream 將關(guān)閉關(guān)聯(lián)的套接字。

返回:

用于將字節(jié)寫入此套接字的輸出流。

Throws:

Throw名稱Throw描述
IOException如果在創(chuàng)建輸出流時(shí)發(fā)生 I/O 錯(cuò)誤或套接字未連接。

setTcpNoDelay

public void setTcpNoDelay(boolean on) throws SocketException

啟用/禁用 SocketOptions#TCP_NODELAY(禁用/啟用 Nagle 算法)。

參數(shù):

參數(shù)名稱參數(shù)描述
ontrue 啟用 TCP_NODELAY,false 禁用。

Throws:

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

getTcpNoDelay

public boolean getTcpNoDelay() throws SocketException

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

返回:

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

Throws:

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

setSoLinger

public void setSoLinger(boolean on, int linger) throws SocketException

使用指定的延遲時(shí)間(以秒為單位)啟用/禁用 SocketOptions#SO_LINGER。 最大超時(shí)值是特定于平臺(tái)的。 該設(shè)置僅影響套接字關(guān)閉。

參數(shù):

參數(shù)名稱參數(shù)描述
on是否留戀。
linger如果 on 為true,要逗留多久。

Throws:

Throw名稱Throw描述
SocketException如果底層協(xié)議有錯(cuò)誤,例如 TCP 錯(cuò)誤。
IllegalArgumentException如果延遲值為負(fù)。

getSoLinger

public int getSoLinger() throws SocketException

返回 SocketOptions#SO_LINGER 的設(shè)置。 -1 返回意味著該選項(xiàng)被禁用。 該設(shè)置僅影響套接字關(guān)閉。

返回:

SocketOptions#SO_LINGER 的設(shè)置。

Throws:

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

sendUrgentData

public void sendUrgentData(int data) throws IOException

在套接字上發(fā)送一個(gè)字節(jié)的緊急數(shù)據(jù)。 要發(fā)送的字節(jié)是數(shù)據(jù)參數(shù)的最低八位。 緊急字節(jié)在任何先前寫入套接字 OutputStream 之后和任何未來(lái)寫入 OutputStream 之前發(fā)送。

參數(shù):

參數(shù)名稱參數(shù)描述
data要發(fā)送的數(shù)據(jù)字節(jié)

Throws:

Throw名稱Throw描述
IOException如果發(fā)送數(shù)據(jù)時(shí)出錯(cuò)。

setOOBInline

public void setOOBInline(boolean on) throws SocketException

啟用/禁用 SocketOptions#SO_OOBINLINE(接收 TCP 緊急數(shù)據(jù)) 默認(rèn)情況下,禁用此選項(xiàng),并且在套接字上接收到的 TCP 緊急數(shù)據(jù)被靜默丟棄。 如果用戶希望接收緊急數(shù)據(jù),則必須啟用此選項(xiàng)。 啟用后,緊急數(shù)據(jù)將與普通數(shù)據(jù)一起接收。

請(qǐng)注意,僅提供有限的支持來(lái)處理傳入的緊急數(shù)據(jù)。 特別是,不提供傳入緊急數(shù)據(jù)的通知,并且沒(méi)有能力區(qū)分正常數(shù)據(jù)和緊急數(shù)據(jù),除非由更高級(jí)別的協(xié)議提供。

參數(shù):

參數(shù)名稱參數(shù)描述
ontrue 啟用 SocketOptions#SO_OOBINLINE, false 禁用。

Throws:

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

getOOBInline

public boolean getOOBInline() throws SocketException

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

返回:

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

Throws:

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

setSoTimeout

public void setSoTimeout(int timeout) throws SocketException

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

參數(shù):

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

Throws:

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

getSoTimeout

public int getSoTimeout() throws SocketException

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

返回:

SocketOptions#SO_TIMEOUT 的設(shè)置

Throws:

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

setSendBufferSize

public void setSendBufferSize(int size) throws SocketException

將 SocketOptions#SO_SNDBUF 選項(xiàng)設(shè)置為此 Socket 的指定值。 SocketOptions#SO_SNDBUF 選項(xiàng)被平臺(tái)的網(wǎng)絡(luò)代碼用作設(shè)置底層網(wǎng)絡(luò) I/O 緩沖區(qū)大小的提示。

因?yàn)?SocketOptions#SO_SNDBUF 是一個(gè)提示,所以想要驗(yàn)證緩沖區(qū)設(shè)置為多大大小的應(yīng)用程序應(yīng)該調(diào)用 getSendBufferSize()。

參數(shù):

參數(shù)名稱參數(shù)描述
size設(shè)置發(fā)送緩沖區(qū)大小的大小。 該值必須大于 0。

Throws:

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

getSendBufferSize

public int getSendBufferSize() throws SocketException

獲取此 Socket 的 SocketOptions#SO_SNDBUF 選項(xiàng)的值,即平臺(tái)用于在此 Socket 上輸出的緩沖區(qū)大小。

返回:

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

Throws:

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

setReceiveBufferSize

public void setReceiveBufferSize(int size) throws SocketException

將 SocketOptions#SO_RCVBUF 選項(xiàng)設(shè)置為此 Socket 的指定值。 SocketOptions#SO_RCVBUF 選項(xiàng)被平臺(tái)的網(wǎng)絡(luò)代碼用作設(shè)置底層網(wǎng)絡(luò) I/O 緩沖區(qū)大小的提示。

增加接收緩沖區(qū)大小可以提高大容量連接的網(wǎng)絡(luò) I/O 性能,而減小它可以幫助減少傳入數(shù)據(jù)的積壓。

因?yàn)?SocketOptions#SO_RCVBUF 是一個(gè)提示,所以想要驗(yàn)證緩沖區(qū)設(shè)置為多大大小的應(yīng)用程序應(yīng)該調(diào)用 getReceiveBufferSize()。

SocketOptions#SO_RCVBUF 的值也用于設(shè)置通告給遠(yuǎn)程對(duì)等方的 TCP 接收窗口。一般情況下,只要連接了套接字,就可以隨時(shí)修改窗口大小。但是,如果需要大于 64K 的接收窗口,則必須在套接字連接到遠(yuǎn)程對(duì)等點(diǎn)之前請(qǐng)求。有兩種情況需要注意:

  1. 對(duì)于從 ServerSocket 接受的套接字,這必須通過(guò)在 ServerSocket 綁定到本地地址之前調(diào)用 ServerSocket#setReceiveBufferSize(int) 來(lái)完成。
  2. 對(duì)于客戶端套接字,setReceiveBufferSize() 必須在將套接字連接到其遠(yuǎn)程對(duì)等方之前調(diào)用。

參數(shù):

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

Throws:

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

getReceiveBufferSize

public int getReceiveBufferSize() throws SocketException

獲取此 Socket 的 SocketOptions#SO_RCVBUF 選項(xiàng)的值,即平臺(tái)用于在此 Socket 上輸入的緩沖區(qū)大小。

返回:

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

Throws:

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

setKeepAlive

public void setKeepAlive(boolean on) throws SocketException

啟用/禁用 SocketOptions#SO_KEEPALIVE。

參數(shù):

參數(shù)名稱參數(shù)描述
on是否開(kāi)啟socket keep alive。

Throws:

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

getKeepAlive

public boolean getKeepAlive() throws SocketException

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

返回:

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

Throws:

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

setTrafficClass

public void setTrafficClass(int tc) throws SocketException

為從此 Socket 發(fā)送的數(shù)據(jù)包設(shè)置 IP 標(biāo)頭中的流量類別或服務(wù)類型八位字節(jié)。由于底層網(wǎng)絡(luò)實(shí)現(xiàn)可能會(huì)忽略此值,因此應(yīng)用程序應(yīng)將其視為提示。

tc 必須在 0 <= tc <= 255 范圍內(nèi),否則將拋出 IllegalArgumentException。

筆記:

對(duì)于 Internet 協(xié)議 v4,該值由一個(gè)整數(shù)組成,其中最低有效 8 位表示套接字發(fā)送的 IP 數(shù)據(jù)包中 TOS 八位字節(jié)的值。 RFC 1349 定義 TOS 值如下:

  • IPTOS_LOWCOST (0x02)
  • IPTOS_RELIABILITY (0x04)
  • IPTOS_THROUGHPUT (0x08)
  • IPTOS_LOWDELAY (0x10)

最后一個(gè)低位總是被忽略,因?yàn)樗鼘?duì)應(yīng)于 MBZ(必須為零)位。

設(shè)置優(yōu)先級(jí)字段中的位可能會(huì)導(dǎo)致 SocketException 指示不允許該操作。

正如 RFC 1122 第 4.2.4.2 節(jié)所示,兼容的 TCP 實(shí)現(xiàn)應(yīng)該但不是必須讓應(yīng)用程序在連接的生命周期內(nèi)更改 TOS 字段。所以在TCP連接建立后是否可以改變type-of-service字段取決于底層平臺(tái)的實(shí)現(xiàn)。應(yīng)用程序不應(yīng)假設(shè)他們可以在連接后更改 TOS 字段。

對(duì)于 Internet 協(xié)議 v6,tc 是放置在 IP 標(biāo)頭的 sin6_flowinfo 字段中的值。

參數(shù):

參數(shù)名稱參數(shù)描述
tc位集的 int 值。

Throws:

Throw名稱Throw描述
SocketException如果設(shè)置流量類別或服務(wù)類型時(shí)出錯(cuò)

getTrafficClass

public int getTrafficClass() throws SocketException

獲取從此 Socket 發(fā)送的數(shù)據(jù)包的 IP 標(biāo)頭中的流量類別或服務(wù)類型

由于底層網(wǎng)絡(luò)實(shí)現(xiàn)可能會(huì)忽略使用 setTrafficClass(int) 設(shè)置的流量類或服務(wù)類型,因此此方法可能返回與之前在此 Socket 上使用 setTrafficClass(int) 方法設(shè)置的值不同的值。

返回:

已設(shè)置的流量類別或服務(wù)類型

Throws:

Throw名稱Throw描述
SocketException如果獲取流量類別或服務(wù)類型值時(shí)出錯(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)(通常稱為 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)建 Socket 時(shí),SocketOptions#SO_REUSEADDR 的初始設(shè)置被禁用。

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

參數(shù):

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

Throws:

Throw名稱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名稱Throw描述
SocketException如果底層協(xié)議有錯(cuò)誤,例如 TCP 錯(cuò)誤。

close

public void close() throws IOException

關(guān)閉此套接字。

當(dāng)前在此套接字上的 I/O 操作中阻塞的任何線程都將拋出 SocketException。

一旦套接字關(guān)閉,它就不能用于進(jìn)一步的網(wǎng)絡(luò)使用(即不能重新連接或重新連接)。 需要?jiǎng)?chuàng)建一個(gè)新的套接字。

關(guān)閉此套接字也會(huì)關(guān)閉套接字的 InputStream 和 OutputStream。

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

指定者:

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

指定者:

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

Throws:

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

shutdownInput

public void shutdownInput() throws IOException

將此套接字的輸入流放在“流的末尾”。 任何發(fā)送到套接字輸入流端的數(shù)據(jù)都會(huì)被確認(rèn),然后被靜默丟棄。

如果在套接字上調(diào)用此方法后從套接字輸入流中讀取,則流的可用方法將返回 0,其讀取方法將返回 -1(流結(jié)束)。

Throws:

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

shutdownOutput

public void shutdownOutput() throws IOException

禁用此套接字的輸出流。 對(duì)于 TCP 套接字,任何先前寫入的數(shù)據(jù)都將按照 TCP 的正常連接終止順序發(fā)送。 如果在套接字上調(diào)用 shutdownOutput() 后寫入套接字輸出流,則該流將引發(fā) IOException。

Throws:

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

toString

public String toString()

將此套接字轉(zhuǎn)換為字符串。

覆蓋:

類 Object 中的 toString

返回:

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

isConnected

public boolean isConnected()

返回套接字的連接狀態(tài)。

注意:關(guān)閉套接字不會(huì)清除其連接狀態(tài),這意味著如果在關(guān)閉之前成功連接,則此方法將為已關(guān)閉的套接字返回 true。

返回:

如果套接字成功連接到服務(wù)器,則為 true

isBound

public boolean isBound()

返回套接字的綁定狀態(tài)。

注意:關(guān)閉套接字不會(huì)清除其綁定狀態(tài),這意味著如果在關(guān)閉之前成功綁定,則此方法將為已關(guān)閉的套接字返回 true。

返回:

如果套接字成功綁定到地址,則為 true

isClosed

public boolean isClosed()

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

返回:

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

isInputShutdown

public boolean isInputShutdown()

返回套接字連接的讀半部分是否關(guān)閉。

返回:

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

isOutputShutdown

public boolean isOutputShutdown()

返回套接字連接的寫半部分是否關(guān)閉。

返回:

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

setSocketImplFactory

public static void setSocketImplFactory(SocketImplFactory fac) throws IOException

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

當(dāng)應(yīng)用程序創(chuàng)建新的客戶端套接字時(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ù)名稱參數(shù)描述
fac想要的工廠。

Throws:

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

setPerformancePreferences

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

設(shè)置此套接字的性能首選項(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)的偏好。負(fù)值表示比正值低的優(yōu)先級(jí)。例如,如果應(yīng)用程序更喜歡短連接時(shí)間而不是低延遲和高帶寬,那么它可以使用值 (1, 0, 0) 調(diào)用此方法。如果應(yīng)用程序更喜歡高帶寬而不是低延遲,以及低延遲而不是短連接時(shí)間,那么它可以使用值 (0, 1, 2) 調(diào)用此方法。

在此套接字連接后調(diào)用此方法將無(wú)效。

參數(shù):

參數(shù)名稱參數(shù)描述
connectionTime表示短連接時(shí)間的相對(duì)重要性的 int
latency一個(gè)表示低延遲相對(duì)重要性的 int
bandwidth表示高帶寬相對(duì)重要性的 int

網(wǎng)站名稱:創(chuàng)新互聯(lián)鴻蒙OS教程:鴻蒙OS Socket
文章URL:http://m.5511xx.com/article/cdidpch.html