2014-03-19 36 views
1

我使用Nodejs和Adobe AIR通過TCP發送文件,但是當涉及到移動設備時,Actionscript中的哈希變得非常緩慢。TCP和HASH驗證

我的問題是:我真的需要在傳輸後驗證文件的哈希值,還是TCP協議確保完整性?

謝謝!

+0

TCP確保要求傳送的數據的按序傳送和完整性。這並不意味着對等方傳遞給TCP的數據首先是有效的。 – Asblarf

+0

@Asblarf如果我確定數據是有效的,可以不驗證散列嗎? – Formiga

回答

1

根據您發送文件的確切方式,接收方可能無法確切知道它已收到整個文件。有些情況下連接可能會在文件完全收到之前被切斷。驗證文件的校驗和(散列)應確保已收到整個文件。

+0

我沒有看到接收器不知道如何切斷連接。如果他使用一個,或者一個異常,或者一個有效的流結束,他會得到一個讀取超時。當且僅當他獲得有效的流結束時,纔會收到整個文件。 – EJP

+2

大多數TCP套接字實現僅僅表明連接已經關閉(通常在下一個'read()'返回0字節)。除非接收者知道應該有更多的數據,否則無法區分早期接近和正常接近之間的差異。這正是HTTP在響應和POST請求中包含「Content-Length」標頭的原因。 –

+0

據我所知,連接可能會丟失一些數據包,如果我不驗證所有數據是否被傳輸,則整個文件將無效。僅僅在傳輸開始時發送Content-Length並不是更好,更快? – Formiga