/// <summary>
 /// ��Է�UDP�˿ڷ�����������
 /// </summary>
 private void UdpHandshake()
 {
     try
     {
         CSS.IM.Library.Class.msgFile msg = new CSS.IM.Library.Class.msgFile();
         if (!UdpHandshakeInfoClass)//�������������
         {
             msg.InfoClass = (byte)CSS.IM.Library.Class.ProtocolFileTransmit.HandshakeLAN;
             this.sockUDP1.Send(this.OppositeUDPIP, this.OppositeUDPPort, msg.getBytes());
         }
         else if (UdpHandshakeInfoClass)//�������������
         {
             msg.InfoClass = (byte)CSS.IM.Library.Class.ProtocolFileTransmit.HandshakeWAN;
             this.sockUDP1.Send(this.OppositeUDPIP, this.OppositeUDPPort, msg.getBytes());
         }
     }
     catch { }
 }
 /// <summary>
 /// UDP���ݵ����¼�
 /// </summary>
 /// <param name="e">UDP���ݲ���</param>
 private void sockUDP1_DataArrival(object sender,CSS.IM.Library.Net.SockEventArgs  e)
 {
     //if (e.Data.Length < 10) return;
     CSS.IM.Library.Class.msgFile msg = new CSS.IM.Library.Class.msgFile(e.Data);
     this.DataArrival(msg,CSS.IM.Library.Class.NatClass.FullCone, e.IP,e.Port);
 }
 private void asyncTCPClient1_OnConnected(object sender,  CSS.IM.Library.Net.SockEventArgs  e)
 {
     //CSS.IM.Library.Calculate.WirteLog("������");
     CSS.IM.Library.Class.msgFile msg = new CSS.IM.Library.Class.msgFile((byte)CSS.IM.Library.Class.ProtocolFileTransmit.GetFileTransmitProxyID, -1, -1, 0, new byte[1]);
     this.asyncTCPClient1.SendData(msg.getBytes());//�������������ת����ID��
 }
 private void asyncTCPClient1_OnDataArrival(object sender, CSS.IM.Library.Net.SockEventArgs e)
 {
     //if (e.Data.Length < 10) return;
     CSS.IM.Library.Class.msgFile msg = new CSS.IM.Library.Class.msgFile(e.Data);
     this.DataArrival(msg,CSS.IM.Library.Class.NatClass.Tcp ,null,0);
 }
        /// <summary>
        /// ���öԷ��ļ�����UDP���ض˿� 
        /// </summary>
        /// <param name="Port">�ļ�����UDP���ض˿�</param>
        public void setFileTransmitGetUdpLocalPort(IPAddress ip,int Port, bool udpHandshakeInfoClass)
        {
            this.ServerIp = ip;
            this.OppositeUDPIP = ip;
            this.OppositeUDPPort = Port;//���öԷ�UDP�˿ں�
            this.UdpHandshakeInfoClass = udpHandshakeInfoClass;

            System.Threading.Thread.Sleep(100);

            if (!udpHandshakeInfoClass)//����Լ���δUDP����,���þ�������ʽͨ��
            {
                if (!this.sockUDP1.Listened)//���û������
                    this.UDPListen();//���UDP����
                if (!this.IsGetLanUDP && this.fileTransmitGetUDPPort != null)//��֮�Է����ض˿ڣ�������ö˿��¼�
                {
                    this.IsGetLanUDP = true;//��ʶ�Ѿ�������LAN UDP�¼�
                    this.fileTransmitGetUDPPort(this, this.selfUDPPort, false);
                }
                //Calculate.WirteLog(this._IsSend.ToString() + "����Լ���δUDP����,���þ�������ʽͨ��");
            }
            else if (udpHandshakeInfoClass)//���ù�������ʽͨ��
            {
                if (!this.sockUDP1.Listened)//���û������
                    this.UDPListen();//���UDP����
                CSS.IM.Library.Class.msgFile msg = new CSS.IM.Library.Class.msgFile();
                msg.InfoClass = (byte)CSS.IM.Library.Class.ProtocolFileTransmit.GetUDPWANInfo;//ͨ��Э��
                this.sockUDP1.Send(ServerIp, _serverUDPPort, msg.getBytes());//����ļ������׽��ֵĹ�����UDP�˿�
                //Calculate.WirteLog(this._IsSend.ToString() + "����ļ������׽��ֵĹ�����UDP�˿�");
            }

            if (!timersUdpPenetrate.Enabled)//���δ���֣���ʼ����
                timersUdpPenetrate.Enabled = true;//��ʼ��Է�UDP�˿�����(��),����ɹ�����ʾ���Խ���UDPͨ��
        }