public void TestPing(byte[] data, ushort msgId) { SCPing scping = SCPing.Parser.ParseFrom(data); lastSCPingTime = DateTime.Now.Ticks; Debug.Log($"【Client】HeartBeat 客户端收到服务器心跳 {msgId} 回调====={scping.Time} {DateTime.Now}"); }
public static void ClientAccepted(IAsyncResult ar) { var socket = ar.AsyncState as Socket; //这就是客户端的Socket实例,我们后续可以将其保存起来 var client = socket.EndAccept(ar); clientSocket = client; Console.WriteLine($"有新的客户端连接: {client.RemoteEndPoint}"); Person john = new Person { Id = 1234, Name = "Hi there, I accept you request at " + DateTime.Now.ToString(), Email = "*****@*****.**", Phones = { new Person.Types.PhoneNumber { Number = "555-4321", Type = PhoneType.Home } } }; //byte[] byteArray = john.ToByteArray(); //byte[] byteArray = ProtoBufUtil.Encode(john.ToByteArray(), 100); //给客户端发送一个欢迎消息 //client.Send(byteArray); NetMsg.SendMsg(client, john, (ushort)PB.EnmCmdID.ScPerson); //测试代码 //实现每隔两秒钟给服务器发一个消息 //这里我们使用了一个定时器 var timer = new System.Timers.Timer(); timer.Interval = 2000D; timer.Enabled = true; timer.Elapsed += (o, a) => { //检测客户端Socket的状态 if (client.Connected) { try { SCPing csPing = new SCPing() { Time = 1 }; NetMsg.SendMsg(clientSocket, csPing, (ushort)PB.EnmCmdID.ScPing); //使用protobuf Person johnSC = new Person { Id = 1234, Name = "Message from server at " + DateTime.Now.ToString(), Email = "*****@*****.**", Phones = { new Person.Types.PhoneNumber { Number = "555-4321", Type = PhoneType.Home } } }; //byte[] byteArraySC = johnSC.ToByteArray(); //byte[] byteArraySC = ProtoBufUtil.Encode(johnSC.ToByteArray(), 101); //client.Send(byteArraySC); NetMsg.SendMsg(client, johnSC, (ushort)PB.EnmCmdID.ScPerson); //client.Send(Encoding.Unicode.GetBytes("Message from server at " + DateTime.Now.ToString())); } catch (SocketException ex) { Console.WriteLine(ex.Message); } } else { timer.Stop(); timer.Enabled = false; Console.WriteLine("Client is disconnected, the timer is stop."); } }; timer.Start(); //接收客户端的消息(这个和在客户端实现的方式是一样的) client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), client); //准备接受下一个客户端请求 socket.BeginAccept(new AsyncCallback(ClientAccepted), socket); }