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 }); } }
/// <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); //开始接收数据 }