Пример #1
0
        /// <summary>
        /// 数据第二层分配中心;把数据归类
        /// </summary>
        /// <param name="stateOne">连接属性</param>
        /// <param name="statecode">收到的数据</param>
        internal void codeManage(TransmitData stateOne, DataModel statecode)
        {
            if (statecode == null || stateOne == null)
            {
                return;
            }
            DataModel stateCode = null;

            switch (statecode.State)
            {
            case CipherCode._commonCode:    //普通数据信息;抛给普通Code去处理
                stateCode = EncryptionDecrypt.deciphering(statecode.DateByte, stateOne);
                CommonCodeManage(stateOne, stateCode);
                break;

            case CipherCode._bigDateCode:                                                 //抛给分包Code去处理
                stateCode = EncDecSeparateDate.FileDecrypt(statecode.DateByte, stateOne); //返回一个带回复数据的模型
                CommonCodeManage(stateOne, stateCode);                                    //发送出去
                break;

            case CipherCode._fileCode:    //抛给文件处理器去处理;如果返回null就不用发送了
                byte[] haveDate = FileStart.ReceiveDateTO(statecode.DateByte, stateOne);
                if (haveDate != null)
                {
                    Send(stateOne, haveDate);
                }
                break;
            }
        }
Пример #2
0
        /// <summary>
        /// 接收到的普通数据处中心
        /// </summary>
        /// <param name="stateOne">StateBase</param>
        /// <param name="stateCode">StateCode</param>
        internal void CommonCodeManage(TransmitData stateOne, DataModel stateCode)
        {
            if (stateCode == null || stateOne == null)
            {
                return;
            }
            switch (stateCode.State)
            {
            case CipherCode._textCode:    //文本信息
                //发送回复数据
                Send(stateOne, stateCode.ReplyDate);
                OnAcceptString(stateOne.IpEndPoint, stateCode.Datestring);     //触发文本收到的事件
                break;

            case CipherCode._photographCode:    //图片信息
                //发送回复数据
                Send(stateOne, stateCode.ReplyDate);
                OnAcceptByte(stateOne.IpEndPoint, stateCode.DateByte);    //触发图片收到的事件
                break;

            case CipherCode._dateSuccess:           //数据发送成功
                stateOne.SendDate = null;
                OndateSuccess(stateOne.IpEndPoint); //对方收到触发事件
                break;

            case 0:    //说明这个数据只要直接回复给对方就可以了
                Send(stateOne, stateCode.ReplyDate);
                break;
            }
        }
Пример #3
0
        /// <summary>
        /// 最基础的Udp异步发送
        /// </summary>
        /// <param name="stateBase">StateBase</param>
        /// <param name="bytes">数据</param>
        override internal void Send(TransmitData stateBase, byte[] bytes)
        {
            if (stateBase == null)
            {
                return;
            }
            EndPoint remoteEndPoint = (EndPoint)stateBase.IpEndPoint;

            byte[] sendDate = UdpPortSetGet.SetPort(Port, bytes);
            try
            {
                state.WorkSocket.BeginSendTo(sendDate, 0, sendDate.Length, 0, remoteEndPoint, new AsyncCallback(SendCallback), state.WorkSocket);
            }
            catch { }
            #region 异步发送的另一种方法
            //try
            //{
            //    EndPoint remoteEndPoint = (EndPoint)stateBase.IpEndPoint;
            //    state.SendSocketArgs.SetBuffer(bytes, 0, bytes.Length);
            //    state.SendSocketArgs.RemoteEndPoint = remoteEndPoint;
            //   bool bb= state.WorkSocket.SendToAsync(state.SendSocketArgs);
            //   if (bb == false)
            //   {
            //       state.SendSocketArgs = new SocketAsyncEventArgs();
            //       Send(stateBase, bytes);
            //   }
            //}
            //catch {}
            #endregion
        }
Пример #4
0
 /// <summary>
 /// 对文件进行续传;
 /// </summary>
 /// <param name="stateOne">StateBase</param>
 /// <param name="fileLable">文件标签</param>
 internal void FileContinue(TransmitData stateOne, int fileLable)
 {
     byte[] haveDate = FileStart.FileContinue(fileLable, stateOne);
     if (haveDate == null)
     {
         throw new Exception("文件不存在或状态不在暂停状态");
     }
     Send(stateOne, haveDate);
 }
Пример #5
0
        /// <summary>
        /// 服务器向客户端发送图片数据
        /// </summary>
        /// <param name="stateOne">StateBase</param>
        /// <param name="data">未加密的数据</param>
        internal void sendMessage(TransmitData stateOne, byte[] data)
        {
            if (stateOne == null)
            {
                return;
            }
            DataModel stateCode = new DataModel(CipherCode._photographCode, data);

            //取得要发数据
            byte[] sendDate = EncryptionDecrypt.encryption(stateCode, stateOne);
            stateOne.SendDate = sendDate;
            Send(stateOne, sendDate);
        }
Пример #6
0
        /// <summary>
        /// 发送文本数据
        /// </summary>
        /// <param name="stateOne">StateBase</param>
        /// <param name="data">未加密的数据</param>
        internal void sendMessage(TransmitData stateOne, string data)
        {
            if (stateOne == null)
            {
                return;
            }
            //建立一个数据
            DataModel stateCode = new DataModel(CipherCode._textCode, data);

            //对一个数据进行加密-这里应该是把数据装入快速盒子
            byte[] sendDate = EncryptionDecrypt.encryption(stateCode, stateOne);
            //放入传输的快递盒子
            stateOne.SendDate = sendDate;
            //发送出去()//在这里发送时再进行粘包处理 前面为粘包代码4位+sendDate包长度4位+sendDate
            Send(stateOne, sendDate);
        }
Пример #7
0
        /// <summary>
        /// 发送文件
        /// </summary>
        /// <param name="stateOne">StateBase</param>
        /// <param name="fileName">文件地址</param>
        /// <returns>文件标签,首先要注册文件发送系统;会返回一个整数型的文件标签;用来控制这个文件以后一系列操作</returns>
        internal int FileSend(TransmitData stateOne, string fileName)
        {
            if (FileStart.fileSend == null)
            {
                throw new Exception("请先注册文件发送系统");
            }
            int haveInt = 0;

            byte[] haveByte = null;
            try
            {
                haveByte = FileStart.fileSend.Send(ref haveInt, fileName, stateOne);
            }
            catch { throw; }
            Send(stateOne, haveByte);
            return(haveInt);
        }
Пример #8
0
        /// <summary>
        /// 发送完数据之后的回调函数
        /// </summary>
        /// <param name="ar">Clicent</param>
        private void SendCallback(IAsyncResult ar)
        {
            TransmitData stateBase = (TransmitData)ar.AsyncState;

            if (stateBase == null)
            {
                return;
            }
            Socket handler = stateBase.WorkSocket;

            try
            {
                int bytesSent = handler.EndSend(ar);
            }
            catch
            {
            }
        }
Пример #9
0
        /// <summary>
        /// 向服务器发送数据,最基础和原始的
        /// </summary>
        /// <param name="stateBase">StateBase</param>
        /// <param name="data">发送的数据</param>
        override internal void Send(TransmitData stateBase, byte[] data) //实现客户端虚方法
        {
            if (stateBase == null)
            {
                return;
            }
            Socket handler = stateBase.WorkSocket;

            //对data数据进行粘包加密
            StickPackage.EncryptionPackage(ref data);
            try
            {
                //发送
                handler.BeginSend(data, 0, data.Length, 0, new AsyncCallback(SendCallback), handler);
            }
            catch
            {
            }
        }
Пример #10
0
 /// <summary>
 /// 向客户端发送数据,最基础的发送
 /// </summary>
 /// <param name="stateBase">TcpState</param>
 /// <param name="data">发送的数据</param>
 override internal void Send(TransmitData stateBase, byte[] data) //实现服务端虚方法
 {
     if (stateBase == null)
     {
         return;
     }
     StickPackage.EncryptionPackage(ref data);
     //MessageBox.Show(data.Length.ToString()+"你好"+data[9].ToString());
     try
     {
         stateBase.WorkSocket.BeginSend(data, 0, data.Length, 0, new AsyncCallback(SendCallback), stateBase);
     }
     catch (Exception Ex)
     {
         int i = Ex.Message.IndexOf("远程主机强迫关闭了一个现有的连接");
         if (i != -1)
         {
             TcpTransmitBox stateOne = IPEndPointToState(stateBase.IpEndPoint);
             socketRemove(stateOne, Ex.Message);
         }
     }
 }
Пример #11
0
 /// <summary>
 /// 发送字节数据(基础虚方法)
 /// </summary>
 /// <param name="stateOne">StateBase</param>
 /// <param name="data">发送的数据</param>
 virtual internal void Send(TransmitData stateOne, byte[] data)
 {
 }