private void ReceiveForEver() { while (working) { try { // TODO: 这里只能读取一个buffer大小, 后续优化 byte[] bytes = new byte[1024 * 4]; int bytesRec = _client.Receive(bytes); byte[] data = new byte[bytesRec]; ByteUtils.arraycopy(bytes, 0, data, 0, bytesRec); RawMessage raw = RawMessageEncoder.me.decode(data); if (raw.getMessageType() != (int)RawMessageType.PING_COMMAND) { logger.InfoFormat("receive data is {0}, {1}, {2}", raw.totalLength, raw.messageType, raw.bodyText); } MessageDispatcher.ME.Dispatch(raw); this.anotherRecvCallback?.Invoke(raw); // logger.InfoFormat("Echoed test = {0}", Encoding.ASCII.GetString(bytes, 0, bytesRec)); } catch (Exception e) { // logger.ErrorFormat("Receive error", e.Message); logger.Error("Receive error", e); // TODO: 出现错误, 先临时处理 不再接收了 working = false; KK.Sleep(50); } } }