public static void MainLoop()
        {
            if (null == JNetworkInteractiveData.SendData ||
                null == JNetworkInteractiveData.SendData.Data)
            {
                JLog.Error("JNetworkDataSenderThread: JNetworkInteractiveData checked empty, please check initialize", JGame.Log.JLogCategory.Network);
                return;
            }

            if (null == JClientSocket.socket)
            {
                JLog.Error("JNetworkDataSenderThread: JClientSocket.socket is null, please check initialize", JGame.Log.JLogCategory.Network);
                return;
            }

            JLog.Info("JNetworkDataSenderThread: main loop started", JGame.Log.JLogCategory.Network);

            while (true)
            {
                if (_requireEnd)
                {
                    break;
                }

                try
                {
                    List <JNetworkData> dataList = JNetworkDataOperator.TakeSendData(1000);
                    if (null == dataList)
                    {
                        continue;
                    }

                    foreach (JNetworkData data in dataList)
                    {
                        JClientSocket.socket.Send(data.Data);
                        JLog.Debug("JNetworkDataSenderThread: send one network packet", JGame.Log.JLogCategory.Network);
                    }
                }
                catch (Exception e) {
                    JLog.Error(e.Message, JGame.Log.JLogCategory.Network);
                }
            }

            JLog.Info("JNetworkDataSenderThread main loop end.", JGame.Log.JLogCategory.Network);
        }
        private void SendLoop()
        {
            JLog.Info("JServerSocketManager server send loop started", JGame.Log.JLogCategory.Network);

            while (true)
            {
                if (_forceEnd)
                {
                    break;
                }
                List <JNetworkData> dataList = JNetworkDataOperator.TakeSendData(1000);
                if (null == dataList)
                {
                    continue;
                }

                foreach (JNetworkData data in dataList)
                {
                    lock (_socketLocker) {
                        foreach (Socket socket in JConnectedClientSocket.sockets)
                        {
                            if (null == socket || null == socket.RemoteEndPoint)
                            {
                                continue;
                            }

                            if (JNetworkHelper.IsSameEndpoint(data.RemoteEndPoint as IPEndPoint, socket.RemoteEndPoint as IPEndPoint))
                            {
                                try
                                {
                                    socket.Send(data.Data);
                                    JLog.Info("send one data to " + (socket.RemoteEndPoint as IPEndPoint).Address.ToString(), JGame.Log.JLogCategory.Network);
                                }
                                catch (Exception e) {
                                    JLog.Error("SendLoop error message:" + e.Message, JGame.Log.JLogCategory.Network);
                                }
                            }
                        }
                    }
                }
            }

            JLog.Info("JServerSocketManager server send loop end", JGame.Log.JLogCategory.Network);
        }