1、tcp_nodelay:表示立即傳送資料。
2、so_resuseaddr:表示允許重用socket所繫結的本地位址
3、so_timeout:表示接受資料時的超時時間。
4、so_linger:表示當執行close();方法時候,是否理解關閉底層的socket。
5、so_snfbuf:表示傳送資料的緩衝大小
6、so_rcvbuf:表示接受資料的緩衝區的大小
7、so_keepalive:表示長時間處於空閒狀態的socekt,是否自動把他/她關閉
8、oobinline:表示是否支援傳送乙個位元組的tcp緊急資料
1、tcp_nodelay選項:
settcpnodelay(boolean on);
預設情況下傳送資料是採用negale演算法。negale演算法是指傳送方資料不會立刻傳送出去,而是先放在緩衝區內,等待緩衝區滿了,在發出去。negale演算法適用於需要傳送大量資料的應用場景。這種演算法減少傳輸的次數增加效能。但是如果對於需要即使響應的,小批量資料的應用場景,例如網路遊戲就不能採用negale演算法了。預設是false,表示採用negale演算法。
2、so_resuseaddr選項:
setresuseaddress(boolean on);
當接收方通過socket的close()方法關閉socket的時候,如果網路還在傳送資料,那麼底層的socket不會立即釋放本地的埠的,而是等一段時間,確定保證接收到了網路上的延遲資料,然後在釋放埠。確保正好不被同樣的socket占用這個埠號。
3、so_timeout選項:
setsotimeout(int milins);
用於設定接受資料的等待的超時時間,單位為毫秒,它的預設值是0,表示無限等待。
4、so_linger選項
setsolinger(boolean on ,int seconds);
預設情況socket的close();方法會立即返回。但是底層的socket並沒有立即關閉,他會延遲一段時間,等傳送完畢了再關閉。如果執行:
setsolinger(true,0)的話,會立即關閉,底層的socket也會立即關閉,丟切剩餘的資料。如果setsolinger(true,3600);會在兩種情況關閉,第一:資料傳送完畢,第二:就是阻塞了3600秒。
5、so_rcvbuf選項
setreceivebuffersize(int size);
用於設定輸入資料的緩衝區的大小。傳輸較大的可以使用較大的緩衝區(例如:http,ftp),例如網路遊戲實時性較高的,且頻繁互動的使用較小的緩衝區。
6、so_sndbuf選項
setsendbuffersize(int size);
用於設定輸出緩衝區的大小。
7、so_keepalive選項
setkeepalive(boolean on);
當設定為true的時候,tcp會實現監控連線是否有效,當連線處於空閒狀態的時候,超過了2個小時,本地的tcp實現會傳送乙個資料報給遠端的socket,如果遠端沒有發回響應,tcp會持續嘗試11分鐘,知道響應為止,如果在12分鐘的時候還沒響應,tcp嘗試關閉socket連線。
8、oobinline選項
setoobinline(boolean on);
當設定為true的時候,表示支援緊急資料。接收方需要對緊急資料做進一步的處理。使用更高的協議。
對於socket服務型別的選擇:
ip規定了4中服務型別:
1、低成本:傳送成本低
2、高可靠性:保證鮑資料可靠的傳送到目的地
3、高吞吐量:一次接受傳送大量資料
4、最小延遲:傳輸資料快,最快傳送到目的地
設定服務型別:settrafficclass(int trafficclass);
底成本:0x02
高可靠:0x04
最高吞吐量:0x08
最小延遲:0x10
關於socket的設定選項總結完畢!
再來乙個例項的封裝的方法:
private void setsocketparameters(socket client_sock) throws socketexception catch (illegalargumentexception ex)
try catch (illegalargumentexception ex)
// 當設定為true的時候,tcp會實現監控連線是否有效,當連線處於空閒狀態的時候,
//超過了2個小時,本地的tcp實現會傳送乙個資料報給遠端的socket,如果遠端沒有發回響應,
//tcp會持續嘗試11分鐘,知道響應為止,如果在12分鐘的時候還沒響應,tcp嘗試關閉socket連線
client_sock.setkeepalive(true);
//採用negal演算法,有資料立即傳送出去
client_sock.settcpnodelay(tcp_nodelay);
if (linger > 0)
//關閉socket等待liner毫秒後在關閉,
client_sock.setsolinger(true, linger);
else
//直到把快取底層資料傳送完畢再關閉socekt連線
client_sock.setsolinger(false, -1);
}
socket可選項程式設計
套接字有多種可選項,有時候是需要更改套接字可選項的,下面是一部分套接字可選項 套接字可選項是分層的。ipproto ip層可選項是ip協議相關事項,ipproto tcp層可選項是tcp協議相關事項,sol socket層是套接字相關的通用可選項。下面是讀取和設定可選項的函式 includeint ...
Socket描述符選項 SOL SOCKET
socket描述符選項 sol socket include int setsockopt int socket,int level,int option name,const void option value,size t option len 第乙個引數socket是套接字描述符。第二個引數l...
socket描述符選項 SOL SOCKET
include int setsockopt int socket,int level,int option name,const void option value,size t option len 第乙個引數socket是套接字描述符。第二個引數level是被設定的選項的級別,如果想要在套接字...