您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關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關閉,所有剩余的數據都不會發送,也不會收到確認!
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
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
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的可選項有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。