Esempio n. 1
0
        //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();
        }
Esempio n. 2
0
 /// <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 { }
 }