TCP/IP Winsock程式設計要點(轉)
1、快速通訊
Winsock的Nagle演算法將降低小資料包的傳送速度,而系統預設是使用Nagle演算法,使用
例子:
2、SOCKET的SegMentSize和收發緩衝
TCPSegMentSize是傳送接受時單個資料包的最大長度,系統預設為1460,收發緩衝大小為8192。
在SOCK_STREAM方式下,如果單次傳送資料超過1460,系統將分成多個資料包傳送,在對方接受到的將是一個資料流,應用程式需要增加斷幀的判斷。當然可以採用修改登錄檔的方式改變1460的大小,但MicrcoSoft認為1460是最佳效率的引數,不建議修改。
在工控系統中,建議關閉Nagle演算法,每次傳送資料小於1460個位元組(推薦1400),這樣每次傳送的是一個完整的資料包,減少對方對資料流的斷幀處理。
3、同步方式中減少斷網時connect函式的阻塞時間
同步方式中的斷網時connect的阻塞時間為20秒左右,可採用gethostbyaddr事先判斷到服務主機的路徑是否是通的,或者先ping一下對方主機的IP地址。
A、採用gethostbyaddr阻塞時間不管成功與否為4秒左右。
例子:
B、採用PING方式時間約2秒左右
暫略[@more@]
Winsock的Nagle演算法將降低小資料包的傳送速度,而系統預設是使用Nagle演算法,使用
int setsockopt( SOCKET s, int level, int optname, const char FAR *optval, int optlen );函式關閉它 |
例子:
SOCKET sConnect; sConnect=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); int bNodelay = 1; int err; err = setsockopt( sConnect, IPPROTO_TCP, TCP_NODELAY, (char *)&bNodelay, sizoeof(bNodelay));//不採用延時演算法 if (err != NO_ERROR) TRACE ("setsockopt failed for some reason ");; |
2、SOCKET的SegMentSize和收發緩衝
TCPSegMentSize是傳送接受時單個資料包的最大長度,系統預設為1460,收發緩衝大小為8192。
在SOCK_STREAM方式下,如果單次傳送資料超過1460,系統將分成多個資料包傳送,在對方接受到的將是一個資料流,應用程式需要增加斷幀的判斷。當然可以採用修改登錄檔的方式改變1460的大小,但MicrcoSoft認為1460是最佳效率的引數,不建議修改。
在工控系統中,建議關閉Nagle演算法,每次傳送資料小於1460個位元組(推薦1400),這樣每次傳送的是一個完整的資料包,減少對方對資料流的斷幀處理。
3、同步方式中減少斷網時connect函式的阻塞時間
同步方式中的斷網時connect的阻塞時間為20秒左右,可採用gethostbyaddr事先判斷到服務主機的路徑是否是通的,或者先ping一下對方主機的IP地址。
A、採用gethostbyaddr阻塞時間不管成功與否為4秒左右。
例子:
LONG lPort=3024; struct sockaddr_in ServerHostAddr;//服務主機地址 ServerHostAddr.sin_family=AF_INET; ServerHostAddr.sin_port=::htons(u_short(lPort)); ServerHostAddr.sin_addr.s_addr=::inet_addr("192.168.1.3"); HOSTENT* pResult=gethostbyaddr((const char *) & (ServerHostAddr.sin_addr.s_addr),4,AF_INET); if(NULL==pResult) { int nErrorCode=WSAGetLastError(); TRACE("gethostbyaddr errorcode=%d",nErrorCode); } else { TRACE("gethostbyaddr %s ",pResult->h_name);; } |
B、採用PING方式時間約2秒左右
暫略[@more@]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10172717/viewspace-928881/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 網路程式設計TCP/IP詳解程式設計TCP
- Go語言中的TCP/IP網路程式設計GoTCP程式設計
- Java 併發程式設計要點Java程式設計
- PHP程式設計20大效率要點PHP程式設計
- Linux 高效能伺服器程式設計-TCP/IP 協議族Linux伺服器程式設計TCP協議
- TCP/IP協議族——高效能Linux伺服器程式設計TCP協議Linux伺服器程式設計
- JAVA網路程式設計(2)TCP程式設計Java程式設計TCP
- Java 網路程式設計(TCP程式設計 和 UDP程式設計)Java程式設計TCPUDP
- 網站設計要點網站
- 【網路程式設計】Tcp/Udp程式設計TCPUDP
- 第五講 TCP程式設計TCP程式設計
- 可以提高php程式設計效率的20個要點PHP程式設計
- [計算機網路]TCP/IP計算機網路TCP
- 基本TCP套接字程式設計APITCP程式設計API
- 2018年,我印象最深刻的一本書《TCP/IP網路程式設計》TCP程式設計
- 大型站點TCP/IP協議優化TCP協議優化
- IT程式設計師必知!TCP/IP為什麼會有這麼多的致命漏洞?程式設計師TCP
- 網路程式設計中TCP與UDP程式設計TCPUDP
- java網路程式設計(TCP詳解)Java程式設計TCP
- 程式設計師生存指南:你必須要掌握的兩點!程式設計師
- TCP/IP族TCP
- TCP/IP模型TCP模型
- TCP / IP AT命令TCP
- Java程式設計師微服務架構你必須要掌握的十個要點Java程式設計師微服務架構
- TCP/IP、UDP/IP協議TCPUDP協議
- Python網路程式設計——IP、UDPPython程式設計UDP
- 《Unix 網路程式設計》05:TCP C/S 程式示例程式設計TCP
- 值得收藏的TCP套介面程式設計文章TCP程式設計
- socket程式設計在TCP中的應用程式設計TCP
- python網路-Socket之TCP程式設計(26)PythonTCP程式設計
- 【TCP/IP】TCP詳解筆記TCP筆記
- 0基礎小白轉行程式設計師,企業願意要嗎?行程程式設計師
- 換ip軟體的挑選要點
- 淺談TCP/IPTCP
- TCP/IP 基礎TCP
- tcp/ip協議TCP協議
- TCP/IP 筆記TCP筆記
- OSI和TCP/IPTCP
- TCP/IP 和SocketTCP