IPAddress serverAddress = IPAddress.Parse("192.168.1.66"); const int serverPort = 7777; string filename = "test.txt"; using var client = new TcpClient(serverAddress.ToString(), serverPort); using var stream = client.GetStream(); byte[] buf = new byte[65536]; await ReadBytes(sizeof(long)); long remainingLength = IPAddress.NetworkToHostOrder(BitConverter.ToInt64(buf, 0)); using var file = File.Create(filename); while (remainingLength > 0) { int lengthToRead = (int)Math.Min(remainingLength, buf.Length); await ReadBytes(lengthToRead); await file.WriteAsync(buf, 0, lengthToRead); remainingLength -= lengthToRead; } async Task ReadBytes(int howmuch) { int readPos = 0; while (readPos < howmuch) { var actuallyRead = await stream.ReadAsync(buf, readPos, howmuch - readPos); if (actuallyRead == 0) throw new EndOfStreamException(); readPos += actuallyRead; } } CSHARP IPAddress serverAddress = IPAddress.Parse("192.168.1.66"); const int serverPort = 7777; string filename = "test.txt"; using var client = new TcpClient(serverAddress.ToString(), serverPort); using var stream = client.GetStream(); byte[] buf = new byte[65536]; await ReadBytes(sizeof(long)); long remainingLength = IPAddress.NetworkToHostOrder(BitConverter.ToInt64(buf, 0)); using var file = File.Create(filename); while (remainingLength > 0) { int lengthToRead = (int)Math.Min(remainingLength, buf.Length); await ReadBytes(lengthToRead); await file.WriteAsync(buf, 0, lengthToRead); remainingLength -= lengthToRead; } async Task ReadBytes(int howmuch) { int readPos = 0; while (readPos < howmuch) { var actuallyRead = await stream.ReadAsync(buf, readPos, howmuch - readPos); if (actuallyRead == 0) throw new EndOfStreamException(); readPos += actuallyRead; } } Как сделать так, чтобы ожидание сигнала с сервера длилось бесконечно?
Никак. Рано или поздно сервер должен закрыть соединение (даже если миллион секунд, все равно спустя миллион секунд он закроет его). Используй поллинг/лонг поллинг или вебсокеты. Ну либо ебись с вот этим всем (че я должен за тебя гуглить?):