示例#1
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();
                }
            }
        }