public void SendFile(string path) { long fileSize = FileHandler.GetFileSize(path); string fileName = FileHandler.GetFileName(path); var header = new Header().Create(fileName, fileSize); networkStreamHandler.Write(header); networkStreamHandler.Write(Encoding.UTF8.GetBytes(fileName)); long parts = SpecificationHelper.GetParts(fileSize); Console.WriteLine("Will Send {0} parts", parts); long offset = 0; long currentPart = 1; while (fileSize > offset) { byte[] data; if (currentPart == parts) { var lastPartSize = (int)(fileSize - offset); data = fileStreamHandler.Read(path, offset, lastPartSize); offset += lastPartSize; } else { data = fileStreamHandler.Read(path, offset, Specification.MaxPacketSize); offset += Specification.MaxPacketSize; } networkStreamHandler.Write(data); currentPart++; } }