示例#1
0
 protected void Close()
 {
     lock (mCloseLock)
     {
         if (mIsClosed)
         {
             return;
         }
         mSocketTalker.Close();
         CloseCreatedResources();
         mIsClosed = true;
     }
 }
示例#2
0
        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();
                }
            }
        }
示例#3
0
 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;
     }
 }
示例#4
0
        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();
                }
            }
        }