A. socket 通信粘包怎麼處理
一、socket 通信粘包的處理方法:
1、對於發送方引起的粘包現象,用戶可通過編程設置來避免,TCP提供了強制數據立即傳送的操作指令push,TCP軟體收到該操作指令後,就立即將本段數據發送出去,而不必等待發送緩沖區滿;
2、對於接收方引起的粘包,則可通過優化程序設計、精簡接收進程工作量、提高接收進程優先順序等措施,使其及時接收數據,從而盡量避免出現粘包現象;
3、由接收方控制,將一包數據按結構欄位,人為控制分多次接收,然後合並,通過這種手段來避免粘包。
二、實現代碼:
三、方法注意事項:
1、第一種編程設置方法雖然可以避免發送方引起的粘包,但它關閉了優化演算法,降低了網路發送效率,影響應用程序的性能,一般不建議使用。
2、第二種方法只能減少出現粘包的可能性,但並不能完全避免粘包,當發送頻率較高時,或由於網路突發可能使某個時間段數據包到達接收方較快,接收方還是有可能來不及接收,從而導致粘包;
3、第三種方法雖然避免了粘包,但應用程序的效率較低,對實時應用的場合不適合。
四、實驗環境
1、硬體環境:伺服器:pentium 350 微機 、客戶機:pentium 166微機、網路平台:由10兆共享式hub連接而成的區域網;
2、軟體環境:操作系統:windows 98 、編程語言:visual c++ 5.0