从服务器下载文件后,表单变为无响应

时间:2011-11-25 23:31:49

标签: c# forms

这是一件非常奇怪的事情。

我创建了一个客户端和一个服务器来上传和下载文件。上传时我可以上传大量文件而不会出现问题,但是当我下载文件时,客户端转而没有响应,并且没有显示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); }
}

感谢。这可能是主题,但它是我遇到的问题。

1 个答案:

答案 0 :(得分:0)

您的代码似乎没问题,所以我怀疑问题出在您正在阅读的下载方法中。

另外,我个人会在if (thisRead == 0) break;语句之前移动循环终止(fileStream.Write)。

对于生产代码,我会添加某种超时限制,这样你就不会陷入无限循环。