private static void DoAcceptTcpClient(IAsyncResult ar) { IoAcceptState acceptState = (IoAcceptState)ar.AsyncState; try { TcpClient client = acceptState.EndAcceptTcpClient(ar); if (client == null) { acceptState.mHeader.SessionClosed(acceptState.mHeader.GetPID()); } else { IoClientState sockState = new IoClientState(acceptState.mHeader, acceptState.mBufferSize, client); acceptState.mHeader.ConnectOpened(sockState); //接收到连接消息 sockState.SetStream(client.GetStream()); sockState.BeginRead(); acceptState.BeginAcceptTcpClient(); } } catch (Exception ex) { acceptState.mHeader.SessionClosed(acceptState.mHeader.GetPID()); acceptState.mHeader.SessionException(acceptState, ex); } }
public void Start() { if (mTcpListener == null) { try { mTcpListener = new TcpListener(mAddress, mPort); mTcpListener.Start(); mIoAcceptState = new IoAcceptState(this, mTcpListener, mBufferSize); mIoAcceptState.BeginAcceptTcpClient(); mHeader.SessionOpened(this); } catch (Exception ex) { SessionException(this, ex); } } }