2013-05-27 61 views
0

我一直在爲TCP和UDP網絡編程庫,並想過使用數據包。目前我已經實現了一個可以像C++標準庫的流類一樣使用的數據包類(它有< <和>>用於輸入和讀取數據)。我打算髮送這樣的數據包:在網絡庫中使用數據包是一個好主意嗎?

bytes 1-8  - uint64_t as the size of the packet. 
bytes 8-size  - contents of the packet. 

但有一個問題。如果一個惡意客戶端發送一個以兆兆字節爲單位的大小和隨機亂碼作爲填充符,會怎麼樣?服務器的內存充滿了隨機的亂碼,它會凍結/崩潰。

讓服務器決定接收數據包的最大允許大小是個好主意嗎?

或者我應該丟棄數據包並實現數據流的傳輸(讀取/寫入完全由庫的用戶決定)?

(PS:我不是以英語爲母語,所以原諒我的語言可能是可怕的用法。)

+0

您可以將數據包始終限制爲32位甚至16位。您何時真的需要64位數據包大小? – EJP

+0

@EJP我選擇了uint64_t,因爲我可能想發送大於4 GB的文件。雖然可能會使uint32和16可用。 – Hassedev

回答

1

是,設置在服務器端的最大允許大小。設置它以便服務器不會凍結/崩潰,但不會變小。可預測的行爲應該是最高的目標。

+0

感謝您的回答,我會盡我所能接受。如果服務器嘗試發送太大的數據包時服務器會自動斷開客戶端連接,會不會過度反應? – Hassedev

相關問題