Esempio n. 1
0
        /// <summary>
        /// 端口独立线程,crtsnt数组序号
        /// </summary>
        void ClientThread(object clienttable)
        {
            var table = (ClientItem)clienttable;

            try
            {
                table.WorkEnable = true;
                table.Remote     = IPAddress.Parse(table.Client.Client.RemoteEndPoint.ToString().Split(':')[0]);
                OnAccept?.Invoke(table.Remote);
                using (var ns = table.Client.GetStream())
                {
                    var buffer = new byte[BufferSize];
                    var read   = 0;
                    while (table.WorkEnable && table.Client.Connected)
                    {
                        using (var ms = new MemoryStream())
                        {
                            while (ns.DataAvailable)//!sr.EndOfStream)
                            {
                                read = ns.Read(buffer, 0, BufferSize);
                                ms.Write(buffer, 0, read);
                            }
                            OnDataReceive?.Invoke(table.Remote, ms.ToArray());
                        }
                        Thread.Sleep(Interval);
                    }
                }
            }
            finally
            {
                table.Client.Close();
                ClientTable.Remove(table);
                OnDisConnect?.Invoke(table.Remote);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 断开连接
        /// </summary>
        public override void DisConnect()
        {
            try
            {
                Connected = false;
                if (NetSocket == null)
                {
                    return;
                }
                OnDisConnect?.Invoke(this);
            }
            catch { }

            try
            {
                SendParser.Clear();
                RecvParser.Clear();
                NetSocket.Close();
                NetSocket.Dispose();
                NetSocket = null;

                this.inArgs.Dispose();
                this.outArgs.Dispose();
            }
            catch { }
        }
Esempio n. 3
0
 /// <summary>
 /// 断开连接
 /// </summary>
 public override void DisConnect()
 {
     try
     {
         Connected = false;
         ConnectSender.SendFIN(this.NetSocket, this.RemoteEndPoint, this.Id);
         OnDisConnect?.Invoke(this);
     }
     catch { }
 }
Esempio n. 4
0
        public ClientManager(int capacity, int emptyPoolCnt)
        {
            _capacity = capacity;

            _clientList      = new List <ClientData>();
            _clientPool      = new ClientDataPool(capacity);
            _messageTransfer = new CruMessageTransfer();
            _sendQueue       = new CruMessageQueue(capacity);
            _receiveQueue    = new CruMessageQueue(capacity);
            _sendDataBuffer  = new byte[1024];
            _clientPool.SetEmptyData(emptyPoolCnt);   // Pool 미리 생성

            // Event 추가
            receiveCompleteEvent += PushReceiveData;
            disConnectEvent      += DisConnectClient;
        }
Esempio n. 5
0
 void OnSocketException(SocketError error)
 {
     TryDisConnectSocket();
     OnDisConnect?.Invoke(error);
 }
Esempio n. 6
0
 void OnSocketException(SocketError error)
 {
     udpClient?.Close();
     OnDisConnect?.Invoke(error);
 }