Beispiel #1
0
        protected void EndReceive(IAsyncResult iar)
        {
            SocketAsyncState state = (SocketAsyncState)iar.AsyncState;

            byte[] data = Hander.EndReceive(iar); //接收的数据
            if (data.Length == 0)                 //如果接收数据长度为0,则断开连接
            {
                Disconnected(true);
                return;
            }

            Hander.BeginReceive(Stream, EndReceive, state); //再次开始接收数据
            if (ReceiveCompleted != null)                   //接收完成事件
            {
                ReceiveCompleted(this, new SocketEventArgs(this, SocketAsyncOperation.Receive)
                {
                    Data = data
                });
            }
        }
Beispiel #2
0
        /// <summary>
        /// 异步连接完成
        /// </summary>
        /// <param name="iar">异步结果</param>
        private void EndConnect(IAsyncResult iar)
        {
            SocketAsyncState state = (SocketAsyncState)iar.AsyncState;

            try
            {
                Socket.EndConnect(iar);
            }
            catch                                              //出现异常
            {
                state.Completed = true;                        //连接失败
                if (state.IsAsync && ConnectCompleted != null) //判断是否异步,如果异步则触发异步完成事件
                {
                    ConnectCompleted(this, new SocketEventArgs(this, SocketAsyncOperation.Connect));
                }
                return;
            }

            Stream = new NetworkStream(Socket); //连接成功,创建Socket网络流
            if (IsUseAuthenticate)              //
            {
                NegotiateStream negotiate = new NegotiateStream(Stream);
                negotiate.AuthenticateAsClient();
                while (!negotiate.IsMutuallyAuthenticated)
                {
                    System.Threading.Thread.Sleep(10);
                }
            }

            state.Completed = true;  //连接完成
            if (state.IsAsync && ConnectCompleted != null)
            {
                ConnectCompleted(this, new SocketEventArgs(this, SocketAsyncOperation.Connect));
            }

            Hander.BeginReceive(Stream, EndReceive, state);  //开始接收数据
        }