/// <summary> /// ��Է�UDP�˿ڷ����������� /// </summary> private void UdpHandshake() { try { IMLibrary.Class.msgFile msg = new IMLibrary.Class.msgFile(); if (!UdpHandshakeInfoClass)//���Ϊ���������� { msg.InfoClass = (byte)IMLibrary.Class.ProtocolFileTransmit.HandshakeLAN; this.sockUDP1.Send(this._OppositeUserInfo.LocalIP, this.OppositeUDPPort, msg.getBytes()); } else if (UdpHandshakeInfoClass)//���Ϊ���������� { msg.InfoClass = (byte)IMLibrary.Class.ProtocolFileTransmit.HandshakeWAN; this.sockUDP1.Send(this._OppositeUserInfo.IP, this.OppositeUDPPort, msg.getBytes()); } } catch { } }
/// <summary> /// ���˫�����ӵĹ��� /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void timerConnection_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { if (this.netClass != IMLibrary.Class.NetCommunicationClass.None)//���UDPͨ�ųɹ� { this.timerConnection.Enabled = false;//ֹͣͨ��״̬��� if (this.fileTransmitConnected != null)//����ͨ�ųɹ��¼������˳�ͨ�Ų��� this.fileTransmitConnected(this, this.netClass); return; } TimeOutCount++; if (TimeOutCount == 1) ///����˫������ͬһ�������ڣ������P2P UDP��ʽ�շ����� { this.UdpHandshakeInfoClass = false;//UDP���������ֿ��ܣ���һ��Ϊ����������Ϊfalse���ڶ���Ϊ����������Ϊtrue;��ʱ���Ϊ������false if (!this.sockUDP1.Listened)//���û�������������� this.UDPListen(); if (!this.IsGetLanUDP && this.fileTransmitGetUDPPort != null)//����UDP�˿������ɹ��¼����Ա�Է���֪�Լ���UDP�˿� { this.IsGetLanUDP = true;//��ʶ�Ѿ�������LanUDP�˿ڴ����¼� this.fileTransmitGetUDPPort(this, this.selfUDPPort, this.UdpHandshakeInfoClass); } } ///����ִ�е������ʾ˫������Ϊ������ͨ�Ų����� ///2�뿪ʼ���Թ�����UDPͨ�� if (TimeOutCount == 20) if (this._selfUserInfo.NetClass < (byte)IMLibrary.Class.NatClass.Tcp && this._OppositeUserInfo.NetClass < (byte)IMLibrary.Class.NatClass.Tcp) { //���˫�����ڹ������ϣ�����UDPͨ�ţ���˫�������� Symmetric NAT������ù����� P2P UDP ͨ�� this.UdpHandshakeInfoClass = true;//UDP���������ֿ��ܣ���һ��Ϊ����������Ϊfalse���ڶ���Ϊ����������Ϊtrue;��ʱ���Ϊ������ if (!this.sockUDP1.Listened)//���û�������������� this.UDPListen(); IMLibrary.Class.msgFile msg = new IMLibrary.Class.msgFile(); msg.InfoClass = (byte)IMLibrary.Class.ProtocolFileTransmit.GetUDPWANInfo;//ͨ��Э�飬����ļ��������ֵĹ�����UDP�˿� this.sockUDP1.Send(_serverIp, _serverUDPPort, msg.getBytes()); } else { TimeOutCount = 40;//���ֻ��ͨ����������ļ�����ʼʹ�ô��� } //4���ʼ���Թ����� if(TimeOutCount==40) { //����û��Լ���Է�����һ��ʹ��TCP��¼������Ҫʹ��TCP�����������ת���ݴ��� this.asyncTCPClient1.InitSocket(this._selfUserInfo.LocalIP, 0);//�����TCP����˿� this.asyncTCPClient1.Connect(this._serverIp, _serverTCPPort);//TCP������ӷ����� } ///����ִ�е��˱�ʾ���ܽ����κ��ļ��������ӣ������������¼� //7���ʼ���Թ����� if (TimeOutCount > 70) { if (this.fileTransmitConnected != null)//����ͨ�ųɹ��¼������˳�ͨ�Ų��� this.fileTransmitConnected(this, this.netClass); this.timerConnection.Enabled = false;//ֹͣͨ��״̬��� this.CancelTransmit(true);//ȡ���ļ����� return; } }
/// <summary> /// UDP���ݵ����¼� /// </summary> /// <param name="e">UDP���ݲ���</param> private void sockUDP1_DataArrival(object sender,IMLibrary.Net.SockEventArgs e) { //if (e.Data.Length < 10) return; IMLibrary.Class.msgFile msg = new IMLibrary.Class.msgFile(e.Data); this.DataArrival(msg,IMLibrary.Class.NatClass.FullCone, e.IP,e.Port); }
private void asyncTCPClient1_OnDataArrival(object sender, IMLibrary.Net.SockEventArgs e) { //if (e.Data.Length < 10) return; IMLibrary.Class.msgFile msg = new IMLibrary.Class.msgFile(e.Data); this.DataArrival(msg,IMLibrary.Class.NatClass.Tcp ,null,0); }
private void asyncTCPClient1_OnConnected(object sender, IMLibrary.Net.SockEventArgs e) { //IMLibrary.Calculate.WirteLog("������"); IMLibrary.Class.msgFile msg = new IMLibrary.Class.msgFile((byte)IMLibrary.Class.ProtocolFileTransmit.GetFileTransmitProxyID, -1, -1, 0, new byte[1]); this.asyncTCPClient1.SendData(msg.getBytes());//�������������ת����ID�� }
/// <summary> /// ���öԷ��ļ�����UDP���ض˿� /// </summary> /// <param name="Port">�ļ�����UDP���ض˿�</param> public void setFileTransmitGetUdpLocalPort(int Port, bool udpHandshakeInfoClass) { 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���� IMLibrary.Class.msgFile msg = new IMLibrary.Class.msgFile(); msg.InfoClass = (byte)IMLibrary.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ͨ�� }