Я хочу прослушать файл, отправленный мне.Чтобы сделать это, я написал следующий код:
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.
Кто-нибудь знает, как это исправить?