//private void checkThread() //{ // while (true) // { // Thread.Sleep(1000); // CallbackInfo item = null; // DateTime now = DateTime.Now; // for (int i = callbacks.Count - 1; i >= 0; i--) // { // //超时 // item = callbacks[i]; // if (now >= item.TimeOut) // { // callbacks.Remove(item); // var resp = new GameResponse(item.CmdId, item.Sequence, -99); // //OnRecv(resp); // MessageTip.GetInstance().ShowMessage("连接超时!"); // Log.Debug("GameSocket:Timeout CmdId={0},Seq={1},Result={2}", resp.CmdId, resp.Sequence, resp.Result); // queues.Enqueue(resp); // } // } // } //} private void recvThread() { int max_buffer = 1024 * 64; byte[] buffer = new byte[max_buffer]; bool bReadedHead = false; int iTotalLen = 0; int iRecvLen = 0; bool nextPacket = true; short msgLen = 0; while (!closeing) { if (!mSocket.Connected) { break; } if (nextPacket) { //强断有异常 iRecvLen = mSocket.Receive(buffer, iTotalLen, max_buffer - iTotalLen, SocketFlags.None); System.Console.WriteLine("Recv len={0}", iRecvLen); Debug.Log("iRecvLen:" + iRecvLen); if (iRecvLen <= 0) { //网络断开 break; } iTotalLen += iRecvLen; } //先读包头 if (!bReadedHead && iTotalLen > 3) { msgLen = (short)((buffer[1] & 0xff) << 8); msgLen += (short)(buffer[2] & 0xff); bReadedHead = true; } if (bReadedHead && iTotalLen >= msgLen) { Debug.Log("读取数据"); byte[] temp = new byte[msgLen - 3]; Array.Copy(buffer, 3, temp, 0, msgLen - 3); var resp = GameResponse.Decode(temp); iTotalLen -= msgLen; if (iTotalLen > 0) { Array.Copy(buffer, msgLen, buffer, 0, iTotalLen); } bReadedHead = false; //lock (lockObj) { queues.Enqueue(resp); } //OnRecv(resp); // Log.Debug("GameSocket:Recv CmdId={0},Seq={1},Result={2}", resp.CmdId, resp.Sequence, resp.Result); nextPacket = (iTotalLen == 0); } else { nextPacket = true; } Thread.Sleep(10); } }