Как определить конец передачи файла в c # tcplistener - PullRequest
0 голосов
/ 25 октября 2018

Я хочу прослушать файл, отправленный мне.Чтобы сделать это, я написал следующий код:

private void Listen()
{
    IPAddress localip = new IPAddress(new byte[] { 127,0,0,1 });
    Console.WriteLine("now listing, IP: " + localip);
    var listener = new TcpListener(new IPEndPoint(localip, 5678));
    listener.Start();
    while (true)
    {
        using (var client = listener.AcceptTcpClient())
        using (var stream = client.GetStream())
        using (var output = File.Create("result.data"))
        {
            Console.WriteLine("Client connected. Starting to receive the file");


            var buffer = new byte[1024];
            int bytesRead;

            while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
            {
                output.Write(buffer, 0, bytesRead);
            }
            Console.WriteLine("done receiving message");


        }

    }
}

}

Теперь это работает нормально, но как только я получил файл, код висит на строке while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0) вместо продолженияна линию Console.WriteLine("done receiving message");.Поэтому вместо того, чтобы обнаруживать, что он читает 0 байтов (и, следовательно, больше не удовлетворяет условиям цикла while), он вместо этого зависает.Когда я пытаюсь проверить его в отладчике, он выдает ошибку

stream.DataAvailable
Cannot evaluate expression because a native frame is on the top of the call stack.

Кто-нибудь знает, как это исправить?

...