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); } }
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()); }