//接收数据线程执行函数
 private void UdpClientReceive(UdpClient client)
 {
     try
     {
         if (client == null)
         {
             return;
         }
         IPEndPoint endpoint = null;
         while (true)
         {
             byte[] buf = client.Receive(ref endpoint);//获取从网络门禁机返回的数据包
             if (IsStop)
             {
                 return;
             }
             RecvCallback?.Invoke(client, endpoint, buf);
         }
     }
     catch (Exception e)
     {
         if (IsStop)
         {
             return;
         }
         RunLog.Log(string.Format(" Exception:{0} StackTrace:{1},InnerException:{2},Message:{3}", e, e.StackTrace, e.InnerException, e.Message));
     }
 }
Example #2
0
        public ChuniIO(string ioServerAddress, int port, RecvCallback recvCallback)
        {
            _ioServerAddress     = ioServerAddress;
            _port                = port;
            _running             = false;
            _client              = new UdpClient();
            _sendBuffer          = new byte[32];
            _sendBufferUnmanaged = Marshal.AllocHGlobal(32);

            _recvCallback = recvCallback;
        }
Example #3
0
    public void connect(string ip, int port, RecvCallback cb)
    {
        Crypt.setAESKey("SocketRouterSvr");
        m_recvCallback = cb;

        m_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        IPAddress  address = IPAddress.Parse(ip);
        IPEndPoint ep      = new IPEndPoint(address, port);

        m_socket.Connect(ep);
        m_socket.BeginReceive(m_buff, 0, m_buff.Length, SocketFlags.None, new System.AsyncCallback(ReceiveFromServer), m_socket);
    }
 public void setRecvCallback(RecvCallback callback)
 {
     recvcallback = callback;
 }
Example #5
0
        private int epoll_fd = -1;//epoolid


        /// <summary> /// 启动epoll服务
        /// </summary>
        /// <param name="ports">端口</param>
        /// <param name="ipaddrs">ip</param>
        /// <param name="recvSizes">每次接收大小</param>
        /// <param name="RecvCalls">收到消息后的回调用函数</param>
        /// <param name="SocketCloseCalls">连接断开后的回掉函数</param>
        /// <param name="listenSizes"> socket监听的队列长度</param>
        /// <param name="epollSizes"> Epoll监听的最多数量</param>
        /// <param name="AcceptCalls">有新的连接连入时候的回掉</param>
        /// <param name="readCounts">处理到某一个连接事件通知后,每次最多读取的次数</param>
        /// <param name="workQueueCounts">指定接收消息的队列数量,最大是8</param>
        /// <param name="istickpackage">受否选择粘包</param>
        /// <returns></returns>
        public bool Start(ushort ports, string ipaddrs, int recvSizes, RecvCallback RecvCalls, SocketCloseCallback SocketCloseCalls, int listenSizes, int epollSizes, AcceptCallback AcceptCalls, int readCounts, int workQueueCounts)
        {
            //开启队列接受粘包数据
            revMesQue1.UserWork += UserWorkRrevMesQue;
            if (revMesQue1.StartUserWork())
            {
                Console.WriteLine("UserWorkRrevMesQue1队列开启成功");
            }
            revMesQue2.UserWork += UserWorkRrevMesQue;
            if (revMesQue2.StartUserWork())
            {
                Console.WriteLine("UserWorkRrevMesQue2队列开启成功");
            }
            revMesQue3.UserWork += UserWorkRrevMesQue;
            if (revMesQue3.StartUserWork())
            {
                Console.WriteLine("UserWorkRrevMesQue3队列开启成功");
            }
            revMesQue4.UserWork += UserWorkRrevMesQue;
            if (revMesQue4.StartUserWork())
            {
                Console.WriteLine("UserWorkRrevMesQue4队列开启成功");
            }
            revMesQue5.UserWork += UserWorkRrevMesQue;
            if (revMesQue5.StartUserWork())
            {
                Console.WriteLine("UserWorkRrevMesQue5队列开启成功");
            }
            revMesQue6.UserWork += UserWorkRrevMesQue;
            if (revMesQue6.StartUserWork())
            {
                Console.WriteLine("UserWorkRrevMesQue6队列开启成功");
            }
            revMesQue7.UserWork += UserWorkRrevMesQue;
            if (revMesQue7.StartUserWork())
            {
                Console.WriteLine("UserWorkRrevMesQue7队列开启成功");
            }
            revMesQue8.UserWork += UserWorkRrevMesQue;
            if (revMesQue8.StartUserWork())
            {
                Console.WriteLine("UserWorkRrevMesQue8队列开启成功");
            }



            port            = ports;
            ipaddr          = ipaddrs;
            recvSize        = recvSizes;
            RecvCall        = RecvCalls;
            SocketCloseCall = SocketCloseCalls;
            listenSize      = listenSizes;
            epollSize       = epollSizes;
            AcceptCall      = AcceptCalls;

            readCount      = readCounts;
            workQueueCount = workQueueCounts;

            //回掉
            callback = CSCallbackFunction;
            var honssin_port = LSocket.htons(port);//端口

            Console.WriteLine("端口输出: {0}", honssin_port.ToString());

            var htonlip = LSocket.inet_addr(ipaddr); //htonl(0x00000000);

            Console.WriteLine("IP输出: {0}", htonlip.ToString());

            //创建socket
            sockfd = LSocket.socket(DomainType.AF_INET, SocketTypes.SOCK_STREAM, Protocol.IPPROTO_TCP);

            Console.WriteLine("创建socket输出: {0}", sockfd.ToString());

            //创建参数结构
            sockaddr_in addr = new sockaddr_in()
            {
                sin_family = DomainType.AF_INET,
                sin_port   = honssin_port,
                //sin_zero =new byte[] ,// System.Text.Encoding.UTF8.GetBytes(""),
                sin_addr = new in_addr {
                    s_addr = htonlip
                }
            };


            //绑定
            int bindretrun = LSocket.bind(sockfd, ref addr, 16);

            Console.WriteLine("绑定输出: {0}", bindretrun.ToString());

            if (bindretrun == 0)
            {
                Console.WriteLine("bind成功");
            }
            else
            {
                return(false);
            }

            //监听
            int lien = LSocket.listen(sockfd, listenSize);

            if (lien == 0)
            {
                Console.WriteLine("listen成功");
            }
            else
            {
                return(false);
            }

            epoll_fd = LSocket.epoll_create(epollSize);

            Console.WriteLine("epoll_create输出: {0}", epoll_fd.ToString());

            if (epoll_fd == -1)
            {
                return(false);
            }



            var epollctlret = LSocket.epoll_ctl_ADD(epoll_fd, EPOLL_CTL.EPOLL_CTL_ADD, sockfd, (int)EpollEvents.EPOLLIN);


            Console.WriteLine("epoll_ctl注册返回值: {0}", epollctlret.ToString());
            if (epollctlret == -1)
            {
                return(false);
            }

            //开启Epoll
            Thread th = new Thread(() =>
            {
                LSocket.PollWait(epoll_fd, epollSize, callback);//开启等待模式
            });

            th.Start();



            //开启线程读取消息-------1个线程池
            #region 开启线程读取消息
            Thread thr = new Thread(() =>
            {
                while (true)
                {
                    var tepm = workQ1.DequeueItem();
                    if (tepm != null && tepm != 0)
                    {
                        try
                        {
                            Redmes(tepm);
                        }
                        catch (Exception expWork)
                        {
                            Console.WriteLine("读取都列异常: {0}", expWork.Message.ToString());
                        }
                    }
                    else
                    {
                        Thread.Sleep(20);
                    }
                }
            });
            thr.Start();


            Thread thr2 = new Thread(() =>
            {
                while (true)
                {
                    var tepm = workQ2.DequeueItem();
                    if (tepm != null && tepm != 0)
                    {
                        try
                        {
                            Redmes(tepm);
                        }
                        catch (Exception expWork)
                        {
                            Console.WriteLine("读取都列异常: {0}", expWork.Message.ToString());
                        }
                    }
                    else
                    {
                        Thread.Sleep(20);
                    }
                }
            });
            thr2.Start();

            Thread thr3 = new Thread(() =>
            {
                while (true)
                {
                    var tepm = workQ3.DequeueItem();
                    if (tepm != null && tepm != 0)
                    {
                        try
                        {
                            Redmes(tepm);
                        }
                        catch (Exception expWork)
                        {
                            Console.WriteLine("读取都列异常: {0}", expWork.Message.ToString());
                        }
                    }
                    else
                    {
                        Thread.Sleep(20);
                    }
                }
            });
            thr3.Start();


            Thread thr4 = new Thread(() =>
            {
                while (true)
                {
                    var tepm = workQ4.DequeueItem();
                    if (tepm != null && tepm != 0)
                    {
                        try
                        {
                            Redmes(tepm);
                        }
                        catch (Exception expWork)
                        {
                            Console.WriteLine("读取都列异常: {0}", expWork.Message.ToString());
                        }
                    }
                    else
                    {
                        Thread.Sleep(20);
                    }
                }
            });
            thr4.Start();
            #endregion

            #region 开启线程读取消息2
            Thread thr5 = new Thread(() =>
            {
                while (true)
                {
                    var tepm = workQ5.DequeueItem();
                    if (tepm != null && tepm != 0)
                    {
                        try
                        {
                            Redmes(tepm);
                        }
                        catch (Exception expWork)
                        {
                            Console.WriteLine("读取都列异常: {0}", expWork.Message.ToString());
                        }
                    }
                    else
                    {
                        Thread.Sleep(20);
                    }
                }
            });
            thr5.Start();


            Thread thr6 = new Thread(() =>
            {
                while (true)
                {
                    var tepm = workQ6.DequeueItem();
                    if (tepm != null && tepm != 0)
                    {
                        try
                        {
                            Redmes(tepm);
                        }
                        catch (Exception expWork)
                        {
                            Console.WriteLine("读取都列异常: {0}", expWork.Message.ToString());
                        }
                    }
                    else
                    {
                        Thread.Sleep(20);
                    }
                }
            });
            thr6.Start();

            Thread thr7 = new Thread(() =>
            {
                while (true)
                {
                    var tepm = workQ7.DequeueItem();
                    if (tepm != null && tepm != 0)
                    {
                        try
                        {
                            Redmes(tepm);
                        }
                        catch (Exception expWork)
                        {
                            Console.WriteLine("读取都列异常: {0}", expWork.Message.ToString());
                        }
                    }
                    else
                    {
                        Thread.Sleep(20);
                    }
                }
            });
            thr7.Start();


            Thread thr8 = new Thread(() =>
            {
                while (true)
                {
                    var tepm = workQ8.DequeueItem();
                    if (tepm != null && tepm != 0)
                    {
                        try
                        {
                            Redmes(tepm);
                        }
                        catch (Exception expWork)
                        {
                            Console.WriteLine("读取都列异常: {0}", expWork.Message.ToString());
                        }
                    }
                    else
                    {
                        Thread.Sleep(20);
                    }
                }
            });
            thr8.Start();
            #endregion



            return(true);
        }