после загрузки файла с сервера форма перестает отвечать - PullRequest
0 голосов
/ 26 ноября 2011

Это очень странная вещь.

Я создал клиент и сервер для загрузки и скачивания файлов.При загрузке я могу загрузить много файлов без проблем, но когда я загружаю файл, клиент по очереди не отвечает и не показывает 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 голосов
/ 26 ноября 2011

Ваш код, кажется, в порядке, поэтому я подозреваю, что проблема в методе Download, с которого вы читаете.

Кроме того, я бы лично переместил завершение цикла (if (thisRead == 0) break;) до fileStream.Writeзаявление.

А для производственного кода я бы добавил какое-то ограничение по времени ожидания, чтобы вы не оказались в бесконечном цикле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...