我正在使用C++編寫TCP客戶端服務器應用程序,第三方lib現在允許在這個項目中使用。recv socket api的內部工作
這裏的客戶端服務器之間交換使用需要以及format.once客戶端接收數據包定義協議,它將發送它parsing.I具有將於解析活動的護理方案經理。
當數據從網絡到達客戶端我有以下疑問
, 直到應用程序調用的recv()函數的OS對其進行緩衝。
所以兩個消息MSG1和MSG2到達緩衝區的recv的調用將返回MSG 1 + MSG2。 現在這可能導致解析活動失敗。
我的查詢
1.上述假設是否正確?
2.如果上面提到的假設是正確的,那麼如何解決這個問題。
看看[這](http://stackoverflow.com/questions/4896411/tcp-client-message-handling)的問題,它談論如何,你應該從服務器處理通過TCP消息。 – cpx 2011-04-26 09:49:12
謝謝cpx我認爲它應該可以工作 – 2011-04-26 10:17:47
你是對的:'recv'可能會全部返回這兩個消息。在其他情況下,'recv'可能只返回部分消息,或者可能返回msg1和msg2的全部。簡而言之,'recv'不知道和不尊重產生數據流的'send'調用的順序。 TCP將保證的是:它所返回的所有字節將按順序排列,沒有任何跳過。 (N.b.其他規則適用於UDP或其他協議。) – 2011-04-26 22:42:30