/// <summary> /// UdpClient 收到数据 /// </summary> /// <param name="ar">Ar.</param> private void OnReceive(IAsyncResult ar) { UdpClient client = (UdpClient)ar.AsyncState; lock (LOCK_OBJECT) { try { // 不是当前连接 if (client != m_client) { client.Close(); return; } IPEndPoint remoteEP = null; Byte[] data = client.EndReceive(ar, ref remoteEP); m_kcp.Input(data); for (int size = m_kcp.PeekSize(); size > 0; size = m_kcp.PeekSize()) { var buffer = new byte[size]; if (m_kcp.Recv(buffer) > 0) { m_msgProtocol.Receive(buffer, buffer.Length); } } m_updateDirty = true; // 继续等待异步 OnReceive m_client.BeginReceive(new AsyncCallback(OnReceive), m_client); } catch (Exception e) { Close("Error - OnReceive: " + e.Message); } } }