static internal void Run(UdtSocket conn, string file, bool bVerbose) { int ini = Environment.TickCount; using (var netStream = new UdtNetworkStream(conn)) using (var writer = new BinaryWriter(netStream)) using (var reader = new BinaryReader(netStream)) using (var fileReader = new FileStream(file, FileMode.Open, FileAccess.Read)) { long fileSize = new FileInfo(file).Length; writer.Write(Path.GetFileName(file)); writer.Write(fileSize); byte[] buffer = new byte[512 * 1024]; long pos = 0; int i = 0; ConsoleProgress.Draw(i++, pos, fileSize, ini, Console.WindowWidth / 3); while (pos < fileSize) { int toSend = buffer.Length < (fileSize - pos) ? buffer.Length : (int)(fileSize - pos); fileReader.Read(buffer, 0, toSend); int iteration = Environment.TickCount; writer.Write(toSend); conn.Send(buffer, 0, toSend); if (!reader.ReadBoolean()) { Console.WriteLine("Error in transmission"); return; } pos += toSend; ConsoleProgress.Draw(i++, pos, fileSize, ini, Console.WindowWidth / 3); if (bVerbose) { Console.WriteLine(); Console.WriteLine("Current: {0} / s", SizeConverter.ConvertToSizeString(toSend / (Environment.TickCount - iteration) * 1000)); } } } }
static internal void Run(UdtSocket conn) { int ini = Environment.TickCount; using (UdtNetworkStream netStream = new UdtNetworkStream(conn)) using (BinaryWriter writer = new BinaryWriter(netStream)) using (BinaryReader reader = new BinaryReader(netStream)) { string fileName = reader.ReadString(); long size = reader.ReadInt64(); byte[] buffer = new byte[4 * 1024 * 1024]; int i = 0; ConsoleProgress.Draw(i++, 0, size, ini, Console.WindowWidth / 2); using (FileStream fileStream = new FileStream(fileName, FileMode.Create)) { long read = 0; while (read < size) { int toRecv = reader.ReadInt32(); ReadFragment(reader, toRecv, buffer); fileStream.Write(buffer, 0, toRecv); read += toRecv; writer.Write(true); ConsoleProgress.Draw(i++, read, size, ini, Console.WindowWidth / 2); } } } }