protected void Close() { lock (mCloseLock) { if (mIsClosed) { return; } mSocketTalker.Close(); CloseCreatedResources(); mIsClosed = true; } }
private void SendContent() { mSocketTalker = new SocketTalker(mConnector.Socket); try { Content content = new Content(ContentPath); switch (content.Type) { case Content.TYPE_NOT_FOUND: mSocketTalker.SendString(" "); throw new KnownException("找不到路径 " + content.Path + " 所代表的内容。"); case Content.TYPE_DRIVER: mSocketTalker.SendString(" "); throw new KnownException("路径 " + content.Path + " 代表的是一个驱动器,无法下载。"); case Content.TYPE_FILE: mFileNameStartIndex = GetFileContainer(content.Path).Length; SendFile(content.Path); mSocketTalker.SendString(" "); break; case Content.TYPE_DIRECTORY: mFileNameStartIndex = GetDirectoryContainer(content.Path).Length; SendDirectory(content.Path); mSocketTalker.SendString(" "); break; } LogEvent("上传完成。"); } catch { LogEvent("上传文件出错,数据可能不完整,请关闭窗口并重试。"); } finally { if (mSocketTalker != null) { mSocketTalker.Close(); } if (mFileInfo != null) { mFileInfo = null; } if (mFileStream != null) { mFileStream.Close(); } } }
public void Close(Exception e) { lock (mCloseLock) { if (mIsClosed) { return; } mSocketTalker.Close(); CloseCreatedResources(); if (mForm != null && mOnConnectionErrorHandler != null) { OnConnectionErrorArgs args = new OnConnectionErrorArgs(); args.Error = e; mForm.Invoke(mOnConnectionErrorHandler, this, args); } mIsClosed = true; } }
private void ReceiveFiles() { SocketTalker socketTalker = new SocketTalker(mConnector.Socket); FileInfo fileInfo = null; FileStream fileStream = null; try { while (true) { string name = socketTalker.ReceiveString(); if (name == " ") { break; } LogEvent("正在接收 " + name + " ..."); string status = socketTalker.ReceiveString(); if (status == "OK") { string path = Path.Combine(ContainerPath, name); string dir = Path.GetDirectoryName(path); Directory.CreateDirectory(dir); fileInfo = new FileInfo(path); fileStream = fileInfo.OpenWrite(); long length = socketTalker.ReceiveLong(); byte[] buffer = new byte[16 * 1024]; long received = 0; while (received != length) { long toReceive = length - received; if (toReceive < buffer.Length) { int count = socketTalker.Socket.Receive(buffer, (int)toReceive, SocketFlags.None); received += count; fileStream.Write(buffer, 0, count); } else { int count = socketTalker.Socket.Receive(buffer, buffer.Length, SocketFlags.None); received += count; fileStream.Write(buffer, 0, count); } } fileStream.Flush(); fileStream.Close(); } else { LogEvent("接收 " + name + " 失败,远程文件无法读取!"); } } LogEvent("接收完成。"); } catch { LogEvent("接收文件出错,数据可能不完整,请关闭窗口并重试。"); } finally { if (socketTalker != null) { socketTalker.Close(); } if (fileInfo != null) { fileInfo = null; } if (fileStream != null) { fileStream.Close(); } } }