Example #1
0
        /// <summary>
        /// 无引用,准备删除
        /// </summary>
        //private void TheradScoket()
        //{
        //    try
        //    {
        //        Thread TempThread;
        //        //开启接收线程
        //        TempThread = new Thread(new ThreadStart(this.ToConnect));
        //        TempThread.IsBackground = true;//设置为后台线程
        //        TempThread.Start();
        //        TempThread.Abort();//关闭线程
        //        Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        //        //关闭套接字
        //        client.Close();
        //    }
        //    catch (Exception ex)
        //    {
        //        Utils.Logger.Error(ex.ToString());
        //    }


        //}

        /// <summary>
        /// 异步挂起 需要优化
        /// </summary>
        /// <param name="er"></param>
        private static void ReceiveCallback(IAsyncResult er)
        {
            try
            {
                //异步操作获取用户定义信息
                StateObjcet state  = (StateObjcet)er.AsyncState;
                Socket      client = state.workSocket;

                //结束挂起异步读取
                int bytebuffer = client.EndReceive(er);
                if (bytebuffer > 0)
                {
                    UpdateList(new SingleDrumsControl(new UserContext("test")), new EventArgs(), Encoding.ASCII.GetString(state.buffer, 0, state.buffer.Length));
                    state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytebuffer));
                    client.BeginReceive(state.buffer, 0, StateObjcet.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
                }
                else
                {
                    if (state.sb.Length > 1)
                    {
                        response = state.sb.ToString();
                    }
                    receiveDone.Set();
                    client.Close();
                }
            }
            catch (Exception ex)
            {
                Utils.Logger.Error(ex.ToString());
            }
        }
Example #2
0
        /// <summary>
        ///读取Socket 套接字
        /// </summary>
        /// <param name="client"></param>
        private static void Receive(Socket client)
        {
            try
            {
                StateObjcet state = new StateObjcet();
                state.workSocket = client;

                client.BeginReceive(state.buffer, 0, StateObjcet.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
            }
            catch (Exception ex)
            {
                // MessageBox.Show(e.ToString());
                Utils.Logger.Error(ex.ToString());
            }
        }
Example #3
0
        private static void ConnectCallback(IAsyncResult er)
        {
            try
            {
                // 获取到异步操作信息
                Socket client = (Socket)er.AsyncState;
                UpdateStatus(new SingleDrumsControl(new UserContext("test")), new EventArgs());
                StateObjcet state = new StateObjcet();
                state.workSocket = client;

                client.BeginReceive(state.buffer, 0, StateObjcet.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);

                //  Receive(client);
                // 结束挂起异步连接操作请求
                //client.EndConnect(er);
            }
            catch (Exception ex)
            {
                Utils.Logger.Error(ex.ToString());
                return;
            }
        }
Example #4
0
        public static void ReadCallback(IAsyncResult er)
        {
            DevExecuteServiceClient client = new SRExctue.DevExecuteServiceClient();
            StateObjcet             so     = (StateObjcet)er.AsyncState;
            Socket s = so.workSocket;

            try
            {
                //异读取步
                int read = s.EndReceive(er);
                if (read > 0)
                {
                    s.BeginReceive(so.buffer, 0, StateObjcet.BufferSize, 0, new AsyncCallback(ReadCallback), so);

                    string Order = Encoding.ASCII.GetString(so.buffer, 0, read);

                    UpdateOperList(new MainForm(), new EventArgs(), s, Order);

                    string[] DealOrder = Order.Split('-');
                    string   CheckCode = Order.Substring(0, 3);
                    string   Switch    = Order.Substring(4, 1);
                    int      ExecuteID = Convert.ToInt16(Order.Substring(6, read - 6));

                    bool SwitchID = (Switch == "1") ? true : false;

                    var devTaskInfo = lstWorkbenchTask.First().LstDeveiceTask.Where(t => t.ExecID == ExecuteID).FirstOrDefault();
                    //         var devTaskInfo = lstWorkbenchTask.Where(t=>t.).LstDeveiceTask.Where(t => t.ExecID == ExecuteID).FirstOrDefault();

                    if (devTaskInfo == null)
                    {
                        IPAddress remote_ip = ((IPEndPoint)s.RemoteEndPoint).Address;
                        Utils.Logger.Debug(remote_ip.ToString() + "该IP发送错误指令,无该指令中的执行ID");
                        Byte[] byteMessage = new Byte[100]; //存放消息的字节数组缓冲区, 注意数组表示方法,和C不同的.
                        byteMessage = System.Text.Encoding.Default.GetBytes("error 402:no ExecID");
                        Socket SelectSocket = s;
                        SelectSocket.BeginSend(byteMessage, 0, byteMessage.Length, 0, new AsyncCallback(SendCallback), SelectSocket);
                    }

                    if (devTaskInfo != null)
                    {
                        //      devTaskInfo.InMBmaster.WriteSingleCoils((ushort)devTaskInfo.ExecID, (ushort)devTaskInfo.ConAccAddress.Value, SwitchID, devTaskInfo.CallID);
                        devTaskInfo.CurrDeviceConnect.Master.WriteSingleCoils((ushort)devTaskInfo.ExecID, (ushort)devTaskInfo.ConAccAddress.Value, SwitchID, devTaskInfo.CallID);
                    }
                    Utils.Logger.Debug(s.RemoteEndPoint + "执行ID" + ExecuteID.ToString() + "操作" + SwitchID.ToString());
                }
                else
                {
                    RemoveListStatus(new MainForm(), new EventArgs(), s);
                    s.Shutdown(SocketShutdown.Both);
                }
            }

            catch (SocketException)
            {
                s.Shutdown(SocketShutdown.Both);
                return;
            }
            catch (ObjectDisposedException)
            {
                return;
            }
        }
Example #5
0
        public static void AcceptCallback(IAsyncResult er)
        {
            bool Flag_IP = false;

            try
            {
                allDone.Set();
                // 异步获取用户对象
                Socket listener = (Socket)er.AsyncState;
                //异步接收连接通讯
                Socket      handler = listener.EndAccept(er);
                StateObjcet state   = new StateObjcet();
                state.workSocket = handler;
                IPAddress remote_ip = ((IPEndPoint)handler.RemoteEndPoint).Address;  //获取远程连接IP,用于安全处理



                using (SRCfPExecute.CfPExecuteServiceClient client = new SRCfPExecute.CfPExecuteServiceClient())
                {
                    var ret = client.GetAllIPRegistForm("test");
                    foreach (SRCfPExecute.IPRegistForm i in ret.Data)
                    {
                        if (remote_ip.ToString() == i.IP)
                        {
                            UpdateControl(new MainForm(), new EventArgs(), handler);
                            Utils.Logger.Debug(i.IP + "该IP已登记,顺利连接");
                            Flag_IP = true;
                            break;
                        }
                    }
                }
                if (!Flag_IP)
                {
                    Utils.Logger.Debug(remote_ip.ToString() + "该IP未登记,连接中断");
                    Byte[] byteMessage = new Byte[100]; //存放消息的字节数组缓冲区, 注意数组表示方法,和C不同的.
                    byteMessage = System.Text.Encoding.Default.GetBytes("error 401:IP no Regiter");
                    Socket SelectSocket = handler;
                    SelectSocket.BeginSend(byteMessage, 0, byteMessage.Length, 0, new AsyncCallback(SendCallback), SelectSocket);
                    SelectSocket.Dispose();
                }
                else
                {
                    Byte[] byteMessage = new Byte[100]; //存放消息的字节数组缓冲区, 注意数组表示方法,和C不同的.
                    byteMessage = System.Text.Encoding.Default.GetBytes("Connectting");
                    Socket SelectSocket = handler;

                    try
                    {
                        SelectSocket.BeginSend(byteMessage, 0, byteMessage.Length, 0, new AsyncCallback(SendCallback), SelectSocket);

                        handler.BeginReceive(state.buffer, 0, StateObjcet.BufferSize, 0, new AsyncCallback(ReadCallback), state);
                    }
                    catch (ObjectDisposedException ex)
                    {
                        Utils.Logger.Error(ex.ToString());
                    }
                }
            }
            catch (ObjectDisposedException ex)
            {
                Utils.Logger.Error(ex.ToString());
            }
        }