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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Winsock程式設計初步之<一> Winsock程式設計原理 (轉)程式設計
- Winsock程式設計框架 (轉)程式設計框架
- Linux網路程式設計--TCP/IP協議(轉)Linux程式設計TCP協議
- TCP/IP網路程式設計模型TCP程式設計模型
- 網路程式設計TCP/IP詳解程式設計TCP
- TCP/IP通訊程式設計的豐富多樣性(轉)TCP程式設計
- 用VB5 Winsock控制元件建立TCP/IP通訊程式控制元件TCP
- Winsock程式設計初步之<二> 源程式例項(一) (轉)程式設計
- Winsock程式設計初步之<三> 源程式例項(2) (轉)程式設計
- Go語言中的TCP/IP網路程式設計GoTCP程式設計
- Socket、TCP/IP、HTTP、FTP及網路程式設計TCPHTTPFTP程式設計
- Java 併發程式設計要點Java程式設計
- acl 伺服器程式設計框架設計要點伺服器程式設計框架
- iOS 網路程式設計(一)TCP IP協議簡介iOS程式設計TCP協議
- PHP程式設計20大效率要點PHP程式設計
- 要麼程式設計要麼被程式設計程式設計
- TCP程式設計(七)TCP程式設計
- 淺談 TCP/IP 網路程式設計中 socket 的行為TCP程式設計
- Java多執行緒程式設計要點Java執行緒程式設計
- 53個要點提高PHP程式設計效率PHP程式設計
- 網站設計要點網站
- JAVA網路程式設計(2)TCP程式設計Java程式設計TCP
- TCP/IP 為什麼要三次握手TCP
- 漫談 C++:良好的程式設計習慣與程式設計要點C++程式設計
- 漫談C++:良好的程式設計習慣與程式設計要點C++程式設計
- Java多執行緒程式設計要點 (一)Java執行緒程式設計
- Java 多執行緒程式設計要點(synchronized)Java執行緒程式設計synchronized
- TCP/IP協議族——高效能Linux伺服器程式設計TCP協議Linux伺服器程式設計
- Linux 高效能伺服器程式設計-TCP/IP 協議族Linux伺服器程式設計TCP協議
- TCP協議要點和難點全解TCP協議
- TCP/IP協議原理【轉載】TCP協議
- 可以提高php程式設計效率的20個要點PHP程式設計
- Java 程式設計要點之 I/O 流詳解Java程式設計
- 第五講 TCP程式設計TCP程式設計
- 【網路程式設計】Tcp/Udp程式設計TCPUDP
- WinSock2程式設計之打造完整的SOCKET池程式設計
- 網路遊戲程式設計師須知 UDP vs TCP(轉)遊戲程式設計師UDPTCP
- Android網路程式設計(一) TCP IP協議基礎棧結構Android程式設計TCP協議