示例#1
0
        public RCServer(Socket socket, TripleDESCryptoServiceProvider tdesProvider)
        {
            ICryptoTransform encryptor = tdesProvider.CreateEncryptor();
            ICryptoTransform decryptor = tdesProvider.CreateDecryptor();

            mSocketTalker = new SocketTalker(socket, encryptor, decryptor);
        }
示例#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();
                }
            }
        }
 public ListAllFilesProcessor(SocketTalker socketTalker)
     : base(socketTalker)
 {
 }
 public CopyContentsProcessor(SocketTalker socketTalker)
     : base(socketTalker)
 {
 }
示例#5
0
 public RCServer(Socket socket)
 {
     mSocketTalker = new SocketTalker(socket);
 }
 public RenameContentProcessor(SocketTalker socketTalker)
     : base(socketTalker)
 {
 }
 public GetContentProcessor(SocketTalker socketTalker)
     : base(socketTalker)
 {
 }
 public BasicProcessor(SocketTalker socketTalker)
 {
     mSocketTalker = socketTalker;
 }
示例#9
0
 public CreateDirectoryProcessor(SocketTalker socketTalker)
     : base(socketTalker)
 {
 }
 public DeleteContentsProcessor(SocketTalker socketTalker)
     : base(socketTalker)
 {
 }
 public ListContentsProcessor(SocketTalker socketTalker)
     : base(socketTalker)
 {
 }
 public MoveContentsProcessor(SocketTalker socketTalker)
     : base(socketTalker)
 {
 }
 public ListAllDirectoriesProcessor(SocketTalker socketTalker)
     : base(socketTalker)
 {
 }
示例#14
0
 public RCClient(Socket socket)
 {
     mSocketTalker = new SocketTalker(socket);
 }
示例#15
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();
                }
            }
        }
示例#16
0
 public StartProcessProcessor(SocketTalker socketTalker)
     : base(socketTalker)
 {
 }