IPPacket IPReader() { bool b7E = false; byte rx; List <byte> RxTemp = new List <byte>(); while (true) { try { rx = (byte)Com.ReadByte(); } catch (InvalidOperationException ex)//端口被关闭,任务结束 { throw ex; } catch { return(null); } if (b7E) { if (rx == 0x7e) { List <byte> RxList = pppDataTransferConvert.PPPDataDecode(RxTemp); // #if DEBUG // communicationDebugForm.ExternShowRx(RxList); // #endif // ushort crc = BytesOP.MakeShort(RxList[RxList.Count - 1], RxList[RxList.Count - 2]); // if (Verify.GetVerify_CRC16_CCITT(RxList.ToArray(), RxList.Count - 2) != crc) // return null; // if (RxList[0] == 0xff || RxList[1] == 0x03)//去掉地址字节,本库中没有 // { // RxList.Remove(0xff); // RxList.Remove(0x03); // } IPPacket ipUp; try { ipUp = IPPacket.MakeIPPacket(RxList, 4); } catch { pppPocket pppUp; pppUp = pppDataTransferConvert.MakepppPacket(RxList, 2); switch (pppUp.Protocol) { case 0xc021: LCP(pppUp); break; case 0xc023: PAP(pppUp); break; case 0x8021: IPCP(pppUp); break; } Debug.WriteLine(Com.PortName + StringsFunction.byteToHexStr(RxTemp.ToArray(), " ")); return(null); } TCPPacket tcpUp = (TCPPacket)ipUp.oProtocolContent; if (tcpUp != null) { OnIPProcLog("编号:" + tcpUp.InitialSeqNumber.ToString(), (int)ATCommandLogType.Rx); OnIPProcLog("回应编号:" + tcpUp.AckSeqNumber.ToString(), (int)ATCommandLogType.Rx); OnIPProcLog("标志:" + tcpUp.TCPFlags.ToString("X2"), (int)ATCommandLogType.Rx); } return(ipUp); } else { RxTemp.Add(rx); } } else { if (rx == 0x7e) { b7E = true; } else { OnIPProcLog("未知接收:" + rx.ToString("X2"), (int)ATCommandLogType.Rx); } } } }