Я работаю над приложением, которое принимает соединения TCP и считывает данные, пока не будет прочитан маркер </File>
, а затем записывает эти данные в файловую систему. Я не хочу отключаться, я хочу, чтобы клиент, отправляющий данные, делал это, чтобы он мог отправлять несколько файлов в одном соединении.
Я использую StreamReader.EndOfStream
вокруг моего внешнего цикла, но он выдает IOException, когда клиент отключается. Есть ли лучший способ сделать это?
private static void RecieveAsyncStream(IAsyncResult ar)
{
TcpListener listener = (TcpListener)ar.AsyncState;
TcpClient client = listener.EndAcceptTcpClient(ar);
// init the streams
NetworkStream netStream = client.GetStream();
StreamReader streamReader = new StreamReader(netStream);
StreamWriter streamWriter = new StreamWriter(netStream);
while (!streamReader.EndOfStream) // throws IOException
{
string file= "";
while (file!= "</File>" && !streamReader.EndOfStream)
{
file += streamReader.ReadLine();
}
// write file to filesystem
}
listener.BeginAcceptTcpClient(RecieveAsyncStream, listener);
}