public bool Start() { try { //if (clientSocket != null) //{ // clientSocket.Close(); //} clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); clientSocket.Connect(LinkIp, LinkId); LinkState = true; ClientDispatcher.Debug($"连接成功 {Desc} {LinkType} {LinkIp} {LinkId}!"); //连接后开始从服务器读取网络消息 clientSocket.BeginReceive(ReadM, recvoffest, 65536 - recvoffest, SocketFlags.None, new System.AsyncCallback(ReceiveCallBack), ReadM); return(true); } catch (SocketException) { clientSocket = null; LinkState = false; //网络连接异常 ClientDispatcher.Error($"连接失败 {Desc} {LinkType} {LinkIp} {LinkId}!"); return(false); } }
private int DeCodePacket(ref byte[] buf, ref int recvOffest) { int decodeOffest = 0; int datalen = 0; int head = 0; while (recvOffest - decodeOffest >= 6) { datalen = BitConverter.ToInt32(buf, decodeOffest); head = BitConverter.ToUInt16(buf, decodeOffest + 4); if (head < 0 || head > 65536) { ClientDispatcher.Error($"出现Socket head异常"); return(0); } //if (datalen < 0 || datalen > 65536) //{ // ClientDispatcher.Error($"出现Socket datalen 异常"); // return 0; //} if (datalen > recvOffest - (decodeOffest + 4)) { //continue recv packet break; } decodeOffest += 4; byte[] buffer = new byte[datalen]; Buffer.BlockCopy(buf, decodeOffest, buffer, 0, datalen); decodeOffest += datalen; ListReq.Enqueue(buffer); //ClientDispatcher.OnReceiveData(buffer); StopwatchProcess.Stop(); var UseMs = StopwatchProcess.ElapsedMilliseconds; if (UseMs > maxMs) { maxMs = UseMs; ClientDispatcher.Debug($"消息处理最大耗时:{maxMs}毫秒"); } } if (decodeOffest > 0 && decodeOffest < recvOffest) { Buffer.BlockCopy(buf, decodeOffest, buf, 0, recvOffest - decodeOffest); } recvOffest = recvOffest - decodeOffest; return(1); }