我正在構建一個庫,保持C++中應用程序之間的網絡連接。在一些調試過程中,我發現我從套接字獲得的一些信息似乎不完整。這個信息是完全重要的,因爲如果我用協議緩衝區的庫解碼它,我需要完整的信息。tcp/ip是否傳遞完整的消息?
這種現象不是恆定的。有時我會從套接字獲取所有數據,有時候不會。測試過程如下所示:啓動服務器,多次啓動客戶端。我得到的是函數的輸出,它描述了一些變量的值如何變化。其中之一就是我用來存儲數據的緩衝區的大小。這個大小告訴我緩衝區中有多少數據。客戶發送兩個大小爲3(字節)的消息 - 在這個特定的測試中。我預計緩衝區大小是3的倍數。但是,有時大小是4 !.這意味着程序讀取一條完整的消息和第二條消息的1/3。我不明白爲什麼我總是先收到第一條消息。否則,protobuf會終止程序。
我以爲tcp/ip應該小心我得到完整的消息。我的問題是我不知道大小提前。我希望收到完整的信息,以便我可以解釋它corecty。