Exemple #1
0
        /// <summary>
        /// 开启套接字监听
        /// </summary>

        public static void Start()
        {
            try
            {
                int port = GlobalContext.MasterSocketPort;
                //检查是否已经开启了端口
                bool isBeUsed = SocketHelper.IsUsedIPEndPoint(port);
                if (isBeUsed == true)
                {
                    return;
                }

                //开启 异步的启动任务,由于在内部进行了线程阻塞,所以task 永远不会complete

                listener = new NTCPMessage.Server.NTcpListener(new IPEndPoint(IPAddress.Any, port));
                listener.DataReceived       += new EventHandler <ReceiveEventArgs>(ReceiveEventHandler);
                listener.ErrorReceived      += new EventHandler <ErrorEventArgs>(ErrorEventHandler);
                listener.RemoteDisconnected += new EventHandler <DisconnectEventArgs>(DisconnectEventHandler);

                listener.Listen();
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
            //System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
        }
Exemple #2
0
 /// <summary>
 /// 终止tcp 服务端的监听
 /// </summary>
 public static void Stop()
 {
     if (null != listener)
     {
         listener.Close();
         listener = null;
     }
 }
Exemple #3
0
        /// <summary>
        /// 开启套接字监听
        /// 向主节点发送登记,登记成功,并返回可用的端口,然后开启指定端口的子节点server
        /// </summary>

        public static void Start()
        {
            try
            {
                if (false == GlobalContext.IsConfigClusteringMode)//是否开启集群模式
                {
                    return;
                }

                //一旦主控节点开启并正确返回结果
                if (!MasterRemoteServer.IsMasterStarted())
                {
                    return;
                }

                //进入监控进程broker
                AppBroker.MonitorIsMasterCenterAlive();

                int port = 0;

                var slaveIdentity = Guid.NewGuid().ToString().ToLower();
                //开启监听前 ,发送注册当前从节点到主节点,如果可以登记注册成功,那么服务端分配端口
                port = MasterRemoteServer.RegisterSlaveToMaster(slaveIdentity);
                int counter = 1;
                //注册失败后 再次尝试3次
                while (port <= 0 && counter <= 3)
                {
                    port     = MasterRemoteServer.RegisterSlaveToMaster(slaveIdentity);
                    counter += 1;
                    RunningLocker.CreateNewLock().CancelAfter(1000);//延迟并发,防止端口资源抢占
                }
                if (port <= 0)
                {
                    Console.WriteLine("未成功注册从节点端口!");
                    return;//一旦服务端返回无效端口 那么禁止从节点启动监听
                }



                listener = new NTCPMessage.Server.NTcpListener(new IPEndPoint(IPAddress.Any, port));
                listener.DataReceived       += new EventHandler <ReceiveEventArgs>(ReceiveEventHandler);
                listener.ErrorReceived      += new EventHandler <ErrorEventArgs>(ErrorEventHandler);
                listener.RemoteDisconnected += new EventHandler <DisconnectEventArgs>(DisconnectEventHandler);

                GlobalContext.IsInSlaveMode = true;//标识正在从节点下工作

                //开启从节点的监听
                listener.Listen();
            }

            catch (Exception ex)
            {
                Logger.Error(ex);
            }


            System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
        }
Exemple #4
0
        internal SendMessageTask(NTcpListener listenser)
        {
            _Listener        = listenser;
            _TotalQueueCount = 0;
            Event            = new AutoResetEvent(false);

            _Thread = new ProcessorThread(ThreadProc);

            _Thread.IsBackground = true;
        }
        /// <summary>
        /// 开启套接字监听
        /// </summary>

        public static Task Start()
        {
            //开启 异步的启动任务,由于在内部进行了线程阻塞,所以task 永远不会complete
            return(Task.Factory.StartNew(() =>
            {
                int port = GlobalContext.MasterSocketPort;
                listener = new NTCPMessage.Server.NTcpListener(new IPEndPoint(IPAddress.Any, port));
                listener.DataReceived += new EventHandler <ReceiveEventArgs>(ReceiveEventHandler);
                listener.ErrorReceived += new EventHandler <ErrorEventArgs>(ErrorEventHandler);
                listener.RemoteDisconnected += new EventHandler <DisconnectEventArgs>(DisconnectEventHandler);

                listener.Listen();

                System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
            }));
        }
        static void Main(string[] args)
        {
            if (System.IO.File.Exists("channel.txt"))
            {
                System.IO.File.Delete("channel.txt");
            }

            _Thread = new Thread(Statistic);
            _Thread.IsBackground = true;

            listener = new NTCPMessage.Server.NTcpListener(new IPEndPoint(IPAddress.Any, 2500));
            listener.DataReceived       += new EventHandler <ReceiveEventArgs>(ReceiveEventHandler);
            listener.ErrorReceived      += new EventHandler <ErrorEventArgs>(ErrorEventHandler);
            listener.RemoteDisconnected += new EventHandler <DisconnectEventArgs>(DisconnectEventHandler);
            _Thread.Start();

            listener.Listen();

            System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
        }
Exemple #7
0
        internal SCB(Server.NTcpListener listener, Socket workSocket)
        {
            _Listener = listener;

            lock (_SCBID_LOCK)
            {
                Id = _SCB_ID++;
            }

            this._CurState   = State.Sync0;
            this.WorkSocket  = workSocket;
            _MSGHead[0]      = 0xA5;
            _MSGHead[1]      = 0xA5;
            RemoteIPEndPoint = (IPEndPoint)workSocket.RemoteEndPoint;
            //AddTCB(this);

            _MStream = new System.IO.MemoryStream(MStreamCapacity);

            WorkSocket.BeginReceive(_Buffer, 0, _Buffer.Length, SocketFlags.None,
                                    new AsyncCallback(Async_Receive), WorkSocket);
        }