Esempio n. 1
0
 private void FileRecvCallBack(object sender, MessageEventArgs e)
 {
     try
     {
         TcpClient fileRecvClient = e.MessageObj[0] as TcpClient;
         if (fileRecvClient == null)
         {
             return;
         }
         NetworkStream netStream = fileRecvClient.GetStream();
         BinaryReader  br        = new BinaryReader(netStream);
         string        strID     = br.ReadString();
         fileWaitMutex.WaitOne();
         if (!dicFileWait.ContainsKey(strID))
         {
             br.Close();
             netStream.Close();
             fileRecvClient.Close();
             fileWaitMutex.ReleaseMutex();
         }
         FileWaitObjcet fro = dicFileWait[strID];
         dicFileWait.Remove(strID);
         fileWaitMutex.ReleaseMutex();
         FileStream fs       = new FileStream(fro.SavePath, FileMode.Create);
         int        readCtn  = 0;
         byte[]     readBuff = new byte[NetClass.BUFF_SIZE];
         while ((readCtn = br.Read(readBuff, 0, NetClass.BUFF_SIZE)) > 0)
         {
             fs.Write(readBuff, 0, readCtn);
         }
         fs.Close();
         br.Close();
         netStream.Close();
         fileRecvClient.Close();
         System.Diagnostics.Process.Start(fro.SavePath);
     }
     catch (Exception ex)
     {
         Debug.WriteLine(ex.Message);
     }
 }
Esempio n. 2
0
        public void FileRequest(IPEndPoint remote, string path)
        {
            DialogResult dr           = MessageBox.Show("是否保存文件:是[保存并打开],否[仅打开]", "选择", MessageBoxButtons.YesNoCancel);
            string       fileSavePath = "";

            if (dr == DialogResult.Yes)
            {
                SaveFileDialog sfdlg = new SaveFileDialog();
                sfdlg.DefaultExt       = path.Substring(path.LastIndexOf("."));
                sfdlg.RestoreDirectory = true;
                if (sfdlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    fileSavePath = sfdlg.FileName;
                }
            }
            else if (dr == DialogResult.No)
            {
                int loca = path.LastIndexOf('\\');
                //int DateTime.Now.ToString format, fff... stands for milliseconds
                //for example ss-ffff:57-2141
                fileSavePath = recvTmpPath + "\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + "_";
                string fileSaveName;
                while (true)
                {
                    fileSaveName = CommMethod.RandString(4) + "_";
                    if (loca > 0)
                    {
                        fileSaveName += path.Substring(loca + 1);
                    }
                    else
                    {
                        fileSaveName += path;
                    }
                    FileInfo fs = new FileInfo(fileSavePath + fileSaveName);
                    if (!fs.Exists)
                    {
                        fileSavePath += fileSaveName;
                        break;
                    }
                }
            }
            else
            {
                return;
            }
            FileWaitObjcet fwo = new FileWaitObjcet();

            fwo.ID       = CommMethod.RandString(FileWaitObjcet.IDLength);
            fwo.SavePath = fileSavePath;

            fileWaitMutex.WaitOne();
            while (dicFileWait.ContainsKey(fwo.ID))
            {
                fwo.ID = CommMethod.RandString(FileWaitObjcet.IDLength);
            }
            dicFileWait.Add(fwo.ID, fwo);
            fileWaitMutex.ReleaseMutex();

            FileRequestObjcet fro = new FileRequestObjcet(fwo.ID, netc.LocalFileRecvIEP, path);

            netc.SendTCPString(remote, FileRequestHead + fro.ToString());
        }