2011-11-25 65 views
0

這是一件非常奇怪的事情。從服務器下載文件後轉爲無響應

我創建了一個客戶端和一個服務器來上傳和下載文件。上傳時,我可以上傳大量文件,但沒有問題,但是當我下載文件時,客戶端轉向不響應,並且不會顯示MessageBox.show("Downloaded");它的第一個匹配項,以查看此內容:D。

使用時,使該問題的代碼:

private void button3_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     String fileToDownload = filePathDownload.Text; 


     TcpClient clientSocket = new TcpClient(serverIPDownload.Text, 8880); 
     NetworkStream networkStream = clientSocket.GetStream(); 
     ASCIIEncoding asci = new ASCIIEncoding(); 
     byte[] b = asci.GetBytes(fileToDownload + "?"); 
     byte[] bb = asci.GetBytes("Download?"); 
     int thisRead = 0; 
     int blockSize = 1024; 
     Byte[] dataByte = new Byte[blockSize]; 

     networkStream.Write(bb, 0, bb.Length); 
     networkStream.Flush(); 
     networkStream.Write(b, 0, b.Length); 
     networkStream.Flush(); 

     using (FileStream fileStream = new FileStream(
      "C:/Users/Laptop/Documents/Downloads/" + fileToDownload, 
      FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None)) 
     { 
      while (true) 
      { 
       thisRead = networkStream.Read(dataByte, 0, blockSize); 

       fileStream.Write(dataByte, 0, thisRead); 
       if (thisRead == 0) break; 

      } 
      MessageBox.Show("File Downloaded"); 
      fileStream.Close(); 
     } 
    } 
    catch (Exception ex) { MessageBox.Show(ex.Message); } 
} 

感謝。這可能不是主題,但它是我面臨的問題。

回答

0

您的代碼似乎沒問題,所以我懷疑問題出在您正在閱讀的下載方法中。

此外,我會親自將fileStream.Write聲明之前的循環終止(if (thisRead == 0) break;)移動。

而對於產品代碼,我會添加某種超時限制,以免最終陷入無限循環。