/// <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()); } }
/// <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()); } }
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; } }
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; } }
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()); } }