//接收数据线程执行函数 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)); } }
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; }
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; }
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); }