/// <summary> /// 发送消息给服务器 /// </summary> /// <param name="ksModel"></param> /// <returns></returns> public bool SendMessage <T>(KevSocketModel <T> ksModel) { Socket socket = SocketRegister.Get(SocketClient); if (socket == null) { return(false); } bool isSuccess = UDPSocketServer.SendMessage(socket, ksModel, this.ServerIPPoint); if (isSuccess) { Console.WriteLine("SendMessage" + ksModel.MessageId + "::" + ksModel.MessageType); KevMessageBox.Enqueue(ksModel.MessageId, new KevMessageBoxModel { IP = ServerIPPoint, SocketModel = ksModel, TimeOut = DateTime.Now.AddSeconds(this.TimeOutSeconds) }); } return(isSuccess); }
/// <summary> /// 开始 /// </summary> /// <returns></returns> public bool Start() { isRuning = true; Socket socket_client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); if (this.ServerIPPoint == null) { throw new Exception("IPPoint must be a valid value"); } socket_client.SendTo(Encoding.UTF8.GetBytes(Handshake1), ServerIPPoint); SocketRegister.Add(SocketClient, socket_client); Thread thread = new Thread(() => { EndPoint remoteEP = (EndPoint) new IPEndPoint(IPAddress.Any, 0); while (isRuning) { int recv; byte[] datas = new byte[8 * 1024]; try { recv = socket_client.ReceiveFrom(datas, ref remoteEP); } catch (Exception ex) { Console.WriteLine(ex.Message); continue; } UDPModel udpModel = new UDPModel { Body = datas, IPPoint = (IPEndPoint)remoteEP, Length = recv }; ThreadPool.QueueUserWorkItem(new WaitCallback(HandleMessage), udpModel); } }); thread.IsBackground = true; thread.Start(); Thread thread_deepMessage = new Thread(() => { while (isRuning) { Thread.Sleep(100); KevMessageBoxModel kmbModel = KevMessageBox.GetFirstMessage(); if (kmbModel == null) { continue; } if (kmbModel.TimeOut.Ticks <= DateTime.Now.Ticks) { //跳转到超时 ThreadPool.QueueUserWorkItem(new WaitCallback(HandleTimeOutMessage), kmbModel); } else { KevMessageBox.Enqueue(kmbModel.SocketModel.MessageId, kmbModel); } } }); thread_deepMessage.IsBackground = true; thread_deepMessage.Start(); return(true); }