我試圖將一些數據寫入原始數據套接字(大約22 MB)。該方案是這樣的: -使用Flash/Adobe Air 2.0插座難度
- 打開本地文件
- 讀取的字節的塊。
- 將它寫入套接字
- 重複2 & 3直到文件結束。
現在的問題是,我的代碼(下)沒有傳輸完整的文件。它可以用我的測試文件在22 MB中傳輸3個數據。跟蹤完成並顯示正在傳輸的完整數據。我懷疑,也許它會在完成當前版塊之前開始編寫下一個塊(儘管我不確定)。
while(fs.bytesAvailable > 0){
var readAmount = (fs.bytesAvailable < socketBufferSize) ? fs.bytesAvailable : socketBufferSize;
seq++;
air.trace(">"+seq+" WritePacket "+readAmount+" "+fs.position+" "+fs.bytesAvailable);
fs.readBytes(bytes, 0, readAmount);
air.trace(bytes.length);
socket2.writeBytes(bytes, 0, bytes.length);
socket2.flush();
}
fs.close();
socket2.close();
上面是我應該使用的代碼。我想知道我是否做對/錯。
插入寫迭代之間的強制延遲確保了文件被完全傳送在下面的代碼段指示。但這不是一個可接受的解決方案。我想知道是否有某個事件我應該訂閱,或者是否有任何需要改變的地方。另一端的服務器是FileZilla FTP Server。
var sendData = function(){
if(fs.bytesAvailable > 0){
var readAmount = (fs.bytesAvailable < socketBufferSize) ? fs.bytesAvailable : socketBufferSize;
seq++;
air.trace(">"+seq+" WritePacket "+readAmount+" "+fs.position+" "+fs.bytesAvailable);
fs.readBytes(bytes, 0, readAmount);
air.trace(bytes.length);
socket2.writeBytes(bytes, 0, bytes.length);
socket2.flush();
}
else{
air.trace("Closing Connection");
fs.close();
socket2.close();
}
}
var interval = setInterval(sendData, 100);
感謝
顯然問題在於套接字關閉功能是殘酷的。在它有機會傳輸所有數據之前,它會過早關閉該頻道。 如果我刪除了socket.close()並等待它超時,它可以正常工作。有沒有任何正確的建議方式來做到這一點? – 2010-06-23 13:08:23
哦,如果這個問題困擾着你,那麼請投票支持這個問題:http://bugs.adobe.com/jira/browse/FP-6 – 2010-06-23 13:09:10
這個問題已經被空氣小組確認了, 。繼承人轉發的消息: - 您遇到的問題是,如果您過早調用close(),則丟棄尚未傳輸的數據,並立即關閉套接字。這就是插入延遲的原因:在調用close()之前,它給了數據傳輸的時間。 我們(AIR團隊)意識到這是該API中相當重要的可用性問題,我們正在努力解決它。與此同時,我認爲延遲是您的最佳選擇。 Regards, Oliver – 2010-06-24 07:16:38