예제 #1
0
        /// <summary>
        ///     接收到信息的回调函数
        /// </summary>
        /// <param name="iar"></param>
        private void EndReceiveFromCallback(IAsyncResult iar)
        {
            int byteRead = 0;

            try
            {
                //完成接收
                byteRead = state.WorkSocket.EndReceiveFrom(iar, ref state.RemoteEP);
            }
            catch
            {
            }
            if (byteRead > 0)
            {
                state.IpEndPoint = (IPEndPoint)state.RemoteEP;
                byte[] haveDate = ReceiveDateOne.DateOneManage(state, byteRead); //接收完成之后对数组进行重置
                BeginReceiveFrom();
                int havePort = UdpPortSetGet.GetPort(ref haveDate);
                if (havePort != 0)
                {
                    state.IpEndPoint.Port = havePort;
                }
                StateCode statecode = ReceiveDateDistribution.Distribution(haveDate);
                codeManage(state, statecode);
            }
            else
            {
                BeginReceiveFrom();
            }
        }
예제 #2
0
        /// <summary>
        ///     当接收到数据之后的回调函数
        /// </summary>
        /// <param name="ar"></param>
        private void ReadCallback(IAsyncResult ar)
        {
            if (stateOne == null)
            {
                return;
            }
            Socket handler = stateOne.WorkSocket;

            try
            {
                int bytesRead = handler.EndReceive(ar);
                if (bytesRead > 0)
                {
                    //MessageBox.Show(stateOne.Buffer[0].ToString());
                    byte[] haveDate = ReceiveDateOne.DateOneManage(stateOne, bytesRead); //接收完成之后对数组进行重置

                    handler.BeginReceive(stateOne.Buffer, 0, stateOne.Buffer.Length, 0, ReadCallback,
                                         stateOne);
                    TcpDateOne(stateOne, haveDate);
                }
                else
                {
                    handler.BeginReceive(stateOne.Buffer, 0, stateOne.Buffer.Length, 0, ReadCallback,
                                         stateOne);
                }
            }
            catch (Exception Ex)
            {
                lostClient(Ex.Message); //当突然断开的时候
            }
        }
예제 #3
0
        /// <summary>
        /// 当接收到数据之后的回调函数
        /// </summary>
        /// <param name="ar"></param>
        private void ReadCallback(IAsyncResult ar)
        {
            TcpState stateOne = (TcpState)ar.AsyncState;
            Socket   handler  = stateOne.WorkSocket;

            try
            {
                int bytesRead = handler.EndReceive(ar);
                if (bytesRead > 0)
                {
                    byte[] haveDate = ReceiveDateOne.DateOneManage(stateOne, bytesRead); //接收完成之后对数组进行重置
                    string str      = System.Text.Encoding.Default.GetString(haveDate);
                    OnAcceptString(stateOne.IpEndPoint, str);                            //触发文本收到的事件
                    //MessageBox.Show(str);
                    handler.BeginReceive(stateOne.Buffer, 0, stateOne.Buffer.Length, 0, new AsyncCallback(ReadCallback), stateOne);
                    //TcpDateOne(stateOne, haveDate);
                }
                else
                {
                    handler.BeginReceive(stateOne.Buffer, 0, stateOne.Buffer.Length, 0, new AsyncCallback(ReadCallback), stateOne);
                }
            }
            catch (Exception Ex)
            {
                int i = Ex.Message.IndexOf("远程主机强迫关闭了一个现有的连接");
                if (stateOne != null && i != -1)
                {
                    socketRemove(stateOne, Ex.Message);
                }
            }
        }
예제 #4
0
        /// <summary>
        /// 当接收到数据之后的回调函数
        /// </summary>
        /// <param name="ar"></param>
        private void ReadCallback(IAsyncResult ar)
        {
            TcpState stateOne = (TcpState)ar.AsyncState;
            Socket   handler  = stateOne.WorkSocket;

            try
            {
                int bytesRead = handler.EndReceive(ar);
                if (bytesRead > 0)
                {
                    byte[] haveDate = ReceiveDateOne.DateOneManage(stateOne, bytesRead);//接收完成之后对数组进行重置
                    handler.BeginReceive(stateOne.Buffer, 0, stateOne.Buffer.Length, 0, new AsyncCallback(ReadCallback), stateOne);
                    TcpDateOne(stateOne, haveDate);
                }
                else
                {
                    handler.BeginReceive(stateOne.Buffer, 0, stateOne.Buffer.Length, 0, new AsyncCallback(ReadCallback), stateOne);
                }
            }
            catch (Exception Ex)
            {
                int i = Ex.Message.IndexOf("远程主机强迫关闭了一个现有的连接");
                if (stateOne != null && i != -1)
                {
                    socketRemove(stateOne, Ex.Message);
                }
            }
        }