private static void SetBreakPointPostArg(BreakPointPost bpp, string value) { if (value.Contains("FileName")) { bpp.FileName = value.Split('|')[1]; } if (value.Contains("FileSize")) { bpp.FileSize = long.Parse(value.Split('|')[1]); } if (value.Contains("PackageSize")) { bpp.PackageSize = long.Parse(value.Split('|')[1]); } if (value.Contains("PackageCount")) { bpp.PackageCount = int.Parse(value.Split('|')[1]); } if (value.Contains("Index")) { bpp.Index = int.Parse(value.Split('|')[1]); } }
public TcpClient() { try { IPAddress ip = IPAddress.Parse("127.0.0.1"); IPEndPoint ep = new IPEndPoint(ip, 9110); using (Socket transferSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) { transferSocket.Connect(ep); Console.WriteLine("connect success..."); ReceiveConsole(transferSocket); ReceiveConsole(transferSocket); while (true) { var input = Console.ReadLine(); transferSocket.Send(Encoding.UTF8.GetBytes(input)); Thread.Sleep(100); if (input == "yes") { break; } else if (input == "no") { ReceiveConsole(transferSocket); return; } else { ReceiveConsole(transferSocket); } } ReceiveConsole(transferSocket); var downloadPath = string.Empty; while (true) { var input = Console.ReadLine(); try { DirectoryInfo di = new DirectoryInfo(input); if (!di.Exists) { Console.WriteLine("path is invalid, please reset it."); continue; } downloadPath = input; break; } catch { Console.WriteLine("path is invalid, please reset it."); } } transferSocket.Send(Encoding.UTF8.GetBytes("yes")); Thread.Sleep(100); while (true) { if (ReceiveConsole(transferSocket) == "send argument") { break; } } var tempCount = 0; var bpp = new BreakPointPost(); while (tempCount < 5) { SetBreakPointPostArg(bpp, ReceiveConsole(transferSocket)); tempCount++; } Console.WriteLine("argument received."); Console.WriteLine(""); downloadPath = Path.Combine(downloadPath, bpp.FileName); transferSocket.Send(Encoding.UTF8.GetBytes("argument received")); Thread.Sleep(100); while (true) { _receiveCount = transferSocket.Receive(_buffer); _receiveString = Encoding.UTF8.GetString(_buffer, 0, _receiveCount); if (_receiveString == "start") { while (true) { _receiveCount = transferSocket.Receive(_buffer); _receiveString = Encoding.UTF8.GetString(_buffer, 0, _receiveCount); if (_receiveString.Contains("Index")) { SetBreakPointPostArg(bpp, _receiveString); _buffer = new byte[bpp.PackageSize]; _receiveCount = transferSocket.Receive(_buffer); if ((bpp.Index + 1) < bpp.PackageCount && _receiveCount != bpp.PackageSize) { continue; } Console.WriteLine(string.Format("{0} download progress is {1}/{2}({3})", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), bpp.Index, bpp.PackageCount, _receiveCount)); FileWrite(downloadPath, bpp.Index, bpp.PackageSize, _receiveCount, _buffer); transferSocket.Send(Encoding.UTF8.GetBytes("success|" + bpp.Index)); Thread.Sleep(100); if (bpp.Index + 1 == bpp.PackageCount) { break; } } else if (_receiveString == "stop") { while (true) { if (ReceiveConsole(transferSocket) == "restart") { break; } } } } } if (bpp.Index + 1 == bpp.PackageCount) { bpp = null; break; } } while (true) { if (ReceiveConsole(transferSocket) == "finish") { break; } } } } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { Console.WriteLine("disconnect..."); Console.ReadKey(); } }