Ejemplo n.º 1
0
 /// <summary>
 /// 图片传输前的获取对方的端口
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="Port"></param>
 /// <param name="udpHandshakeInfoClass"></param>
 private void imageTransmit_fileTransmitGetUDPPort(object sender, int Port, bool udpHandshakeInfoClass)
 {
     CSS.IM.Library.Class.Msg msg = new CSS.IM.Library.Class.Msg((byte)ProtocolClient.ImageTransmitGetUDPPort);
     msg.Content = TextEncoder.textToBytes((sender as CSS.IM.Library.Controls.p2pFileTransmitEX).FileMD5Value + "|" + Port.ToString() + "|" + udpHandshakeInfoClass.ToString());//将获得的本地UDP端口号传输给对方
     LB_sockUDP.Send(RemotBaseUDPIP, RemotBaseUDPPort, msg.getBytes());
 }
Ejemplo n.º 2
0
        /// <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 ImageTransfers(bool IsSend, string fullFileName, string FileName, int FileLen, string fileExtension, string FileMD5Value)
        {
            if (this.imageP2Ps.find(FileMD5Value) == null)//如果图片不在传输队列,则创建新文件传输组件进行传输
            {
                CSS.IM.Library.Controls.p2pFileTransmitEX imageTransmit = new CSS.IM.Library.Controls.p2pFileTransmitEX();
                this.imageP2Ps.add(imageTransmit);//添加文件传输组件到传输队列

                imageTransmit.fileTransmitGetUDPPort += new CSS.IM.Library.Controls.p2pFileTransmitEX.GetUDPPortEventHandler(imageTransmit_fileTransmitGetUDPPort);
                imageTransmit.fileTransmitted += new CSS.IM.Library.Controls.p2pFileTransmitEX.fileTransmittedEventHandler(imageTransmit_fileTransmitted);//图片传输结束
                imageTransmit.fileTransmitOutTime += new p2pFileTransmitEX.fileTransmitOutTimeEventHandler(imageTransmit_fileTransmitOutTime);
                //imageTransmit.fileTransmitConnected += new p2pFileTransmit.ConnectedEventHandler(imageTransmit_fileTransmitConnected);
                //imageTransmit.fileTransmitCancel += new p2pFileTransmit.fileTransmitCancelEventHandler(imageTransmit_fileTransmitCancel);//图片传输取消或异常中断
                //imageTransmit.getFileProxyID += new p2pFileTransmit.getFileProxyIDEventHandler(imageTransmit_getFileProxyID);
                //imageTransmit.fileTransmitting += new p2pFileTransmit.fileTransmittingEventHandler(imageTransmit_fileTransmitting);
                if (IsSend)
                {
                    string fileInfo = FileName + "|" + FileLen.ToString() + "|" + fileExtension + "|" + FileMD5Value;//初次请求发送文件时要先发送“控件参数”到对方,请求对方创建“文件发送控件”并建立连接
                    CSS.IM.Library.Class.Msg msg = new CSS.IM.Library.Class.Msg((byte)ProtocolClient.ImageTransmitRequest, TextEncoder.textToBytes(fileInfo));
                    this.LB_sockUDP.Send(RemotBaseUDPIP, RemotBaseUDPPort, msg.getBytes());
                    imageTransmit.ServerIp = RemotBaseUDPIP;
                }
                else
                {
                    System.IO.DirectoryInfo dInfo = new System.IO.DirectoryInfo(Util.receiveImage);
                    if (!dInfo.Exists)
                        dInfo.Create();
                    imageTransmit.ServerIp = RemotBaseUDPIP;
                    imageTransmit.startIncept(Util.receiveImage + FileMD5Value + fileExtension);//自动接收图片
                }
                imageTransmit.SetParameter(IsSend, fullFileName, FileName, FileLen, fileExtension, FileMD5Value);//设置文件传输组件相关参数
            }
        }
Ejemplo n.º 3
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();
        }
Ejemplo n.º 4
0
 void imageTransmit_fileTransmitGetUDPPort(object sender, int Port, bool udpHandshakeInfoClass)
 {
     Msg msg = new Msg((byte)ProtocolClient.ImageTransmitGetUDPPort);
     msg.Content = TextEncoder.textToBytes((sender as p2pFileTransmitEX).FileMD5Value + "|" + Port.ToString() + "|" + udpHandshakeInfoClass.ToString());//将获得的本地UDP端口号传输给对方
     sockUDP1.Send(BaseRemotUDPIP, BaseRemotUDPPort, msg.getBytes());
 }
Ejemplo n.º 5
0
 /// <summary>
 /// 文件传输组件事件:无法进行UDP P2P通信传输,采用TCP中转并从代理服务器上获得中转ID服务编号 
 /// </summary>
 /// <param name="sender">文件传输组件对像</param>
 /// <param name="proxyID">采用TCP中转并从代理服务器上获得中转的ID服务编号 </param>
 private void fSend_getFileProxyID(object sender, int proxyID)
 {
     Msg msg = new Msg((byte)ProtocolClient.FileTransmitGetOppositeID);
     msg.Content = TextEncoder.textToBytes((sender as p2pFile).FileMD5Value + "|" + proxyID.ToString());//将获得的服务器代理ID号传输给对方
     sockUDP1.Send(BaseRemotUDPIP, BaseRemotUDPPort, msg.getBytes());
     //AppendSystemRtf("获得文件传输中转服务ID:"+ proxyID.ToString());
 }
Ejemplo n.º 6
0
 /// <summary>
 /// 文件传输组件事件:创建了新的UDP套接字并已在随机端口上侦听
 /// </summary>
 /// <param name="sender">文件传输组件对像</param>
 /// <param name="Port">侦听端口</param>
 /// <param name="udpHandshakeInfoClass">与对方握手方式是局域网还是广域网,True为广域网,false为局域网</param>
 private void fSend_fileTransmitGetUdpLocalPort(object sender, int Port, bool udpHandshakeInfoClass)
 {
     Msg msg = new Msg((byte)ProtocolClient.FileTransmitGetUDPPort);
     msg.Content = TextEncoder.textToBytes((sender as p2pFile).FileMD5Value + "|" + Port.ToString() + "|" + udpHandshakeInfoClass.ToString());//将获得的本地UDP端口号传输给对方
     sockUDP1.Send(BaseRemotUDPIP, BaseRemotUDPPort, msg.getBytes());
     //FormAccess.sendMsgToOneUser(msg, this.currUserInfo);
     AppendSystemRtf("侦听UDP端口:" + Port.ToString());
     //this.infoMessage1.showMsg("侦听UDP端口:" + Port.ToString());
 }
Ejemplo n.º 7
0
        /// <summary>
        /// 文件传输组件事件:取消文件传输
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void fSend_fileTransmitCancel(object sender, fileTransmitEvnetArgs e)
        {
            p2pFile FileSend = (sender as p2pFile);
            delTabItem(FileSend);//删除文件传输Tab控件

            if (e.isSend)
                //this.infoMessage1.showMsg("您已经取消了文件 " + e.fileName + " 的传输.");
                 AppendSystemRtf("您已经取消了文件 " + e.fileName + " 的传输.");
            else
                AppendSystemRtf("对方已经取消了文件 " + e.fileName + " 的传输!");

            Msg msg = new Msg((byte)ProtocolClient.FileTransmitCancel, TextEncoder.textToBytes(e.FileMD5Value));
            sockUDP1.Send(BaseRemotUDPIP, BaseRemotUDPPort, msg.getBytes());
        }