public virtual void OnComplete(TcpClient client, EnSocketAction enAction) { if (Completed != null) { Completed(client, enAction); } if (enAction == EnSocketAction.Connect)//建立连接后,开始接收数据 { System.Threading.ThreadPool.QueueUserWorkItem(x => { while (!isClose) { try { Thread.Sleep(20); ReceiveAsync(); Thread.Sleep(20); } catch (Exception) { Close(); OnComplete(client, EnSocketAction.Close); } } }); } }
private void tcpCompletedMethod(TcpClient c, EnSocketAction enAction) { if (c.Client != null) { IPEndPoint iep = c.Client.RemoteEndPoint as IPEndPoint; string key = string.Format("{0}:{1}", iep.Address.ToString(), iep.Port); switch (enAction) { case EnSocketAction.Connect: //Console.WriteLine("已经与{0}建立连接", key); label2.Text = string.Format("已经与{0}建立连接", key); break; case EnSocketAction.SendMsg: Console.WriteLine("{0}:向{1}发送了一条消息", DateTime.Now, key); break; case EnSocketAction.Close: client.Close(); client = null; Console.WriteLine("服务端连接关闭"); this.Close(); Application.Exit(); break; default: break; } } else { Console.WriteLine("Tcp为空"); } }
/// <summary> /// 可供开发重写的实现类 /// </summary> /// <param name="key">指定发送对象</param> /// <param name="enAction">消息类型</param> public virtual void OnComplete(string key, EnSocketAction enAction) { Completed?.Invoke(key, enAction); if (enAction == EnSocketAction.Connect)//当连接建立时,则要一直接收 { ThreadPool.QueueUserWorkItem(x => { while (ListClient.ContainsKey(key) && !isClose) { Thread.Sleep(20); ReceiveAsync(key); Thread.Sleep(20); } }); } }
/// <summary> /// 可供开发重写的事件方法 /// </summary> /// <param name="IpPort">IP:端口</param> /// <param name="enAction">消息类型</param> public virtual void OnComplete(string IpPort, EnSocketAction enAction) { Completed?.Invoke(IpPort, enAction); }