//public void sendFileTransfers(object pathob) //{ // FileInfo f = new FileInfo(pathob.ToString()); // this.FileTransfers(true, f.FullName, f.Name, (int)f.Length, f.Extension, Hasher.GetMD5Hash(f.FullName)); //} /// <summary> /// 发送或接收文件 /// </summary> /// <param name="IsSend">true是发送者,false是接收者</param> /// <param name="fullFileName">要发送的文件的绝对路径,如果接收则传空字符串</param> /// <param name="FileName">文件名</param> /// <param name="FileLen">文件的长度</param> /// <param name="fileExtension">文件扩展名</param> /// <param name="FileMD5Value">文件的MD5值</param> public void FileTransfers(bool IsSend, string fullFileName, string FileName, int FileLen, string fileExtension, string FileMD5Value) { if (IsSend && IsTransfers(FileMD5Value)) { this.AppendSystemRtf(FileName + " 已在传输队列中,请不要重复发送!"); return;//如果要发送的文件已经在传输队列,则退出 } p2pFile fSend = new p2pFile();//创建一个P2P文件传输组件用于传送文件 fSend.Name = FileMD5Value; TabPage tab = new TabPage(FileName); tab.Controls.Add(fSend); tab.Tag = fSend; filelistfrom.tabControl1.TabPages.Add(tab); if (IsSend) { string fileInfo = FileName + "|" + FileLen.ToString() + "|" + fileExtension + "|" + FileMD5Value;//初次请求发送文件时要先发送“控件参数”到对方,请求对方创建“文件发送控件”并建立连接 Msg msg = new Msg((byte)ProtocolClient.FileTransmitRequest, TextEncoder.textToBytes(fileInfo)); this.sockUDP1.Send(BaseRemotUDPIP, BaseRemotUDPPort, msg.getBytes()); AppendSystemRtf("请等待对方接收文件 " + FileName + ") 。请等待回应或取消传输。"); //this.infoMessage1.showMsg("请等待对方接收文件 " + FileName + ") 。请等待回应或取消传输。"); } else { AppendSystemRtf("对方要传送文件 " + FileName + "(" + Calculate.GetSizeStr(FileLen) + ")" + " 给您,请接收或取消传输。"); } UserInfo self = new UserInfo();//将自己的在线基本信息告诉文件传输组件,使传输组件中的套接字确定文件数据包的网络传输协议 self.LocalIP = Program.LocalHostIP; self.IP = Program.LocalHostIP; UserInfo Opposite = new UserInfo();//将对方的在线基本信息告诉文件传输组件,使传输组件中的套接字确定文件数据包的网络传输协议 Opposite.LocalIP = BaseRemotUDPIP; Opposite.IP = BaseRemotUDPIP; fSend.SetParameter(IsSend, fullFileName, FileName, FileLen, fileExtension, FileMD5Value, self, Opposite);//设置文件传输组件相关参数 fSend.fileTransmitBefore += new p2pFile.fileTransmitBeforeEventHandler(fSend_fileTransmitBefore);//文件开始传输事件 fSend.fileTransmitCancel += new p2pFile.fileTransmitCancelEventHandler(fSend_fileTransmitCancel);//文件传输取消事件 fSend.fileTransmitError += new p2pFile.fileTransmitErrorEventHandler(fSend_fileTransmitError);//文件传输错误事件 fSend.fileTransmitted += new p2pFile.fileTransmittedEventHandler(fSend_fileTransmitted);//文件传输完成事件 fSend.getFileProxyID += new p2pFile.getFileProxyIDEventHandler(fSend_getFileProxyID);//文件传输获取中转服务ID fSend.fileTransmitGetUDPPort += new p2pFile.GetUDPPortEventHandler(fSend_fileTransmitGetUdpLocalPort);//获得文件传输套接字UDP侦听端口 fSend.fileTransmitConnected += new p2pFile.ConnectedEventHandler(fSend_fileTransmitConnected);//当文件传输与对方建立传输通道事件 fSend.Dock = System.Windows.Forms.DockStyle.Fill; this.filelistfrom.tabControl1.SelectedTab = tab; try { filelistfrom.TopMost = true; filelistfrom.Show(); } catch (Exception) { } filelistfrom.Activate(); }
/// <summary> /// 删除文件传输控件,清除相关控件资源 /// </summary> /// <param name="p2pFile"></param> private void delTabItem(p2pFile p2pFile) { try { foreach (TabPage tabItem in filelistfrom.tabControl1.TabPages) { if ((tabItem.Tag as p2pFile).FileMD5Value == p2pFile.FileMD5Value) { p2pFile.Dispose(); this.filelistfrom.tabControl1.TabPages.Remove(tabItem); tabItem.Dispose(); } } } catch { } }