簡體   English   中英

在c#套接字中接收未知文件大小

[英]Receiving unknown file size in c# socket

程序在根據以下代碼下載文件時自行鎖定:可能是什么問題?

if (bufferInfo.Contains("fileExists"))
{
    FileStream downloadFileStream = new FileStream(folderName + "\\" + requestFileName.Text, FileMode.Create);
    activityLog.AppendText("File is found, it will be downloaded !");
    byte[] myReadBufferExists = new byte[8196];

    do
    {
        bytesRead = clientSocket.Receive(myReadBufferExists);
        downloadFileStream.Write(myReadBufferExists,0,bytesRead);
    } while (bytesRead != 0);

    downloadFileStream.Close();
    clientSocket.Close();
    bufferInfo.Replace("fileExists","");
    activityLog.AppendText("File has been received now writing to the disk...");    
}

它鎖定了clientSocket.Receive(myReadBufferExists)調用。 這是因為默認情況下,Receive會嘗試填充您傳遞的緩沖區。 如果你無休止地調用Receive,它將最終在沒有更多數據時阻塞。

情侶選擇:

  • 在開始接收之前,請在請求標頭或其他一些旁道信息中預先確定大小。 只嘗試接收那么多數據。
  • 發送數據后發送軟件關閉套接字。 例如,如果這是來自http請求,則可以在請求標頭中指定Connection: close 當他們關閉連接時,接收將彈出(通過異常 - 由同行關閉連接),你就會知道你已經完成了。
  • 這是hackish,但是..設置一個接收超時,它比接收最慢的塊所需的時間大。 點擊流結束后,您的接聽電話將超時(通過例外)並且您將知道您已完成。 我不推薦這種方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM