Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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);
        }