中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JAVA Socket的可選項有哪些

發布時間:2021-10-20 15:46:01 來源:億速云 閱讀:276 作者:柒染 欄目:大數據

這篇文章將為大家詳細講解有關JAVA Socket的可選項有哪些,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

Socket選項指定了Java Socket類所依賴的原生socket如何發送和接收數據。對于客戶端Socket,Java支持9個選項:

    TCP_NODELAY
    SO_BINDADDR
    SO_TIMEOUT
    SO_LINGER
    SO_SNDBUF
    SO_RCVBUF
    SO_KEEPALIVE
    OOBINLINE
    IP_TOS

TCP_NODELAY

public void setTcpNoDelay(boolean on) throws SocketException
public boolean getTcpNoDelay() throws SocketException

設置TCP_NODELAY為true可確保包會盡可能快地發送,而無論包的大小。
setTcpNoDelay(true)關閉了Socket的緩沖。setTcpNoDelay(false)再次啟用緩沖!
緩沖關閉時,getTcpNoDelay()會返回true,如果緩沖打開,這個方法會返回false;

SO_LINGER

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

SO_LINGER選項指定了Socket關閉時如何處理尚未發送的數據。默認情況下,close()方法將立即返回,但系統仍會嘗試發送剩余的數據。如果延遲時間設置為0,那么當Socket關閉時,所有未發送的數據包都將被丟棄。如果SO_LINGER打開而且延遲時間設置為任意正數,close()方法會阻塞,等待發送數據和接收確認。當過去相應秒數后,Socket關閉,所有剩余的數據都不會發送,也不會收到確認!
JAVA Socket的可選項有哪些

SO_TIMEOUT

public synchronized void setSoTimeout(int timeout) throws SocketException
public synchronized int getSoTimeout() throws SocketException

正常情況下,嘗試從Socket讀取數據時,read()調用盡可能長的時間來得到足夠的字節。設置SO_TIMEOUT可以確保這個每次調用阻塞的時間不會超過某個固定的毫秒數;0被解釋為無限超時,這是默認值!

SO_RCVBUF和SO_SNDBUF

public synchronized void setReceiveBufferSize(int size)throws SocketException
public synchronized int getReceiveBufferSize()throws SocketException
public synchronized void setSendBufferSize(int size)throws SocketException
public synchronized int getSendBufferSize() throws SocketException

SO_RCVBUF選項控制用于網絡輸入的建議的接收緩沖區大小。SO_SNDBUF選項控制用于網絡輸入的建議的發送緩沖區大小;

SO_KEEPALIVE

public void setKeepAlive(boolean on) throws SocketException
public boolean getKeepAlive() throws SocketException

JAVA Socket的可選項有哪些
SO_KEEPALIVE的默認值為false。如果打開了SO_KEEPALIVE,下面的代碼將其關閉:

if(s.getKeepAlive())
{
s.setKeepAlive(false);
}

OOBINLINE
默認情況下,Java會忽略從Socket接收的緊急數據。不過,如果你希望接收正常數據中的緊急數據,就需要使用下面的方法設置OOBINLINE選項為true:

public void setOOBInline(boolean on) throws SocketException
public boolean getOOBInline() throws SocketException

OOBINLINE的默認值為false。


SO_REUSEADDR
JAVA Socket的可選項有哪些

public void setReuseAddress(boolean on) throws SocketException
public boolean getReuseAddress() throws SocketException

關閉還是連接

如果socket關閉,isClosed()方法會返回true,否則返回false。如果你不確定一個Socket的狀態,可以用這個方法先進行檢查。
不過,這不是一個萬全的測試。如果一個Socket從一開始就未連接,isClosed()也返回false,盡管Socket實際上根本沒有打開過。
Socket類還有一個isConnected()方法。如果這個Socket確實能夠連接遠程主機,isConnected()方法就會返回true,即使這個Socket已經關閉。

要查看一個Socket當前是否打開,需要檢查兩個條件:
//首先isConnected()要返回true,另外isClosed()要返回false。
boolen connected = socket.isConnected() && !socket.isClosed()

關于JAVA Socket的可選項有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

怀来县| 宁阳县| 寻乌县| 广德县| 鹤山市| 汉寿县| 竹溪县| 武安市| 喜德县| 安庆市| 秦安县| 信宜市| 辉县市| 沅陵县| 柞水县| 前郭尔| 临桂县| 西峡县| 嘉峪关市| 三河市| 尼木县| 桦川县| 济阳县| 礼泉县| 商洛市| 深泽县| 乐都县| 温宿县| 中西区| 中江县| 漳州市| 和龙市| 平阳县| 平乡县| 深圳市| 建始县| 文水县| 广汉市| 呼伦贝尔市| 高清| 福州市|