国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

javasocket參數詳解

2019-11-14 15:30:54
字體:
來源:轉載
供稿:網友

TCP_NODELAY:  表示立即發送數據

設置該選項: public void setTcpNoDelay(boolean on) throw SocketExpcetion
讀取該選項: public boolean getTcpNoDelay(boolean on) throw SocketExpcetion

默認情況下,發送數據時采用Negale算法,Negale算法是指發送方發送數據的時候不會立刻發出,而是先放在緩沖區內,等待緩沖區滿了再發送。發送完一批數據后,會等待接受方隊這批數據的回應,然后再發送下一批數據。Negal算法適合發送方需要發送大批量數據,并且接收方會及時作出回應的場合,這種算法通過減少傳輸數據的次數來提高通信的效率。

        如果發送方持續的發送小批量的數據,并且接收方不一定會立即發送相應數據,那么Negale算法會使發送方運行很慢。對已gui重新,如網絡游戲程序(服務器需要實時跟蹤客戶端的鼠標移動),這個問題尤為突出。客戶端鼠標位置的改動的信息需要實時發送到服務器端,由于Negale算法采用緩沖,大大降低了實時響應的速度,導致客戶端程序很慢。

      TCP_NODEALY 的默認值時 FALSE,采用Negale算法,如果設置為 true,就好關閉socket的緩沖,確保數據及時發送出去。

  如果socket的底層不知道 tcp_nodelay 選項,那么調用 getTcpNoDelay 和 setTcpNoDelay方法會拋出SocketException

SO_LINGER:  表示當執行 socket的close方法的時候,是否立即關閉底層的socket 。 這個單位是秒。

設置該選項: public void setSoLinger(boolean on, int seconds) throws SocketException;
讀取該選項:public int getSoLinger() throws SocketException

 

SO_LINGER選項用來控制Socket關閉時的行為,默認情況下,執行Socket的close方法,該方法會立即返回,但底層的Socket實際上并不會立即關閉,他會立即延遲一段時間,知道發送完剩余的數據,才會真正的關閉Socket,斷開連接。

    setSoLinger(true, 0): 執行該方法,那么執行Socket的close方法,該方法也會立即返回,但底層的Socket也會立即關閉,所有未發送完的剩余數據被丟棄

    setSoLinger(true, 3600): 那么執行Socket的close方法,該方法不會立即返回,而進入阻塞狀態,同時,底層的Socket也會嘗試發送剩余的數據,只有滿足下面的兩個條件之一,close方法才會返回:

    (1):底層的Socket已經發送完所有的剩余數據

    (2): 盡管底層的Socket還沒有發送完所有的剩余數據,但已經阻塞了3600秒,close()方法的阻塞時間超過3600秒,也會返回,剩余未發送的數據被丟棄。

實例參見:http://blog.csdn.net/woshisap/article/details/6576719

 

SO_SNFBUF:  發送數據的緩沖區大小

設置該選項: public void setSendBufferSize(int size) throws SocketException 
讀取該選項: public int getSendBufferSize() throws SocketException

SO_SNDBUF 表示 Socket 的用于輸出數據的緩沖區的大小. 如果底層 Socket 不支持 SO_SNDBUF 選項, setSendBufferSize() 方法會拋出 SocketException.

對于Socket和SeverSocket如果需要指定緩沖區大小,必須在連接之前完成緩沖區的設定。

 

SO_KEEPLIVE:  表示對于長時間處于空閑狀態的socket,是否要自動把他關閉

設置該選項: public void setKeepAlive(boolean on) throws SocketException
讀取該選項: public boolean getKeepAlive() throws SocketException

當 SO_KEEPALIVE 選項為 true 時, 表示底層的TCP 實現會監視該連接是否有效. 當連接處于空閑狀態(連接的兩端沒有互相傳送數據) 超過了 2 小時時, 本地的TCP 實現會發送一個數據包給遠程的 Socket. 如果遠程Socket 沒有發回響應, TCP實現就會持續嘗試 11 分鐘, 直到接收到響應為止. 如果在 12 分鐘內未收到響應, TCP 實現就會自動關閉本地Socket, 斷開連接. 在不同的網絡平臺上, TCP實現嘗試與遠程Socket 對話的時限有所差別.

      SO_KEEPALIVE 選項的默認值為 false, 表示TCP 不會監視連接是否有效, 不活動的客戶端可能會永遠存在下去, 而不會注意到服務器已經崩潰.

 

OOBINLINE: 表示是否支持發送一個字節的tcp緊急數據

設置該選項: public void setOOBInline(boolean on) throws SocketException
讀取該選項: public boolean getOOBInline() throws SocketException

當 OOBINLINE 為 true 時, 表示支持發送一個字節的 TCP 緊急數據. Socket 類的 sendUrgentData(int data) 方法用于發送一個字節的 TCP緊急數據.

     OOBINLINE 的默認值為 false, 在這種情況下, 當接收方收到緊急數據時不作任何處理, 直接將其丟棄. 如果用戶希望發送緊急數據, 應該把 OOBINLINE 設為 true:

          socket.setOOBInline(true);                                                             

      此時接收方會把接收到的緊急數據

實例參考:http://blog.csdn.net/huang_xw/article/details/7340637

 

來源:

http://my.oschina.net/u/725800/blog/303634


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昌宁县| 石景山区| 留坝县| 乐山市| 湾仔区| 临沭县| 长岭县| 和政县| 锡林浩特市| 建德市| 永川市| 福贡县| 涿鹿县| 大安市| 和静县| 右玉县| 临泽县| 乌拉特前旗| 拉萨市| 巴林左旗| 鹰潭市| 庆云县| 镇原县| 论坛| 阿城市| 驻马店市| 镇安县| 襄垣县| 大田县| 奈曼旗| 东乌珠穆沁旗| 那坡县| 万安县| 岢岚县| 灵川县| 香港 | 旬邑县| 双江| 嘉定区| 桐城市| 田东县|