private static void Maintain() { while (true) { try { string _mid = Cryptography.RandomString(5, false); byte[] packet = PublicTools.EncodeMessage(_mid, "HeartBeat"); if (CoreSend(packet, _mid, out string reply)) { LW.D("HeartBeat Succeed! " + reply); } else { throw new Exception("CoreSend Error: Timeout"); } Thread.Sleep(5000); } catch (Exception ex) { if (ex is ThreadAbortException) { return; } LW.E("Heartbeat Error! " + ex.Message); socketclient.CloseAndDispose(); stream.CloseAndDispose(); Initialise(remoteEndpoint.Address, remoteEndpoint.Port); Thread.Sleep(5000); } } }
//发送字符信息到服务端的方法 public static bool SendData(string sendMsg, string MessageId, out string rcvdMessage) { rcvdMessage = ""; byte[] mergedPackage = PublicTools.EncodeMessage(MessageId, sendMsg); while (!Connected) { LW.E("Message Sent Waiting for connection...."); Thread.Sleep(500); } return(CoreSend(mergedPackage, MessageId, out rcvdMessage)); }
private static void Recv(object socketclientpara) { Socket baseSocket = socketclientpara as Socket; NetworkStream stream = new NetworkStream(baseSocket); string remoteEP = baseSocket.RemoteEndPoint.ToString(); bool _connectionOpened = false; while (true) { try { string requestString = PublicTools.DecodeMessage(stream); LW.D("Recived Data: " + requestString); if (requestString.Length <= 5) { baseSocket.CloseAndDispose(); break; } string _MessageId = requestString.Substring(0, 5); requestString = requestString.Substring(5); if (requestString == "openConnection") { LW.D("C: Recieve an OpenConnection Request, from " + remoteEP); byte[] arrSendMsg = PublicTools.EncodeMessage(_MessageId, remoteEP); stream.Write(arrSendMsg, 0, arrSendMsg.Length); stream.Flush(); LW.D("C: Replied an OpenConnection Request, to " + remoteEP); _connectionOpened = true; } else if (_connectionOpened) { if (requestString == "HeartBeat") { LW.D("B: Recieve a HearBeat, from " + remoteEP); DateTime rtime = DateTime.Now; byte[] arrSendMsg = PublicTools.EncodeMessage(_MessageId, rtime.ToNormalString()); stream.Write(arrSendMsg, 0, arrSendMsg.Length); stream.Flush(); LW.D("C: Replied a HearBeat, to " + remoteEP); } else if (requestString.ToParsedObject(out DBInternal request)) { QueryStrings[remoteEP] = requestString; LW.D("Q: " + remoteEP + " :: " + requestString); //It takes Time..... string returnStr = DatabaseCore.ProcessRequest(request); byte[] arrSendMsg = PublicTools.EncodeMessage(_MessageId, returnStr); stream.Write(arrSendMsg, 0, arrSendMsg.Length); stream.Flush(); LW.D("P: " + remoteEP + " :: " + returnStr); } else { //Invalid Connection...... LW.E("E: " + remoteEP + " :: JSON Parse Exception!"); baseSocket.CloseAndDispose(); QueryStrings.Remove(remoteEP); break; } } else { LW.E("Connection to " + remoteEP + " is not marked as 'Opened'"); baseSocket.CloseAndDispose(); stream.CloseAndDispose(); QueryStrings.Remove(remoteEP); break; } } catch (Exception ex) { LW.E("Client " + remoteEP + " drops the connection. " + "\r\n" + ex.Message + "\r\n" + ex.StackTrace + "\r\n"); QueryStrings.Remove(remoteEP); stream.CloseAndDispose(); baseSocket.CloseAndDispose(); break; } } QueryStrings.Remove(remoteEP); LW.E("Client Connection Socket to " + remoteEP + " gonna Stop!"); Thread.CurrentThread.Abort(); return; }