diff --git a/App/AT.cpp b/App/AT.cpp index f2917e19..b7378b26 100644 --- a/App/AT.cpp +++ b/App/AT.cpp @@ -322,7 +322,8 @@ uint AT::OnReceive(Buffer& bs, void* param) // +IPD开头的数据,作为收到数据 if (p >= 0) { - if (p + 5 >= bs.Length()) + p += String(DataKey).Length(); + if (p >= bs.Length()) { #if NET_DEBUG ParseFail("+IPD<=5", bs.Sub(p, -1)); diff --git a/Drivers/GSM07.cpp b/Drivers/GSM07.cpp index d679daa4..776577b3 100644 --- a/Drivers/GSM07.cpp +++ b/Drivers/GSM07.cpp @@ -315,7 +315,26 @@ Socket* GSM07::CreateSocket(NetType type) // 数据到达 void GSM07::OnReceive(Buffer& bs) { - Received(bs); + // +CIPRCV:61,xxx + auto str = bs.AsString(); + int p = str.IndexOf(","); + if (p <= 0) return; + + int len = str.Substring(0, p).ToInt(); + // 检查长度 + if (p + 1 + len > bs.Length()) len = bs.Length() - p - 1; + auto data = bs.Sub(p + 1, len); + + Received(data); + + // 分发到各个Socket + int idx = 0; + auto es = (GSMSocket**)_sockets; + auto sk = es[idx]; + if (sk) + { + sk->OnProcess(data, _Remote); + } } /******************************** 基础AT指令 ********************************/