static void RecieveFile(String path, Socket socket /*, UInt64 fileSize*/, IProgress <FileTransferProgressArgs> fileTransferProgress) { UInt16 packetSize = 1024; FileStream downloadFileStream = null; try { downloadFileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None); var buffer = new byte[packetSize]; var progressArgs = new FileTransferProgressArgs(); UInt16 bytesRead = 0; progressArgs.packetsTransferred = 0; /*progressArgs.FileSize = fileSize; * progressArgs.numberOfPackets = (fileSize + packetSize - 1) / packetSize;*/ while ((bytesRead = (UInt16)socket.Receive(buffer)) > 0) { progressArgs.packetsTransferred += (UInt64)(bytesRead / packetSize); downloadFileStream.Write(buffer, 0, bytesRead); fileTransferProgress.Report(progressArgs); } downloadFileStream.Close(); } catch (FileNotFoundException) { } catch (Exception) { if (downloadFileStream != null) { downloadFileStream.Close(); } } }
static void SendFile(string path, Socket socket, IProgress <FileTransferProgressArgs> fileTransferProgress) { int packetSize = 1024; FileStream uploadFileStream = null; try { uploadFileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, (int)packetSize); UInt64 fileSize = 0; var buffer = new byte[packetSize]; fileSize = (UInt64)uploadFileStream.Length; UInt64 numberOfPackets = (UInt64)((fileSize + (ulong)packetSize - 1) / ((ulong)packetSize)); var progressArgs = new FileTransferProgressArgs(); progressArgs.FileSize = fileSize; progressArgs.numberOfPackets = numberOfPackets; progressArgs.packetsTransferred = 0; for (UInt64 tempor = 0; tempor < (numberOfPackets - 1); tempor++) { uploadFileStream.Read(buffer, 0, packetSize); socket.Send(buffer); progressArgs.packetsTransferred += 1; fileTransferProgress.Report(progressArgs); } packetSize = (int)(fileSize - ((numberOfPackets - 1) * 1024)); buffer = new byte[(int)packetSize]; uploadFileStream.Read(buffer, 0, packetSize); socket.Send(buffer); progressArgs.packetsTransferred += 1; fileTransferProgress.Report(progressArgs); uploadFileStream.Close(); } catch (FileNotFoundException) { } catch (Exception) { if (uploadFileStream != null) { uploadFileStream.Close(); } } }
public void resetProgress() { progress = null; }
//File Transfer Process Progress public void updateProgress(FileTransferProgressArgs args) { progress = args; }