//void ReceiveFrame() //{ // var count = client.Receive(messTmp); // if(count!=0) // { // Debug.Log(count); // string message = BitConverter.ToInt32(messTmp, 0).ToString(); // //string message = Encoding.UTF8.GetString(messTmp, 0, count); // //Debug.Log(message); // //myText.GetComponent<Text>().text = message; // } //} void Receive(Socket socket) { Task.Factory.StartNew(() => { var pack = new BytePkg(); while (true) { try { if (!socket.Connected) { Debug.Log("连接已断开,停止接收数据;"); break; } byte[] prevBytes = new byte[1024]; int len = socket.Receive(prevBytes, prevBytes.Length, SocketFlags.None); Debug.Log(len); var bytes = prevBytes.Take(len).ToArray(); Debug.Log(bytes); this.RcvHeadData(pack, bytes); } catch (Exception ex) { Console.WriteLine(ex.Message); } } }); }
void RcvHeadData(BytePkg pack, byte[] bytes) { var len = bytes.Length; pack.headIndex += len; if (pack.headIndex < pack.headLen) { for (int x = 0; x < len; x++) { pack.headBuff[pack.headIndex - len + x] = bytes[x]; } } else { var actualHeadLen = pack.headIndex - len; var skipHeadLen = pack.headLen - actualHeadLen; for (int x = 0; x < skipHeadLen; x++) { pack.headBuff[actualHeadLen + x] = bytes[x]; } var bodyLen = len; if (skipHeadLen > 0) { bodyLen = len - skipHeadLen; pack.InitBodyBuff(); } this.RcvBodyData(pack, bytes.Skip(skipHeadLen).Take(bodyLen).ToArray()); } }
void RcvBodyData(BytePkg pack, byte[] bytes) { var len = bytes.Length; pack.bodyIndex += len; if (pack.bodyIndex < pack.bodyLen) { for (int x = 0; x < len; x++) { pack.bodyBuff[pack.bodyIndex - len + x] = bytes[x]; } } else { var actualBodyLen = pack.bodyIndex - len; var skipBodyLen = pack.bodyLen - actualBodyLen; for (int x = 0; x < skipBodyLen; x++) { pack.bodyBuff[actualBodyLen + x] = bytes[x]; } //this.OnReceiveMsg(pack.bodyBuff); pack.ResetData(); this.RcvHeadData(pack, bytes.Skip(skipBodyLen).ToArray()); } }